texlive[57469] Master/texmf-dist: circuitikz (19jan21)

commits+karl at tug.org commits+karl at tug.org
Tue Jan 19 23:58:19 CET 2021


Revision: 57469
          http://tug.org/svn/texlive?view=revision&revision=57469
Author:   karl
Date:     2021-01-19 23:58:18 +0100 (Tue, 19 Jan 2021)
Log Message:
-----------
circuitikz (19jan21)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/context/third/circuitikz/circuitikz-context.pdf
    trunk/Master/texmf-dist/doc/context/third/circuitikz/circuitikz-context.tex
    trunk/Master/texmf-dist/doc/generic/circuitikz/CHANGELOG.md
    trunk/Master/texmf-dist/doc/generic/circuitikz/README.md
    trunk/Master/texmf-dist/doc/latex/circuitikz/changelog.tex
    trunk/Master/texmf-dist/doc/latex/circuitikz/circuitikzmanual.pdf
    trunk/Master/texmf-dist/doc/latex/circuitikz/circuitikzmanual.tex
    trunk/Master/texmf-dist/doc/latex/circuitikz/ctikzmanutils.sty
    trunk/Master/texmf-dist/tex/context/third/circuitikz/t-circuitikz.tex
    trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcirc.defines.tex
    trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircbipoles.tex
    trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcirccurrent.tex
    trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircflow.tex
    trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcirclabel.tex
    trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircmonopoles.tex
    trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircmultipoles.tex
    trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircpath.tex
    trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircquadpoles.tex
    trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircshapes.tex
    trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcirctripoles.tex
    trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircutils.tex
    trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircvoltage.tex
    trunk/Master/texmf-dist/tex/latex/circuitikz/circuitikz.sty

Added Paths:
-----------
    trunk/Master/texmf-dist/tex/context/third/circuitikz/t-circuitikz-1.2.7.tex
    trunk/Master/texmf-dist/tex/latex/circuitikz/circuitikz-1.2.7.sty

Modified: trunk/Master/texmf-dist/doc/context/third/circuitikz/circuitikz-context.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/context/third/circuitikz/circuitikz-context.tex
===================================================================
--- trunk/Master/texmf-dist/doc/context/third/circuitikz/circuitikz-context.tex	2021-01-19 22:57:40 UTC (rev 57468)
+++ trunk/Master/texmf-dist/doc/context/third/circuitikz/circuitikz-context.tex	2021-01-19 22:58:18 UTC (rev 57469)
@@ -1,7 +1,7 @@
-% Copyright 2018-2020 by Romano Giannetti
-% Copyright 2015-2020 by Stefan Lindner
-% Copyright 2013-2020 by Stefan Erhardt
-% Copyright 2007-2020 by Massimo Redaelli
+% Copyright 2018-2021 by Romano Giannetti
+% Copyright 2015-2021 by Stefan Lindner
+% Copyright 2013-2021 by Stefan Erhardt
+% Copyright 2007-2021 by Massimo Redaelli
 %
 % This file may be distributed and/or modified
 %

Modified: trunk/Master/texmf-dist/doc/generic/circuitikz/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/generic/circuitikz/CHANGELOG.md	2021-01-19 22:57:40 UTC (rev 57468)
+++ trunk/Master/texmf-dist/doc/generic/circuitikz/CHANGELOG.md	2021-01-19 22:58:18 UTC (rev 57469)
@@ -1,6 +1,13 @@
 <!--- CircuiTikz - Changelog --->
 The major changes among the different circuitikz versions are listed here. See <https://github.com/circuitikz/circuitikz/commits> for a full list of changes.
 
+* Version 1.3.0 (2021-01-19)
+
+    - Fixed a long-standing problem with labels and similar decoration with equal signs and commas
+    - Fixed a typo in the manual (thanks to @muzimuzhi on GitHub)
+    - The Mother of All Code Refactoring: no real changes (modulo errors)
+    - Added a rollback point to 1.2.7
+
 * Version 1.2.7 (2020-12-27)
 
     Bugfix release.

Modified: trunk/Master/texmf-dist/doc/generic/circuitikz/README.md
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/circuitikz/changelog.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuitikz/changelog.tex	2021-01-19 22:57:40 UTC (rev 57468)
+++ trunk/Master/texmf-dist/doc/latex/circuitikz/changelog.tex	2021-01-19 22:58:18 UTC (rev 57469)
@@ -5,6 +5,21 @@
 
 \begin{itemize}
 \item
+  Version 1.3.0 (2021-01-19)
+
+  \begin{itemize}
+  \tightlist
+  \item
+    Fixed a long-standing problem with labels and similar decoration
+    with equal signs and commas
+  \item
+    Fixed a typo in the manual (thanks to @muzimuzhi on GitHub)
+  \item
+    The Mother of All Code Refactoring: no real changes (modulo errors)
+  \item
+    Added a rollback point to 1.2.7
+  \end{itemize}
+\item
   Version 1.2.7 (2020-12-27)
 
   Bugfix release.

Modified: trunk/Master/texmf-dist/doc/latex/circuitikz/circuitikzmanual.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/circuitikz/circuitikzmanual.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuitikz/circuitikzmanual.tex	2021-01-19 22:57:40 UTC (rev 57468)
+++ trunk/Master/texmf-dist/doc/latex/circuitikz/circuitikzmanual.tex	2021-01-19 22:58:18 UTC (rev 57469)
@@ -5,10 +5,10 @@
 % !TeX spellcheck = en_US
 % !TeX encoding = utf8
 
-% Copyright 2018-2020 by Romano Giannetti
-% Copyright 2015-2020 by Stefan Lindner
-% Copyright 2013-2020 by Stefan Erhardt
-% Copyright 2007-2020 by Massimo Redaelli
+% Copyright 2018-2021 by Romano Giannetti
+% Copyright 2015-2021 by Stefan Lindner
+% Copyright 2013-2021 by Stefan Erhardt
+% Copyright 2007-2021 by Massimo Redaelli
 %
 % This file may be distributed and/or modified
 %
@@ -280,7 +280,8 @@
 Here, we will provide a list of incompabilitys between different version of circuitikz. We will try to hold this list short, but sometimes it is easier to break with old syntax than including a lot of switches and compatibility layers.
 You can check the used version at your local installation using the macro \verb!\pgfcircversion{}!.
 \begin{itemize}
-    \item Due to a bug fix in \TikZ{} that revealed a problem in \Circuitikz, you \textbf{must} upgrade to v1.2.7 or newer if you use a \TikZ{} 3.1.8 or 3.1.8a (the change in \TikZ{} has been reverted later).
+    \item After 1.2.7 a big code reorganization (which by the way fixed some bug) has been made; no changes should be visible, but a fallback point at 1.2.7 has been added.
+    \item You \textbf{must} upgrade to v1.2.7 or newer if you use a \TikZ{} 3.1.8 or 3.1.8a (but better upgrade both packages to the current version).
     \item After v1.2.1: \textbf{Important:} the routine that implement the \texttt{to[...]} component positioning has been rewritten. That should enhance the line joins in path, and it's safer, but it can potentially change behavior.
 
         One of the changes is that the previous routine did the wrong thing if you used \texttt{(node) to[...]} (you should use an anchor or a coordinate, not a node there --- like \texttt{(node.anchor) to[...]}).
@@ -307,13 +308,13 @@
 If you have older projects that show compatibility problems, you have two options:
 \begin{itemize}
     \item you can use an older version locally using the git-version and picking the correct commit from the repository (branch gh-pages) or the main GitHub site directly;
-    \item if you are using \LaTeX, the distribution has embedded several important old versions: \texttt{0.4}, \texttt{0.6}, \texttt{0.7}, \texttt{0.8.3}, \texttt{0.9.3}, \texttt{0.9.6}, \texttt{1.0} and \texttt{1.1.2}.
+    \item if you are using \LaTeX, the distribution has embedded several important old versions: \texttt{0.4}, \texttt{0.6}, \texttt{0.7}, \texttt{0.8.3}, \texttt{0.9.3}, \texttt{0.9.6}, \texttt{1.0}, \texttt{1.1.2} and \texttt{1.2.7}.
         To switch to use them, you simply change your \verb|\usepackage| invocation like
         \begin{lstlisting}
             \usepackage[]{circuitikz-0.8.3} % or circuitikz-0.4, 0.6...
         \end{lstlisting}
     You have to take care of the options that may have changed between versions;
-    \item   if you are using  \ConTeXt, only versions \texttt{0.8.3}, \texttt{0.9.3},  \texttt{0.9.6}, \texttt{1.0} and \texttt{1.1.2} are packaged; if can use it with
+    \item   if you are using  \ConTeXt, only versions \texttt{0.8.3}, \texttt{0.9.3},  \texttt{0.9.6}, \texttt{1.0}, \texttt{1.1.2} and \texttt{1.2.7} are packaged; if can use it with
         \begin{lstlisting}
             \usemodule[circuitikz-0.8.3]
         \end{lstlisting}
@@ -1124,7 +1125,7 @@
 As \href{https://github.com/circuitikz/circuitikz/issues/460}{noticed by user \texttt{septatrix}}, although relative coordinates after a component work as expected when using \texttt{++(x,y)}-style coordinates,
 that is not true for the \texttt{+(x,y)}-style coordinates (which are supposed to set a temporary relative coordinate and then going back to the starting point).
 
-This behavior, although not optimal, was standard in \texttt{to} operation in plain \TikZ{} before version 3.1.18; it was changed by Henri Menke in later versions. Notice that the change revealed a problem in \Circuitikz{} that should hopefully fixed in \texttt{v1.2.7}.
+This behavior, although not optimal, was standard in \texttt{to} operation in plain \TikZ{} before version 3.1.8; it was changed by Henri Menke in later versions. Notice that the change revealed a problem in \Circuitikz{} that should hopefully fixed in \texttt{v1.2.7}.
 
 You can see from the example below (notice the blue curve using a spline line). If all the vertical lines are at the left, the manual has been compiled with a new \Circuitikz{} and \TikZ. Otherwise, the red and/or blue curve will have the vertical line at the right (which in principle is wrong).
 
@@ -5804,14 +5805,28 @@
 \end{circuitikz}
 \end{LTXexample}
 
-\textbf{Caveat:} notice that the way in which \texttt{circuitikz} processes the options, there will be problems if the label (or annotation, voltage, or current) contains one of the characters $=$ (equal) or $,$ (comma), giving unexpected errors and wrong output.
-These two characters must be protected from the option parser using an \verb|\mbox| command, or redefining the characters with a \TeX\ \verb|\def|:
+\textbf{Caveat:} when \TikZ{} processes the options, there will be problems if the label (or annotation, voltage, or current) contains one of the characters $=$ (equal) or $,$ (comma) --- because the parser search for those two characters to delimit the arguments, giving unexpected errors and wrong output.
+These two characters can be protected from the option parser using an extra set of braces.
 
 \begin{LTXexample}[varwidth=true]
-    \def\eq{=}
     \begin{circuitikz}
         % the following will fail:
-        % \draw (0,0) to[R, l={$R=3}] (3,0);
+        % \draw (0,0) to[R, l=$R=3$]
+        \draw (0,0) to[R, l={$R=3$}] (3,0);
+        \draw (0,0) to[R={$R=3$}] (0,3);
+        \draw (3,3) to[R={$R,3$}] (3,0);
+        % this works, but it has wrong spacing
+        \draw (0,3) to[R, l=$R{=}3$] (3,3);
+    \end{circuitikz}
+\end{LTXexample}
+
+\textbf{(Even more) Caveat:} up to version \texttt{1.2.7}, due to the way in which \Circuitikz{} used to processes the options, even that was not sufficient, so you must protect that tokens even more, for example using an \verb|\mbox| command, or redefining the characters with a \TeX\ \verb|\def|:
+
+\begin{LTXexample}[varwidth=true]
+    \begin{circuitikz}
+        \def\eq{=}
+        % the following will fail up to 1.2.7:
+        % \draw (0,0) to[R, l={$R=3$}] (3,0);
         \draw (0,0) to[R, l=\mbox{$R=3$}] (3,0);
         \draw (0,0) to[R, l=$R\eq3$] (0,3);
         \draw (3,3) to[R, l=\mbox{$R,3$}] (3,0);
@@ -5820,6 +5835,7 @@
     \end{circuitikz}
 \end{LTXexample}
 
+
 \noindent The default orientation of labels is controlled by the options \texttt{smartlabels}, \texttt{rotatelabels} and \texttt{straightlabels} (or the corresponding \texttt{label/align} keys). Here are examples to see the differences:
 \begin{LTXexample}[varwidth=true]
 \begin{circuitikz}
@@ -7552,10 +7568,12 @@
 
 \faqQ I cannot write \verb!to[R = $R_1=12V$]! nor \verb!to[ospst = open, 3s]!: I get errors.
 
-\faqA It is a limitation of the parser, joined with a suboptimal processing by \Circuitikz{} of the passing of the argument of keys.
+\faqA It is a limitation of the parser, joined with a suboptimal processing by \Circuitikz{} (up to \texttt{1.2.7}) of the passing of the argument of keys.
 
-Use for example \verb|\mbox{}| or define \verb|\def{\eq}{=}| and use \verb!to[R = $R_1\eq 12V$]!, or try to protect commas and equal signs like \verb!to[ospst = open{,} 3s]! or \verb|ospst=\mbox{open, 3s}| instead; see caveat in section~\ref{sec:labels-and-annotations}.
+You should protect commas and equal signs like in  \verb!to[R = {$R_1=12V$}]! or \verb!to[ospst = {open, 3s}]!.
 
+In versions up to \texttt{1.2.7}, use for example \verb|\mbox{}| or define \verb|\def{\eq}{=}| and use \verb!to[R = $R_1\eq 12V$]!, or try to protect commas and equal signs like \verb!to[ospst = open{,} 3s]! or \verb|ospst=\mbox{open, 3s}| instead; see caveat in section~\ref{sec:labels-and-annotations}.
+
 \subsection{Global scaling and rotating}\label{faqs:scale-and-rotate}
 
 \faqQ I tried to change the direction of the $y$ axis with \texttt{yscale=-1}, but the circuit is completely messed up.
@@ -7581,15 +7599,16 @@
 
 \textbf{Big fat warning}: this material is reserved to \TeX-hackers; do not delve into this if you have no familiarity with (at least) a bit of core \TeX{} programming and to the basic \TikZ{} layer. You have been warned.
 
-
 \subsection{Suggested setup}
 
+Notice: the source code has been re-organized after release 1.2.7; if you are bound to use an older version check the corresponding manual.
+
 The suggested way to start working on a new component is to use the utilities of the \Circuitikz{} manual for checking and testing your device. Basically, find (or download) the source code of the last version of \Circuitikz{} and find the file \texttt{ctikzmanutils.sty}; copy it in your directory and prepare a file like this:
 
-\begin{lstlisting}
+\begin{lstlisting}[keepspaces=true]
 \documentclass[a4paper, titlepage]{article}
-\usepackage{a4wide}	%smaller borders
-\usepackage[utf8]{inputenc}
+\usepackage{a4wide}         %smaller borders
+\usepackage[utf8]{inputenc} %not needed since LaTeX 2019
 \usepackage[T1]{fontenc}
 \parindent=0pt
 \parskip=4pt plus 6pt minus 2pt
@@ -7640,8 +7659,11 @@
 
 Let's define for example a path style component, like the one suggested by the user \texttt{@alex} on \href{https://tex.stackexchange.com/questions/484268/combined-spring-damper-in-circuitikz}{\TeX{} stackexchange site}. The component will be a mix of the \texttt{damper} and the \texttt{spring} components already present.
 
-The first step is to check if we can use the definition already existing for similar elements (for coherence of size) or if we need to define new ones; for this you have to check the file \texttt{pgfcirc.defines.tex}: we find
+The definitions of the components are in the files \texttt{pgfcirc\emph{something}.tex}; they are more or less distributed by the number of terminals, but there are exceptions (for example, switches are in \texttt{bipoles}, even if several of them are tripoles or more\dots \texttt{grep} is your friend here.
 
+To define the new component we will look into (in this case) \texttt{pgfcircbipoles.tex}; at the start of the block where the components are defined you can find the relevant definitions (sometime some of the definitions are in \texttt{pgfcirc.defines.tex}, for historical or dependencies reasons).
+The first step is to check if we can use the definition already existing for similar elements (for coherence of size) or if we need to define new ones; for this you have to check into the  we find
+
 \begin{lstlisting}
     \ctikzset{bipoles/spring/height/.initial=.5}
     \ctikzset{bipoles/spring/width/.initial=.5}
@@ -7652,9 +7674,10 @@
 
 We will use them; at this stage you can decide to add other parameters if you need them. (Notice, however, than although flexibility is good, these parameters should be described in the manual, otherwise they're as good as a fixed number in the code).
 
-To define the new component we will look into \texttt{pgfcircbipoles.tex} and we will copy, for example, the definition of the damper into our code, just changing the name:
 
-\begin{lstlisting}
+After that we will copy, for example, the definition of the damper into our code, just changing the name:
+
+\begin{lstlisting}[keepspaces=true]
 %% mechanical resistor - damper
 \pgfcircdeclarebipolescaled{mechanicals}
 {}                                   % extra anchors
@@ -7694,21 +7717,20 @@
 }
 \end{lstlisting}
 
-This command will define a shape that is named \texttt{viscoeshape}, with all the correct geographical anchors based on the depth, height and width defined in the parameters of \verb|\pgfcircdeclarebipolescaled|. Moreover, the element is assigned to the class \texttt{mechanicals} for styling.
+This \verb|\pgfcircdeclarebipolescaled| command will define a shape that is named \texttt{viscoeshape}, with all the correct geographical anchors based on the depth, height and width defined in the parameters: in this case we are reusing the ones of the \texttt{damper} shape. Moreover, the element is assigned to the class \texttt{mechanicals} for styling.
 
-To be coherent with the styling, you should use (when needed) the length \verb|\pgf at circ@scaled at Rlen| as the ``basic'' length for drawing, using the fill functions defined at the start of \texttt{pgfcirc.defines.tex} to fill and stroke --- so that the operation will follow the style parameters and, finally, use the macro \verb|\pgf at circ@setlinewidth| to set the line thickness /the first argument is the ``legacy'' class, if you do not want to assign one you can use the pseudo-legacy class \texttt{none}.
+To be coherent with the styling, you should use (when needed) the length \verb|\pgf at circ@scaled at Rlen| as the ``basic'' length for drawing, using the fill functions (they are defined at the start of the file \texttt{pgfcirc.defines.tex}) to fill and stroke --- so that the operation will follow the style parameters and, finally, use the macro \verb|\pgf at circ@setlinewidth| to set the line thickness: the first argument is the ``legacy'' class, if you do not want to assign one you can use the pseudo-legacy class \texttt{none}.
 
-The anchors for the bipole (which then set the lengths \verb|\pgf at circ@res at left|) are already scaled for your use. You can use these lenghts (which defines, normally, the geographical anchors of the element) to draw your shapes.
+The anchors for the bipole (which then set the lengths \verb|\pgf at circ@res at left|) are already scaled for your use. You can use these lengths (which defines, normally, the geographical anchors of the element) to draw your shapes.
 
-This is not sufficient for using the element in a \texttt{to[]} path command; you need to ``activate'' it with (this commands are normally in \texttt{pgfcircpath.tex}):
+This is not sufficient for using the element in a \texttt{to[]} path command; you need to ``activate'' it (the definition of the commands are normally in \texttt{pgfcircpath.tex}). In this case the component is simple --- look at the definitions if you need to do more complex things.
 
 \begin{lstlisting}
-\def\pgf at circ@viscoe at path#1{\pgf at circ@bipole at path{viscoe}{#1}}
-\compattikzset{viscoe/.style = {\circuitikzbasekey,
-        /tikz/to path=\pgf at circ@dviscoe at path, l=#1}}
+\pgfcirc at activate@bipole at simple{l}{viscoe}
 \end{lstlisting}
 
-And now you can show it with:
+In the definition above, the \texttt{\{l\}} parameter means that using the component like \texttt{to[viscoe=A]} will be equivalent to \texttt{to[viscoe, l=A]}; you can use also \texttt{v} or \texttt{i} or \texttt{f} if your component needs it.
+Now you can show it with:
 
 \begin{lstlisting}
 \circuitdescbip*{viscoe}{Mechanical viscoelastic element}{}(left/135/0.2, right/45/0.2, center/-90/0.3)
@@ -7723,13 +7745,14 @@
 \end{LTXexample}
 \end{lstlisting}
 
-Obviously, at first you you just have a component that is the same as the one you copied with another name. It is now just a matter of modifying it so that it has the desired shape; in the example above you can already see the new symbol after the changes.
+Obviously, at first you you just have a component that is the same as the one you copied with another name.
+It is now just a matter of modifying it so that it has the desired shape; in the example above you can already see the new symbol after the changes.
 
-When doing the drawing, the \verb|\pgfcircdeclarebipole| will setup the lengths \verb|\pgf at circ@res at right|
-and \verb|\pgf at circ@res at up| as the $x$-$y$ coordinates of the upper right corner, and
-\verb|\pgf at circ@res at left|  and \verb|\pgf at circ@res at down| as the $x$-$y$ coordinates of the lower left corner of your shape. The \texttt{center} coordinate is usually at $(0pt, 0pt)$.
+When doing the drawing in the main argument of the \verb|\pgfcircdeclarebipole|, things will be setup so that the lengths \verb|\pgf at circ@res at right|
+and \verb|\pgf at circ@res at up| are the $x$-$y$ coordinates of the upper right corner, and
+\verb|\pgf at circ@res at left|  and \verb|\pgf at circ@res at down| are the $x$-$y$ coordinates of the lower left corner of your shape. The \texttt{center} coordinate is usually at $(0pt, 0pt)$.
 
-Looking at the implementation of the \texttt{spring} element, a possible implementation is changing the lines between  lines~12 and~16 with:
+Looking at the implementation of the \texttt{spring} element, one possibility is changing the lines between  lines~12 and~16 with:
 
 \begin{lstlisting}
     % spring into the damper
@@ -7780,6 +7803,7 @@
 
 Notice that by default the key \texttt{bipoles/\emph{mybipole}/voltage/additional shift} is not defined, so if you want to use it you must create it before (this is the meaning of the \texttt{.initial} here).
 
+Now you can save all the code between the \verb|\makeatletter| and \verb|\makeatother| in a file and \verb|\input{}| it for using your special component, or submit the component to the project (see below).
 
 As a final note, notice that the \texttt{viscoe} element is already added to the standard package.
 
@@ -7820,8 +7844,6 @@
 
 The best way of contributing is forking the project, adding your component in the correct files, modifying the manual and creating a pull request for the developers to merge.  Anyway, if this is a problem, just open an issue and someone (when they have time\dots) will answer.
 
-
-
 \section{Examples}
 
 Here a series of example, contributed by several people, is shown with their code.

Modified: trunk/Master/texmf-dist/doc/latex/circuitikz/ctikzmanutils.sty
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuitikz/ctikzmanutils.sty	2021-01-19 22:57:40 UTC (rev 57468)
+++ trunk/Master/texmf-dist/doc/latex/circuitikz/ctikzmanutils.sty	2021-01-19 22:58:18 UTC (rev 57469)
@@ -1,7 +1,7 @@
-% Copyright 2018-2020 by Romano Giannetti
-% Copyright 2015-2020 by Stefan Lindner
-% Copyright 2013-2020 by Stefan Erhardt
-% Copyright 2007-2020 by Massimo Redaelli
+% Copyright 2018-2021 by Romano Giannetti
+% Copyright 2015-2021 by Stefan Lindner
+% Copyright 2013-2021 by Stefan Erhardt
+% Copyright 2007-2021 by Massimo Redaelli
 %
 % This file may be distributed and/or modified
 %

Added: trunk/Master/texmf-dist/tex/context/third/circuitikz/t-circuitikz-1.2.7.tex
===================================================================
--- trunk/Master/texmf-dist/tex/context/third/circuitikz/t-circuitikz-1.2.7.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/third/circuitikz/t-circuitikz-1.2.7.tex	2021-01-19 22:58:18 UTC (rev 57469)
@@ -0,0 +1,24308 @@
+% Copyright 2018-2020 by Romano Giannetti
+% Copyright 2015-2020 by Stefan Lindner
+% Copyright 2013-2020 by Stefan Erhardt
+% Copyright 2007-2020 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+\def\pgfcircversion{1.2.7}
+\def\pgfcircversiondate{2020/12/27}
+\writestatus{loading}{\pgfcircversiondate{} The CircuiTikz circuit drawing package version \pgfcircversion}
+
+\usemodule[tikz]
+
+\startmodule[circuitikzgit-1.2.7]
+\usetikzlibrary[calc]
+\usetikzlibrary[arrows.meta, bending]
+\usetikzlibrary[fpu] % may be needed for use fpu reciprocal (v1.0.1)
+
+\unprotect
+
+\edef\tikzatcode{\the\catcode`\@}
+\edef\tikzbarcode{\the\catcode`\|}
+\edef\tikzexclaimcode{\the\catcode`\!}
+\catcode`\@=11
+\catcode`\|=12
+\catcode`\!=12
+
+%%%%%%%%%%% Springe nach tex/pgfcirc.defines
+%%%---------- open: tex/pgfcirc.defines.tex
+% Copyright 2018-2020 by Romano Giannetti
+% Copyright 2015-2020 by Stefan Lindner
+% Copyright 2013-2020 by Stefan Erhardt
+% Copyright 2007-2020 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+%
+% This file has folding marks for vim (See last line).
+%
+%% Key managements%<<<1
+
+\long\def\pgf at circ@comment#1{}
+
+\def\circuitikzbasekey{/tikz/circuitikz}
+
+\pgfkeys{\circuitikzbasekey/.is family}
+
+\def\circuitikzset#1{\pgfkeys{\circuitikzbasekey,#1}}
+\let\ctikzset\circuitikzset
+\def\ctikzvalof#1{\pgfkeysvalueof{\circuitikzbasekey/#1}}
+\def\ctikzsetvalof#1#2{\pgfkeyssetvalue{\circuitikzbasekey/#1}{#2}}
+
+\pgfkeys{\circuitikzbasekey/.search also={/tikz}}
+%%>>>
+
+%% Temporary Counters and dimensions%<<<1
+%% Temporary Counters
+\newcount\pgf at circ@count at a
+\newcount\pgf at circ@count at b
+\newcount\pgf at circ@count at c
+%%%%%%%%%%%%
+%% Dimensions
+% coordinate
+\newdimen\pgf at circ@res at up
+\newdimen\pgf at circ@res at down
+\newdimen\pgf at circ@res at zero
+\newdimen\pgf at circ@res at left
+\newdimen\pgf at circ@res at right
+\newdimen\pgf at circ@res at other
+\newdimen\pgf at circ@res at step
+\newdimen\pgf at circ@res at temp
+% Base len for all circuitikz
+\newdimen\pgf at circ@Rlen
+% scaled length for internal use in scalable shapes
+\newdimen\pgf at circ@scaled at Rlen
+\ctikzset{bipoles/length/.code={\pgf at circ@Rlen = #1\pgf at circ@scaled at Rlen=\pgf at circ@Rlen}}
+\pgf at circ@Rlen = 1.4cm
+% by default scale is 1.0
+\pgf at circ@scaled at Rlen=\pgf at circ@Rlen
+% inital thickness
+\newdimen \pgfstartlinewidth
+%%>>>
+
+% arrow tips, ported over old arrows library (deprecated)%<<<1
+% see https://tex.stackexchange.com/questions/234084/latex-arrow-tip-with-arrows-meta-library
+% this was the original definition of latex' tips, renamed to avoid clashes
+%
+\pgfarrowsdeclare{latexslim}{latexslim}
+{
+  \pgfutil at tempdima=0.28pt%
+  \advance\pgfutil at tempdima by.3\pgflinewidth%
+  \pgfarrowsleftextend{+-4\pgfutil at tempdima}
+  \pgfarrowsrightextend{+6\pgfutil at tempdima}
+}
+{
+  \pgfutil at tempdima=0.28pt%
+  \advance\pgfutil at tempdima by.3\pgflinewidth%
+  \pgfpathmoveto{\pgfqpoint{6\pgfutil at tempdima}{0\pgfutil at tempdima}}
+  \pgfpathcurveto
+  {\pgfqpoint{3.5\pgfutil at tempdima}{.5\pgfutil at tempdima}}
+  {\pgfqpoint{-1\pgfutil at tempdima}{1.5\pgfutil at tempdima}}
+  {\pgfqpoint{-4\pgfutil at tempdima}{3.75\pgfutil at tempdima}}
+  \pgfpathcurveto
+  {\pgfqpoint{-1.5\pgfutil at tempdima}{1\pgfutil at tempdima}}
+  {\pgfqpoint{-1.5\pgfutil at tempdima}{-1\pgfutil at tempdima}}
+  {\pgfqpoint{-4\pgfutil at tempdima}{-3.75\pgfutil at tempdima}}
+  \pgfpathcurveto
+  {\pgfqpoint{-1\pgfutil at tempdima}{-1.5\pgfutil at tempdima}}
+  {\pgfqpoint{3.5\pgfutil at tempdima}{-.5\pgfutil at tempdima}}
+  {\pgfqpoint{6\pgfutil at tempdima}{0\pgfutil at tempdima}}
+  \pgfpathclose
+  \pgfusepathqfill
+}
+
+\pgfarrowsdeclarereversed{latexslim reversed}{latexslim reversed}{latexslim}{latexslim}
+%%>>>
+
+%% Macros to do things depending on the class%<<<1
+
+\def\pgf at circ@setifdefinedfill#1#2{%
+    % if \ctikzclass is defined and \ctikzclass/fill is defined and is not none:
+    % set the fill color and execute \pgfusepath{#1}, else execute \pgfusepath{#2}
+    \ifdefined\ctikzclass
+        \pgfkeysifdefined{\circuitikzbasekey/\ctikzclass/fill}%
+        {% yes, it's defined
+            \edef\@@tmp{\ctikzvalof{\ctikzclass/fill}}\edef\@@none{none}%
+            \ifx\@@tmp\@@none % but it's none
+                \pgfusepath{#2}%
+            \else
+                \pgfsetfillcolor{\@@tmp}%
+                \pgfusepath{#1}%
+            \fi
+        }{% the class is defined but the fill key not; use  #2
+            \pgfusepath{#2}%
+        }
+    \else
+    \pgfusepath{#2}%
+    \fi
+}
+
+%% Macro to fill or draw
+
+\def\pgf at circ@draworfill{%
+    \ifx\tikz at fillcolor\pgfutil at empty
+        \pgf at circ@setifdefinedfill{draw,fill}{draw}
+    \else
+        \pgfsetfillcolor{\tikz at fillcolor}
+        \pgfusepath{draw, fill}
+    \fi
+}
+
+\def\pgf at circ@draworfillandclip{%
+    \ifx\tikz at fillcolor\pgfutil at empty
+        \pgf at circ@setifdefinedfill{draw, clip, fill}{draw, clip}
+        \pgfusepath{draw, clip}
+    \else
+        \pgfsetfillcolor{\tikz at fillcolor}
+        \pgfusepath{draw, clip, fill}
+    \fi
+}
+
+\def\pgf at circ@maybefill{%
+    \ifx\tikz at fillcolor\pgfutil at empty
+        \pgf at circ@setifdefinedfill{fill}{discard}
+    \else
+        \pgfsetfillcolor{\tikz at fillcolor}
+        \pgfusepath{fill}
+    \fi
+}
+
+%% Macros for setting linewidth
+% #1 is the legacy class (bipoles, tripoles) etc
+% #2 is the reference linewidth
+\def\pgf at circ@setlinewidth#1#2{%
+    \ifdefined\ctikzclass
+        \pgfkeysifdefined{\circuitikzbasekey/\ctikzclass/thickness}%
+        {% yes, it's defined
+        \edef\@@tmp{\ctikzvalof{\ctikzclass/thickness}}\edef\@@none{none}%
+        \ifx\@@tmp\@@none % but it's none
+            \pgfsetlinewidth{\ctikzvalof{#1/thickness}#2}% passthrough legacy class
+        \else
+            \pgfsetlinewidth{\@@tmp #2}%
+        \fi
+        }{ % key not defined, do the legacy thing
+            \pgfsetlinewidth{\ctikzvalof{#1/thickness}#2}%
+        }% Ok, do nothing
+    \else % no class
+        \pgfsetlinewidth{\ctikzvalof{#1/thickness}#2}%
+    \fi
+}
+% use \pgf at circ@setlinewidth{none}{\pgflinewidth} if there is no legacy case
+\ctikzset{none/thickness/.initial=1.0} % do not touch
+%%>>>
+
+%% font changes compatible with plain/LaTeX/ConTeXt%<<<1
+%% thanks to Henri Menke https://github.com/circuitikz/circuitikz/issues/285#issuecomment-537224605
+
+\ifpgfutil at format@is at latex
+    \long\def\pgf at circ@font at tiny{\tiny}
+    \long\def\pgf at circ@font at small{\small}
+    \long\def\pgf at circ@font at bold{\textbf}
+    \long\def\pgf at circ@font at boldmath{\boldmath}
+    \long\def\pgf at circ@font at sixbm{\fontsize{6}{7}\selectfont\boldmath}
+    \long\def\pgf at circ@font at tenbm{\fontsize{10}{12}\selectfont\boldmath}
+    \long\def\pgf at circ@font at twelve{\fontsize{12}{14}\selectfont}
+\else\ifpgfutil at format@is at plain
+    \long\def\pgf at circ@font at tiny{\fiverm}
+    \long\def\pgf at circ@font at small{\sevenrm}
+    \long\def\pgf at circ@font at bold#1{{\bf#1}}
+    \long\def\pgf at circ@font at boldmath{\bf}       % to be tested
+    \long\def\pgf at circ@font at sixbm{\sevenrm\bf}  %
+    \long\def\pgf at circ@font at tenbm{\tenrm\bf}    %
+    \long\def\pgf at circ@font at twelve{\twelverm}   %
+\else\ifpgfutil at format@is at context
+    \long\def\pgf at circ@font at tiny{\tfxx}
+    \long\def\pgf at circ@font at small{\tfx}
+    \long\def\pgf at circ@font at bold{\bold}
+    \long\def\pgf at circ@font at boldmath{\bold}    % to be tested
+    \long\def\pgf at circ@font at sixbm{\tfx\bold}   %
+    \long\def\pgf at circ@font at tenbm{\normal\bold}%
+    \long\def\pgf at circ@font at twelve{\tfa}       %
+\fi\fi\fi
+
+
+%
+% Thanks to Phelype Oleinik https://tex.stackexchange.com/a/520806/38080
+%
+% this is needed to avoid problems with \ConTeXt
+\ifcsname normalunexpanded\endcsname
+  \let\pgfcircutil at unexpanded\normalunexpanded
+\else
+  \let\pgfcircutil at unexpanded\unexpanded
+\fi
+% minimally expand a pgfkey to check if it's {}/undefined or filled.
+\def\unexpandedvalueof#1{%
+  \pgfcircutil at unexpanded\expandafter\expandafter
+    \expandafter\pgf at circ@valueof at chk\pgfkeysvalueof{#1}}
+\def\pgf at circ@valueof at chk#1{%
+  \ifx\relax#1%
+    \expandafter\pgfutil at firstoftwo
+  \else
+    \expandafter\pgfutil at secondoftwo
+  \fi
+    {{}}% #1 is \relax, so consider empty
+    {\expandafter{#1}}% otherwise, leave the key after one more expansion
+}%
+%>>>
+
+% text position in some component.%<<<1
+% (added with ieeestd logic ports. Maybe to be extended to other components,
+% like amplifiers)
+%
+\newif\ifpgf at circ@center at text\pgf at circ@center at texttrue
+\tikzset{component text/.is choice}%
+\tikzset{component text/center/.code={\pgf at circ@center at texttrue}}%
+\tikzset{component text/left/.code={\pgf at circ@center at textfalse}}%
+\ctikzset{component text/.is choice}%
+\ctikzset{component text/center/.code={\pgf at circ@center at texttrue}}%
+\ctikzset{component text/left/.code={\pgf at circ@center at textfalse}}%
+\ctikzset{left text distance/.initial=0.3em}%
+%>>>
+
+% voltage direction options%<<<1
+
+\newif\ifpgf at circ@siunitx
+\newif\ifpgf at circuit@compat
+\newif\ifpgf at circ@oldvoltagedirection % default false
+\newif\ifpgf at circ@explicitvdir
+\newif\ifpgf at circ@fixbatteries
+
+\ctikzset{voltage dir/.is choice}
+\ctikzset{voltage dir/old/.code={\pgf at circ@oldvoltagedirectiontrue\pgf at circ@fixbatteriesfalse}}
+\ctikzset{voltage dir/noold/.code={\pgf at circ@oldvoltagedirectionfalse\pgf at circ@fixbatteriesfalse}}
+\ctikzset{voltage dir/RP/.code={\pgf at circ@oldvoltagedirectiontrue\pgf at circ@fixbatteriestrue}}
+\ctikzset{voltage dir/EF/.code={\pgf at circ@oldvoltagedirectionfalse\pgf at circ@fixbatteriestrue}}
+\tikzset{voltage dir/.style={circuitikz/voltage dir=#1}}%
+%>>>
+
+% bipole definitions for path component and text decorations%%<<<1
+%
+% Option "t=*" for nodes
+\pgfkeys{/tikz/t/.add code={}{\ctikzset{text=#1}}}
+%
+\ctikzset{bipole/.is family}
+\ctikzset{bipole/kind/.initial=}
+\ctikzset{bipole/name/.initial=}
+\newif\ifpgf at circuit@bipole at isvoltage
+\ctikzset{bipole/is voltage/.is if=pgf at circuit@bipole at isvoltage}
+\newif\ifpgf at circuit@bipole at voltageoutsideofsymbol
+\ctikzset{bipole/is voltageoutsideofsymbol/.is if=pgf at circuit@bipole at voltageoutsideofsymbol}
+\newif\ifpgf at circuit@bipole at strokedsymbol
+\ctikzset{bipole/is strokedsymbol/.is if=pgf at circuit@bipole at strokedsymbol}
+\newif\ifpgf at circuit@bipole at iscurrent
+\ctikzset{bipole/is current/.is if=pgf at circuit@bipole at iscurrent}
+
+\ctikzset{bipole/voltage/.is family}
+\newif\ifpgf at circuit@bipole at voltage@backward
+\ctikzset{bipole/voltage/direction/.is choice}
+\ctikzset{bipole/voltage/direction/forward/.code={\pgf at circuit@bipole at voltage@backwardfalse}}
+\ctikzset{bipole/voltage/direction/backward/.code={\pgf at circuit@bipole at voltage@backwardtrue}}
+\newif\ifpgf at circuit@bipole at voltage@below
+\ctikzset{bipole/voltage/position/.is choice}
+\ctikzset{bipole/voltage/position/above/.code={\pgf at circuit@bipole at voltage@belowfalse}}
+\ctikzset{bipole/voltage/position/below/.code={\pgf at circuit@bipole at voltage@belowtrue}}
+
+\ctikzset{bipole/voltage/label/unit/.initial=}
+\ctikzset{bipole/voltage/label/name/.initial=}
+
+\ctikzset{bipole/current/.is family}
+\newif\ifpgf at circuit@bipole at current@backward
+\ctikzset{bipole/current/direction/.is choice}
+\ctikzset{bipole/current/direction/forward/.code={\pgf at circuit@bipole at current@backwardfalse}}
+\ctikzset{bipole/current/direction/backward/.code={\pgf at circuit@bipole at current@backwardtrue}}
+\newif\ifpgf at circuit@bipole at current@before
+\ctikzset{bipole/current/x position/.is choice}
+\ctikzset{bipole/current/x position/after/.code={\pgf at circuit@bipole at current@beforefalse}}
+\ctikzset{bipole/current/x position/before/.code={\pgf at circuit@bipole at current@beforetrue}}
+\newif\ifpgf at circuit@bipole at current@below
+\ctikzset{bipole/current/y position/.is choice}
+\ctikzset{bipole/current/y position/above/.code={\pgf at circuit@bipole at current@belowfalse}}
+\ctikzset{bipole/current/y position/below/.code={\pgf at circuit@bipole at current@belowtrue}}
+\ctikzset{bipole/current/label/unit/.initial=}
+\ctikzset{bipole/current/label/name/.initial=}
+
+\ctikzset{bipole/flow/.is family}
+\newif\ifpgf at circuit@bipole at flow@backward
+\ctikzset{bipole/flow/direction/.is choice}
+\ctikzset{bipole/flow/direction/forward/.code={\pgf at circuit@bipole at flow@backwardfalse}}
+\ctikzset{bipole/flow/direction/backward/.code={\pgf at circuit@bipole at flow@backwardtrue}}
+\newif\ifpgf at circuit@bipole at flow@before
+\ctikzset{bipole/flow/x position/.is choice}
+\ctikzset{bipole/flow/x position/after/.code={\pgf at circuit@bipole at flow@beforefalse}}
+\ctikzset{bipole/flow/x position/before/.code={\pgf at circuit@bipole at flow@beforetrue}}
+\newif\ifpgf at circuit@bipole at flow@below
+\ctikzset{bipole/flow/y position/.is choice}
+\ctikzset{bipole/flow/y position/above/.code={\pgf at circuit@bipole at flow@belowfalse}}
+\ctikzset{bipole/flow/y position/below/.code={\pgf at circuit@bipole at flow@belowtrue}}
+\ctikzset{bipole/flow/label/unit/.initial=}
+\ctikzset{bipole/flow/label/name/.initial=}
+\ctikzset{flow/distance/.initial = .5}
+\ctikzset{flow/offset/.initial = .2}%distance between flow-arrow and conductor
+
+\ctikzset{bipole/label/.is family}
+\ctikzset{bipole/label/position/.initial=90}
+\ctikzset{bipole/label/unit/.initial=}
+\ctikzset{bipole/label/name/.initial=}
+\ctikzset{bipole/annotation/.is family}
+\ctikzset{bipole/annotation/position/.initial=-90}
+\ctikzset{bipole/annotation/unit/.initial=}
+\ctikzset{bipole/annotation/name/.initial=}
+
+\newif\ifpgf at circ@siunitx
+\newif\ifpgf at circ@siunitx at res
+
+\ctikzset{label/align/.is choice}
+\ctikzset{label/align/straight/.code={\ctikzsetvalof{label/align}{straight}}}
+\ctikzset{label/align/rotate/.code={\ctikzsetvalof{label/align}{rotate}}}
+\ctikzset{label/align/smart/.code={\ctikzsetvalof{label/align}{smart}}}
+%%>>>
+
+% traditional styles %<<<1
+%
+\ctikzset{thickness/.initial=2}
+\ctikzset{color/.initial=black}
+\pgfkeys{/tikz/color/.add code={}{\ctikzset{color={#1}}}}
+\ctikzset{bipoles/border margin/.initial=1.1}
+\ctikzset{bipoles/thickness/.initial=2}
+\ctikzset{tripoles/thickness/.initial=2}
+\ctikzset{quadpoles/thickness/.initial=2}
+\ctikzset{nodes width/.initial=.04}
+%%>>>
+
+% Styles definitions and macros%<<<1
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% main style definitions
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% load a style file: search ctikzstyle-NAME.tex in path
+\def\ctikzloadstyle#1{%
+    \pgfutil at InputIfFileExists{ctikzstyle-#1}{}{%
+        \tikzerror{I did not find the circuitikz style #1}}%
+}
+
+% load and enact a style
+\def\ctikzsetstyle#1{%
+    \ctikzloadstyle{#1}%
+    \tikzset{#1 circuit style}%
+}
+
+% global style parameters
+\ctikzset{default/scale/.initial=1.0}   % do not touch
+\ctikzset{default/fill/.initial=none}   % do not touch
+\ctikzset{default/thickness/.initial=none}   % do not touch
+% default is use as the generic default style for bipoles
+
+% mostly bipoles:
+
+\ctikzset{resistors/scale/.initial=1.0}
+\ctikzset{resistors/fill/.initial=none}
+\ctikzset{resistors/thickness/.initial=none}
+
+\ctikzset{capacitors/scale/.initial=1.0}
+\ctikzset{capacitors/fill/.initial=none}
+\ctikzset{capacitors/thickness/.initial=none}
+
+\ctikzset{inductors/scale/.initial=1.0}
+\ctikzset{inductors/fill/.initial=none}
+\ctikzset{inductors/thickness/.initial=none}
+
+\ctikzset{diodes/scale/.initial=1.0}
+\ctikzset{diodes/fill/.initial=none}
+\ctikzset{diodes/thickness/.initial=none}
+
+\ctikzset{batteries/scale/.initial=1.0}
+\ctikzset{batteries/fill/.initial=none}
+\ctikzset{batteries/thickness/.initial=none}
+
+\ctikzset{sources/scale/.initial=1.0}
+\ctikzset{sources/fill/.initial=none}
+\ctikzset{sources/thickness/.initial=none}
+
+\ctikzset{csources/scale/.initial=1.0}
+\ctikzset{csources/fill/.initial=none}
+\ctikzset{csources/thickness/.initial=none}
+
+\ctikzset{instruments/scale/.initial=1.0}
+\ctikzset{instruments/fill/.initial=none}
+\ctikzset{instruments/thickness/.initial=none}
+
+\ctikzset{mechanicals/scale/.initial=1.0}
+\ctikzset{mechanicals/fill/.initial=none}
+\ctikzset{mechanicals/thickness/.initial=none}
+
+\ctikzset{misc/scale/.initial=1.0}
+\ctikzset{misc/fill/.initial=none}
+\ctikzset{misc/thickness/.initial=none}
+
+\ctikzset{blocks/scale/.initial=1.0}
+\ctikzset{blocks/fill/.initial=none}
+\ctikzset{blocks/thickness/.initial=none}
+
+% mostly nodes
+
+\ctikzset{grounds/scale/.initial=1.0}
+\ctikzset{grounds/fill/.initial=none}
+\ctikzset{grounds/thickness/.initial=none}
+
+\ctikzset{power supplies/scale/.initial=1.0}
+\ctikzset{power supplies/fill/.initial=none}
+\ctikzset{power supplies/thickness/.initial=none}
+
+\ctikzset{transistors/scale/.initial=1.0}
+\ctikzset{transistors/fill/.initial=none}
+\ctikzset{transistors/thickness/.initial=none}
+
+\ctikzset{tubes/scale/.initial=1.0}
+\ctikzset{tubes/fill/.initial=none}
+\ctikzset{tubes/thickness/.initial=none}
+
+\ctikzset{RF/scale/.initial=1.0}
+\ctikzset{RF/fill/.initial=none}
+\ctikzset{RF/thickness/.initial=none}
+
+\ctikzset{electromechanicals/scale/.initial=1.0}
+\ctikzset{electromechanicals/fill/.initial=none}
+\ctikzset{electromechanicals/thickness/.initial=none}
+
+% transformers go with inductors
+\ctikzset{amplifiers/scale/.initial=1.0}
+\ctikzset{amplifiers/fill/.initial=none}
+\ctikzset{amplifiers/thickness/.initial=none}
+
+\ctikzset{switches/scale/.initial=1.0}
+\ctikzset{switches/fill/.initial=none}
+\ctikzset{switches/thickness/.initial=none}
+
+\ctikzset{logic ports/scale/.initial=1.0}
+\ctikzset{logic ports/fill/.initial=none}
+\ctikzset{logic ports/thickness/.initial=none}
+
+\ctikzset{flipflops/scale/.initial=1.0}
+\ctikzset{flipflops/fill/.initial=none}
+\ctikzset{flipflops/thickness/.initial=none}
+
+\ctikzset{muxdemuxes/scale/.initial=1.0}
+\ctikzset{muxdemuxes/fill/.initial=none}
+\ctikzset{muxdemuxes/thickness/.initial=none}
+
+\ctikzset{chips/scale/.initial=1.0}
+\ctikzset{chips/fill/.initial=none}
+\ctikzset{chips/thickness/.initial=none}
+
+\ctikzset{displays/scale/.initial=1.0}
+\ctikzset{displays/fill/.initial=none}
+\ctikzset{displays/thickness/.initial=none}
+%
+% general styles
+%
+\tikzset{european/.style = {european currents, european voltages, european resistors, european inductors, european ports, european gas filled surge arrester set}}
+\tikzset{american/.style = {american currents, american voltages, american resistors, american inductors, american ports, american gas filled surge arrester set}}
+\tikzset{cute/.style = {european currents, european voltages, american resistors, cute inductors, american ports}}
+%%>>>
+
+% grounds and power supplies%<<<1
+
+\ctikzset{monopoles/.is family}
+\ctikzset{monopoles/ground/width/.initial=.25}
+\ctikzset{monopoles/ground/connectionthickness/.initial=1}
+\ctikzset{monopoles/ground/thickness/.initial=2}
+\ctikzset{monopoles/rground/thickness/.initial=2}
+\ctikzset{monopoles/tground/thickness/.initial=3}
+\ctikzset{monopoles/vcc/width/.initial=.2}
+\ctikzset{monopoles/vcc/arrow/.initial=legacy}
+\ctikzset{monopoles/vee/arrow/.initial=legacy}
+\ctikzset{monopoles/match/width/.initial=.4}
+\ctikzset{monopoles/chassis/width/.initial=.25}
+\ctikzset{monopoles/alternative chassis/width/.initial=.25}
+\ctikzset{monopoles/equipotentiality/width/.initial=.25}
+\ctikzset{monopoles/antenna/width/.initial=.25}
+\ctikzset{monopoles/antenna/label/xanchor/.initial=.4}
+\ctikzset{monopoles/antenna/label/yanchor/.initial=.75}
+\ctikzset{monopoles/txantenna/label/xanchor/.initial=.4}
+\ctikzset{monopoles/txantenna/label/yanchor/.initial=.75}
+\ctikzset{monopoles/txantenna/width/.initial=.25}
+\ctikzset{monopoles/rxantenna/label/xanchor/.initial=.4}
+\ctikzset{monopoles/rxantenna/label/yanchor/.initial=.75}
+\ctikzset{monopoles/rxantenna/width/.initial=.25}
+\ctikzset{monopoles/bareantenna/width/.initial=.25}
+\ctikzset{monopoles/bareantenna/label/xanchor/.initial=1}
+\ctikzset{monopoles/bareantenna/label/yanchor/.initial=0.5}
+\ctikzset{monopoles/waves/width/.initial=0.5}%
+%>>>
+
+% microstrips %<<<1
+\ctikzset{bipoles/mstline/height/.initial=0.3}
+\ctikzset{bipoles/mstline/width/.initial=1.2}
+\pgfkeys{/tikz/mstlinelen/.add code={}{\ctikzset{bipoles/mstline/width=#1}}}
+\ctikzset{monopoles/msport/width/.initial=.5}
+\ctikzset{monopoles/msrstub/height/.initial=1.0}
+\ctikzset{monopoles/msrstub/width/.initial=0.6}%
+%>>>
+
+% microphone and loudspeaker%<<<1
+\ctikzset{bipoles/loudspeaker/height/.initial=.8}
+\ctikzset{bipoles/loudspeaker/depth/.initial=.3}
+\ctikzset{bipoles/loudspeaker/width/.initial=.8}
+\ctikzset{bipoles/mic/height/.initial=1.2}
+\ctikzset{bipoles/mic/depth/.initial=.1}
+\ctikzset{bipoles/mic/width/.initial=.8}%
+%>>>
+
+% resistors%<<<1
+% Zig Zag resistors
+\ctikzset{resistors/zigs/.initial=3}
+\ctikzset{resistors/width/.code={%
+    \ctikzset{bipoles/resistor/width=#1}%
+    \ctikzset{bipoles/vresistor/width=#1}%
+    \ctikzset{bipoles/potentiometer/width=#1}%
+    \ctikzset{bipoles/resistivesens/width=#1}%
+    \ctikzset{bipoles/photoresistor/width=#1}%
+    \ctikzset{bipoles/thermistor/width=#1}%
+    \ctikzset{bipoles/thermistorntc/width=#1}%
+    \ctikzset{bipoles/thermistorptc/width=#1}%
+    \ctikzset{bipoles/varistor/width=#1}%
+    \ctikzset{bipoles/generic/width=#1}%
+    \ctikzset{bipoles/generic potentiometer/width=#1}%
+    \ctikzset{bipoles/ageneric/width=#1}%
+    \ctikzset{bipoles/tgeneric/width=#1}%
+}}
+\ctikzset{wiper pos/.code={%
+    \ctikzset{bipoles/potentiometer/wiper pos=#1}%
+    \ctikzset{bipoles/generic potentiometer/wiper pos=#1}%
+}}
+% zigzag resistor
+\ctikzset{bipoles/resistor/height/.initial=.3}
+\ctikzset{bipoles/resistor/width/.initial=.8}
+\ctikzset{bipoles/potentiometer/height/.initial=.8}
+\ctikzset{bipoles/potentiometer/height 2/.initial=.3}
+\ctikzset{bipoles/potentiometer/width/.initial=.8}
+\ctikzset{bipoles/potentiometer/wiper pos/.initial=.5}
+\ctikzset{bipoles/vresistor/height/.initial=.6}
+\ctikzset{bipoles/vresistor/width/.initial=.8}
+\ctikzset{bipoles/resistivesens/height/.initial=.6}
+\ctikzset{bipoles/resistivesens/width/.initial=.8}
+% square resistors
+\ctikzset{bipoles/photoresistor/height/.initial=.6}
+\ctikzset{bipoles/photoresistor/height 2/.initial=.3}
+\ctikzset{bipoles/photoresistor/width/.initial=.8}
+\ctikzset{bipoles/thermistor/main/.initial=.7}
+\ctikzset{bipoles/thermistor/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorntc/width/.initial=.8}
+\ctikzset{bipoles/thermistorntc/main/.initial=.7}
+\ctikzset{bipoles/thermistorntc/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorntc/height 2/.initial=.75}%.3/.7
+\ctikzset{bipoles/thermistorptc/width/.initial=.8}
+\ctikzset{bipoles/thermistorptc/main/.initial=.7}
+\ctikzset{bipoles/thermistorptc/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorptc/height 2/.initial=.75}%.3/.7
+\ctikzset{bipoles/thermistor/width/.initial=.8}
+\ctikzset{bipoles/varistor/main/.initial=.7}
+\ctikzset{bipoles/varistor/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/varistor/width/.initial=.8}
+\ctikzset{bipoles/generic/height/.initial=.30}
+\ctikzset{bipoles/generic/width/.initial=.80}
+\ctikzset{bipoles/generic potentiometer/height/.initial=.80}
+\ctikzset{bipoles/generic potentiometer/height 2/.initial=.30}
+\ctikzset{bipoles/generic potentiometer/width/.initial=.80}
+\ctikzset{bipoles/generic potentiometer/wiper pos/.initial=.5}
+\ctikzset{bipoles/ageneric/height/.initial=.30}
+\ctikzset{bipoles/tgeneric/height/.initial=.70}
+\ctikzset{bipoles/tgeneric/width/.initial=.80}
+\ctikzset{bipoles/ageneric/width/.initial=.80}
+\ctikzset{bipoles/memristor/height/.initial=.30}
+\ctikzset{bipoles/memristor/wave height/.initial=.5}
+\ctikzset{bipoles/memristor/width/.initial=.80}
+
+\newif\ifpgf at circuit@europeanresistor
+\ctikzset{resistor/.is choice}
+\ctikzset{resistor/american/.code = \pgf at circuit@europeanresistorfalse }
+\ctikzset{resistor/european/.code = \pgf at circuit@europeanresistortrue }
+\tikzset{american resistors/.style = {\circuitikzbasekey/resistor = american}}
+\tikzset{european resistors/.style = {\circuitikzbasekey/resistor = european}}
+%%>>>
+
+%% Capacitors%<<<1
+\ctikzset{bipoles/capacitor/height/.initial=.6}
+\ctikzset{bipoles/capacitor/width/.initial=.2}
+\ctikzset{bipoles/ecapacitor/height/.initial=.5}
+\ctikzset{bipoles/ecapacitor/width/.initial=.2}
+\ctikzset{bipoles/ecapacitor/font/.initial=\pgf at circ@font at sixbm}
+%%% pcapacitor is deprecated
+\ctikzset{bipoles/pcapacitor/height/.initial=.6}
+\ctikzset{bipoles/pcapacitor/width/.initial=.2}
+\ctikzset{bipoles/pcapacitor/bend width/.initial=1.1}
+\ctikzset{bipoles/ccapacitor/height/.initial=.6}
+\ctikzset{bipoles/ccapacitor/width/.initial=.12}
+\ctikzset{bipoles/ccapacitor/bend width/.initial=1.1}
+\ctikzset{bipoles/vcapacitor/height/.initial=.6}
+\ctikzset{bipoles/vcapacitor/width/.initial=.5}
+\ctikzset{bipoles/vcapacitor/capacitor width/.initial=.4}
+\ctikzset{bipoles/piezoelectric/height/.initial=.7}
+\ctikzset{bipoles/piezoelectric/width/.initial=.5}%
+%>>>
+
+% Inductors%<<<1
+\ctikzset{inductors/coils/.code={%
+    \ctikzset{bipoles/cuteinductor/coils=#1}%
+    \ctikzset{bipoles/cutechoke/coils=#1}%
+    \ctikzset{bipoles/americaninductor/coils=#1}%
+    \ctikzset{bipoles/vcuteinductor/coils=#1}%
+    \ctikzset{bipoles/vamericaninductor/coils=#1}%
+}}
+\ctikzset{inductors/width/.code={%
+    \ctikzset{bipoles/cuteinductor/width=#1}%
+    \ctikzset{bipoles/cutechoke/width=#1}%
+    \ctikzset{bipoles/americaninductor/width=#1}%
+    \ctikzset{bipoles/vcuteinductor/width=#1}%
+    \ctikzset{bipoles/vamericaninductor/width=#1}%
+    \ctikzset{bipoles/fullgeneric/width=#1}%
+    \ctikzset{bipoles/tfullgeneric/width=#1}%
+}}
+\ctikzset{bipoles/cuteinductor/height/.initial=.3}
+\ctikzset{bipoles/cuteinductor/lower coil height/.initial=.15}
+\ctikzset{bipoles/cuteinductor/width/.initial=.6}
+\ctikzset{bipoles/cuteinductor/coils/.initial=5}
+\ctikzset{bipoles/cuteinductor/coil aspect/.initial=.5}%percentage of inductor width, which is covered by lower coil
+%% Cute choke settings
+\ctikzset{bipoles/cutechoke/height/.initial=.3}
+\ctikzset{bipoles/cutechoke/lower coil height/.initial=.15}
+\ctikzset{bipoles/cutechoke/width/.initial=.6}
+\ctikzset{bipoles/cutechoke/coils/.initial=5}
+\ctikzset{bipoles/cutechoke/coil aspect/.initial=.5}%percentage of choke width, which is covered by lower coil
+\ctikzset{bipoles/cutechoke/cstep/.initial=.3}
+\ctikzset{bipoles/cutechoke/cdist/.initial=1.3}
+\ctikzset{bipoles/cutechoke/cthick/.initial=1}
+\newif\ifpgf at circuit@bipole at twolineschoke
+\pgf at circuit@bipole at twolineschokefalse
+\pgfkeys{/tikz/onelinechoke/.add code={}{\pgf at circuit@bipole at twolineschokefalse}}
+\ctikzset{onelinechoke/.add code={}{\pgf at circuit@bipole at twolineschokefalse}}
+\pgfkeys{/tikz/twolineschoke/.add code={}{\pgf at circuit@bipole at twolineschoketrue}}
+\ctikzset{twolineschoke/.add code={}{\pgf at circuit@bipole at twolineschoketrue}}
+%
+\ctikzset{bipoles/americaninductor/height/.initial=.3}
+\ctikzset{bipoles/americaninductor/height 2/.initial=.1}
+\ctikzset{bipoles/americaninductor/width/.initial=.8}
+\ctikzset{bipoles/americaninductor/coils/.initial=4}
+\ctikzset{bipoles/americaninductor/coil height/.initial=.15}
+\ctikzset{bipoles/vcuteinductor/height/.initial=.6}
+\ctikzset{bipoles/vcuteinductor/lower coil height/.initial=.3}
+\ctikzset{bipoles/vcuteinductor/width/.initial=.6}
+\ctikzset{bipoles/vcuteinductor/coils/.initial=5}
+\ctikzset{bipoles/vcuteinductor/coil aspect/.initial=.5}%percentage of inductor width, which is covered by lower coil
+\ctikzset{bipoles/vamericaninductor/height/.initial=.6}
+\ctikzset{bipoles/vamericaninductor/height 2/.initial=.2}
+\ctikzset{bipoles/vamericaninductor/width/.initial=.8}
+\ctikzset{bipoles/vamericaninductor/coils/.initial=4}
+\ctikzset{bipoles/vamericaninductor/coil height/.initial=.15}
+\ctikzset{bipoles/tfullgeneric/height/.initial=.70}
+\ctikzset{bipoles/tfullgeneric/width/.initial=.80}
+\ctikzset{bipoles/fullgeneric/height/.initial=.30}
+\ctikzset{bipoles/fullgeneric/width/.initial=.80}
+\ctikzset{inductor/.is choice}
+\ctikzset{inductor/cute/.code={\ctikzsetvalof{inductor}{cute}}}
+\ctikzset{inductor/european/.code={\ctikzsetvalof{inductor}{european}}}
+\ctikzset{inductor/american/.code={\ctikzsetvalof{inductor}{american}}}
+
+\tikzset{american inductors/.style = {\circuitikzbasekey/inductor = american}}
+\tikzset{european inductors/.style = {\circuitikzbasekey/inductor = european}}
+\tikzset{cute inductors/.style = {\circuitikzbasekey/inductor = cute}}
+\tikzset{american ports/.style = {\circuitikzbasekey/logic ports = american}}
+\tikzset{european ports/.style = {\circuitikzbasekey/logic ports = european}}
+
+%%>>>
+
+% Sources%<<<1
+
+\ctikzset{bipoles/esource/height/.initial=.60}
+\ctikzset{bipoles/esource/width/.initial=.60}
+\ctikzset{bipoles/pvsource/height/.initial=.60}
+\ctikzset{bipoles/pvsource/width/.initial=.60}
+\ctikzset{bipoles/isource/height/.initial=.60}
+\ctikzset{bipoles/isource/width/.initial=.60}
+\ctikzset{bipoles/oosource/height/.initial=.60}
+\ctikzset{bipoles/oosource/width/.initial=.60}
+\ctikzset{bipoles/oosource/circlesize/.initial=.65}%circlesize+circleoffset should be =1
+\ctikzset{bipoles/oosource/circleoffset/.initial=.35}%circlesize+circleoffset should be =1
+\ctikzset{bipoles/dcisource/angle/.initial=80}
+\ctikzset{bipoles/dcisource/height/.initial=.60}
+\ctikzset{bipoles/dcisource/width/.initial=.60}
+\ctikzset{bipoles/dcvsource/height/.initial=.60}
+\ctikzset{bipoles/dcvsource/width/.initial=.60}
+\ctikzset{bipoles/vsourcetri/height/.initial=.60}
+\ctikzset{bipoles/vsourcetri/width/.initial=.60}
+\ctikzset{bipoles/isourceam/height/.initial=.60}
+\ctikzset{bipoles/isourceam/width/.initial=.60}
+\ctikzset{bipoles/vsource/height/.initial=.60}
+\ctikzset{bipoles/vsource/width/.initial=.60}
+\ctikzset{bipoles/vsourceam/height/.initial=.60}
+\ctikzset{bipoles/vsourceam/width/.initial=.60}
+\ctikzset{bipoles/vsourceam/margin/.initial=.7}
+\ctikzset{bipoles/isourcesin/height/.initial=.60}
+\ctikzset{bipoles/isourcesin/width/.initial=.60}
+\ctikzset{bipoles/vsourcesin/height/.initial=.60}
+\ctikzset{bipoles/vsourcesin/width/.initial=.60}
+\ctikzset{bipoles/vsourcesquare/height/.initial=.60}
+\ctikzset{bipoles/vsourcesquare/width/.initial=.60}
+\ctikzset{bipoles/cisource/height/.initial=.7}
+\ctikzset{bipoles/cisource/width/.initial=.7}
+\ctikzset{bipoles/cisourceam/height/.initial=.7}
+\ctikzset{bipoles/cisourceam/width/.initial=.7}
+\ctikzset{bipoles/ecsource/height/.initial=.7}
+\ctikzset{bipoles/ecsource/width/.initial=.7}
+\ctikzset{bipoles/cvsource/height/.initial=.7}
+\ctikzset{bipoles/cvsource/width/.initial=.7}
+\ctikzset{bipoles/cvsourceam/height/.initial=.7}
+\ctikzset{bipoles/cvsourceam/width/.initial=.7}
+\ctikzset{bipoles/cvsourceam/margin/.initial=.7}
+\ctikzset{bipoles/cvsourceam/text scale/.initial=1}
+\ctikzset{bipoles/cisourcesin/width/.initial=.7}
+\ctikzset{bipoles/cvsourcesin/height/.initial=.7}
+\ctikzset{bipoles/cvsourcesin/width/.initial=.7}
+\ctikzset{bipoles/battery/height/.initial=.6}
+\ctikzset{bipoles/battery/width/.initial=.3}
+\ctikzset{bipoles/battery1/height/.initial=.6}
+\ctikzset{bipoles/battery1/width/.initial=.3}
+\ctikzset{bipoles/battery2/height/.initial=.6}
+\ctikzset{bipoles/battery2/width/.initial=.3}
+% noise sources
+\ctikzset{bipoles/noise sources/fillcolor/.initial=gray!50}
+
+%%>>>
+
+% "oo" style transformers and power grid diagrams%<<<1
+% % % ootransformer
+\ctikzset{bipoles/oosourcetrans/height/.initial=.6}
+\ctikzset{bipoles/oosourcetrans/width/.initial=.6}
+\ctikzset{bipoles/oosourcetrans/circlesize/.initial=.6}%circlesize+circleoffset should be =1
+\ctikzset{bipoles/oosourcetrans/circleoffset/.initial=.4}%circlesize+circleoffset should be =1
+\ctikzset{bipoles/oosourcetrans/vectorgroupscale/.initial=1}
+
+% % % oootransformer
+\ctikzset{bipoles/ooosource/height/.initial=.6}
+\ctikzset{bipoles/ooosource/circlesize/.initial=.55}%circlesize+circleoffset should be =1
+\ctikzset{bipoles/ooosource/circleoffset/.initial=.45}%circlesize+circleoffset should be =1
+\ctikzset{bipoles/ooosource/vectorgroupscale/.initial=1}
+
+% % % primary windings
+\newif\ifpgf at circ@prim at delta
+\newif\ifpgf at circ@prim at wye
+\newif\ifpgf at circ@prim at zig
+\pgfkeys{tikz/prim/.is choice}
+\pgfkeys{tikz/prim/delta/.add code={}{\pgf at circ@prim at deltatrue}}
+\pgfkeys{tikz/prim/wye/.add code={}{\pgf at circ@prim at wyetrue}}
+\pgfkeys{tikz/prim/zig/.add code={}{\pgf at circ@prim at zigtrue}}
+
+% % % secondary windings
+\newif\ifpgf at circ@sec at delta
+\newif\ifpgf at circ@sec at wye
+\newif\ifpgf at circ@sec at zig
+\pgfkeys{tikz/sec/.is choice}
+\pgfkeys{tikz/sec/delta/.add code={}{\pgf at circ@sec at deltatrue}}
+\pgfkeys{tikz/sec/wye/.add code={}{\pgf at circ@sec at wyetrue}}
+\pgfkeys{tikz/sec/zig/.add code={}{\pgf at circ@sec at zigtrue}}
+
+% % % tertiary windings (ooosource)
+\newif\ifpgf at circ@tert at delta
+\newif\ifpgf at circ@tert at wye
+\newif\ifpgf at circ@tert at zig
+\pgfkeys{tikz/tert/.is choice}
+\pgfkeys{tikz/tert/delta/.add code={}{\pgf at circ@tert at deltatrue}}
+\pgfkeys{tikz/tert/wye/.add code={}{\pgf at circ@tert at wyetrue}}
+\pgfkeys{tikz/tert/zig/.add code={}{\pgf at circ@tert at zigtrue}}%
+%>>>
+
+% diodes%<<<1
+
+\ctikzset{bipoles/diode/height/.initial=.50}
+\ctikzset{bipoles/diode/width/.initial=.40}
+\ctikzset{bipoles/bidirectionaldiode/height/.initial=1.1}
+\ctikzset{bipoles/bidirectionaldiode/width/.initial=1}
+\ctikzset{bipoles/bidirectionaldiode/diode width left/.initial=.3}
+\ctikzset{bipoles/bidirectionaldiode/diode width right/.initial=.3}
+\ctikzset{bipoles/varcap/height/.initial=.50}
+\ctikzset{bipoles/varcap/width/.initial=.45}
+\ctikzset{tripoles/thyristor/height/.initial=1.10}
+\ctikzset{tripoles/thyristor/height 2/.initial=.5}
+\ctikzset{tripoles/thyristor/width/.initial=1.0}
+\ctikzset{tripoles/thyristor/diode height/.initial=.5}
+\ctikzset{tripoles/thyristor/diode width left/.initial=.4}
+\ctikzset{tripoles/thyristor/diode width right/.initial=.3}
+
+\ctikzset{tripoles/triac/height/.initial=1.1}
+\ctikzset{tripoles/triac/width/.initial=1}
+\ctikzset{tripoles/triac/diode width left/.initial=.3}
+\ctikzset{tripoles/triac/diode width right/.initial=.3}
+%
+% Flipping arrows in LED and photodiodes
+%
+\newif\ifpgf at led@fliparrows
+\newif\ifpgf at pd@fliparrows
+\pgf at led@fliparrowsfalse
+\pgf at pd@fliparrowsfalse
+%
+% by default the arrows start (LED) and go (PD) to the anode.
+%
+\ctikzset{led arrows from anode/.code=\pgf at led@fliparrowsfalse}
+\ctikzset{pd arrows to anode/.code=\pgf at pd@fliparrowsfalse}
+%
+% but they can start form the cathode (LED) or go to it (PD)
+%
+\ctikzset{led arrows from cathode/.code=\pgf at led@fliparrowstrue}
+\ctikzset{pd arrows to cathode/.code=\pgf at pd@fliparrowstrue}
+
+\newif\ifpgf at circuit@strokediode
+\newif\ifpgf at circuit@fulldiode
+\pgf at circuit@strokediodefalse
+\pgf at circuit@fulldiodefalse
+
+\ctikzset{diode/.is choice}
+\ctikzset{diode/empty/.code = \pgf at circuit@fulldiodefalse\pgf at circuit@strokediodefalse}%default
+\ctikzset{diode/full/.code = \pgf at circuit@fulldiodetrue }
+\ctikzset{diode/stroke/.code = \pgf at circuit@strokediodetrue}
+
+\tikzset{full diodes/.style = { \circuitikzbasekey/diode = full}}
+\tikzset{empty diodes/.style = { \circuitikzbasekey/diode = empty}}
+\tikzset{stroke diodes/.style = { \circuitikzbasekey/diode = stroke}}
+
+%%>>>
+
+% switches%<<<1
+
+\ctikzset{bipoles/spst/height/.initial=.35}
+\ctikzset{bipoles/spst/width/.initial=.35}
+\ctikzset{bipoles/spst/depth/.initial=.2}
+\ctikzset{bipoles/nos/height/.initial=.3}
+\ctikzset{bipoles/nos/width/.initial=.35}
+\ctikzset{bipoles/nos/depth/.initial=.2}
+\ctikzset{bipoles/ncs/height/.initial=.35}
+\ctikzset{bipoles/ncs/width/.initial=.35}
+\ctikzset{bipoles/ncs/depth/.initial=.2}
+\ctikzset{bipoles/pushbutton/height/.initial=.5}
+\ctikzset{bipoles/pushbutton/height 2/.initial=.2}
+\ctikzset{bipoles/pushbutton/width/.initial=.50}
+%%% reed switch
+\ctikzset{bipoles/reed/height/.initial=.4}
+\ctikzset{bipoles/reed/width/.initial=.8}% 0.35 in nos
+\ctikzset{bipoles/reed/depth/.initial=.4}
+%% Cute switches
+\ctikzset{bipoles/cuteswitch/shape/.initial={ocirc}}
+\ctikzset{bipoles/cuteswitch/height/.initial=.6}
+\ctikzset{bipoles/cuteswitch/height 2/.initial=.2}
+\ctikzset{bipoles/cuteswitch/width/.initial=.50}
+\ctikzset{bipoles/cuteswitch/thickness/.initial=1}
+
+\ctikzset{tripoles/spdt/width/.initial=.85}
+\ctikzset{tripoles/spdt/height/.initial=.45}
+\ctikzset{tripoles/spdt/margin/.initial=.45}
+
+\ctikzset{tripoles/toggleswitch/height/.initial=.8}
+\ctikzset{tripoles/toggleswitch/height 2/.initial=.0}
+\ctikzset{tripoles/toggleswitch/width/.initial=.80}
+%%>>>
+
+% arresters, fuses, lamps, etc%<<<1
+
+\ctikzset{bipoles/european gas filled surge arrester/height/.initial=.30}
+\ctikzset{bipoles/european gas filled surge arrester/width/.initial=.80}
+\ctikzset{bipoles/european gas filled surge arrester/inside/.initial=.30}
+\ctikzset{bipoles/american gas filled surge arrester/height/.initial=.60}
+\ctikzset{bipoles/american gas filled surge arrester/width/.initial=.60}
+\ctikzset{bipoles/american gas filled surge arrester/inside/.initial=.15}
+\ctikzset{bipoles/american gas filled surge arrester/dot x/.initial=.25}
+\ctikzset{bipoles/american gas filled surge arrester/dot y/.initial=.45}
+\ctikzset{bipoles/american gas filled surge arrester/size/.initial=.1}
+\ctikzset{bipoles/fuse/height/.initial=.20}
+\ctikzset{bipoles/fuse/width/.initial=.50}
+\ctikzset{bipoles/afuse/height/.initial=.20}
+\ctikzset{bipoles/afuse/width/.initial=.50}
+\ctikzset{bipoles/lamp/height/.initial=.60}
+\ctikzset{bipoles/lamp/width/.initial=.60}
+\ctikzset{bipoles/bulb/height/.initial=.8}
+\ctikzset{bipoles/bulb/width/.initial=.8}
+\ctikzset{bipoles/tline/height/.initial=.3}
+\ctikzset{bipoles/tline/width/.initial=.6}
+\ctikzset{bipoles/squid/height/.initial=.60}
+\ctikzset{bipoles/squid/width/.initial=.60}
+\ctikzset{bipoles/barrier/height/.initial=.60}
+\ctikzset{bipoles/barrier/width/.initial=.60}
+\ctikzset{bipoles/openbarrier/gap/.initial=0.5}
+\ctikzset{bipoles/thermocouple/height/.initial=.250}
+\ctikzset{bipoles/thermocouple/height 2/.initial=.60}
+\ctikzset{bipoles/thermocouple/width/.initial=.140}
+\newif\ifpgf at circuit@europeangfsurgearrester
+\ctikzset{gas filled surge arrester choice/.is choice}
+\ctikzset{gas filled surge arrester choice/european/.code= {\pgf at circuit@europeangfsurgearrestertrue}}
+\ctikzset{gas filled surge arrester choice/american/.code= {\pgf at circuit@europeangfsurgearresterfalse}}
+
+\tikzset{american gas filled surge arrester set/.style = {\circuitikzbasekey/gas filled surge arrester choice=american}}
+\tikzset{european gas filled surge arrester set/.style = {\circuitikzbasekey/gas filled surge arrester choice=european}}
+%%>>>
+
+% wires (open, shorts, ...)%<<<1
+
+\ctikzset{bipoles/open/height/.initial=.3} %necessary for curly voltages
+\ctikzset{bipoles/open/width/.initial=.3} %necessary for curly voltages
+\ctikzset{bipoles/open/voltage/straight label distance/.initial=0}
+\ctikzset{bipoles/open/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/short/height/.initial=.1} %dummy height for voltage positioning
+\ctikzset{bipoles/short/width/.initial=.1} %dummy width for voltage positioning
+% multiwire
+\ctikzset{bipoles/multiwire/height/.initial=0.4}
+\ctikzset{bipoles/multiwire/width/.initial=0.2}
+\ctikzset{bipoles/multiwire/spacing/.initial=0.05}
+% crossing wires
+\ctikzset{bipoles/crossing/size/.initial=.2}
+%%>>>
+
+% Instruments %<<<1
+\ctikzset{bipoles/ammeter/height/.initial=.60}
+\ctikzset{bipoles/ammeter/width/.initial=.60}
+\ctikzset{bipoles/ohmmeter/height/.initial=.60}
+\ctikzset{bipoles/ohmmeter/width/.initial=.60}
+\ctikzset{bipoles/voltmeter/height/.initial=.60}
+\ctikzset{bipoles/voltmeter/width/.initial=.60}
+\ctikzset{bipoles/smeter/height/.initial=.60}
+\ctikzset{bipoles/smeter/width/.initial=.60}
+\ctikzset{bipoles/smeter/voltage/additional shift/.initial=1}
+\ctikzset{bipoles/qmeter/depth/.initial=.40}
+\ctikzset{bipoles/qmeter/height/.initial=.80}
+\ctikzset{bipoles/qmeter/width/.initial=.60}
+% this must be specified for each one
+\ctikzset{bipoles/qvprobe/voltage/additional shift/.initial=.5}
+\ctikzset{bipoles/qiprobe/voltage/additional shift/.initial=.5}
+\ctikzset{bipoles/qpprobe/voltage/additional shift/.initial=.5}
+\ctikzset{bipoles/iloop/width/.initial=.40}
+\ctikzset{bipoles/iloop/height/.initial=.60}
+
+\ctikzset{bipoles/oscope/height/.initial=.60}
+\ctikzset{bipoles/oscope/width/.initial=.60}
+\ctikzset{bipoles/oscope/voltage/additional shift/.initial=1}
+
+
+% option to not rotate the new (Romano's) instruments
+\newif\ifpgf at circuit@straightinstruments\pgf at circuit@straightinstrumentstrue
+\pgfkeys{/tikz/straight instruments/.add code={}{\pgf at circuit@straightinstrumentstrue}}
+\ctikzset{straight instruments/.add code={}{\pgf at circuit@straightinstrumentstrue}}
+\pgfkeys{/tikz/rotated instruments/.add code={}{\pgf at circuit@straightinstrumentsfalse}}
+\ctikzset{rotated instruments/.add code={}{\pgf at circuit@straightinstrumentsfalse}}
+%%>>>
+
+% blocks (twoports and so)%<<<1
+
+\ctikzset{bipoles/twoport/width/.initial=.7}
+\ctikzset{bipoles/twoport/height/.initial=.7}
+\ctikzset{bipoles/twoport/text/.initial=}
+\ctikzset{bipoles/twoportsplit/width/.initial=.7}
+\ctikzset{bipoles/twoport/text in/.initial=}
+\ctikzset{bipoles/twoport/text out/.initial=}
+\ctikzset{text/.style={t=#1}}
+\ctikzset{t/.code={%
+        \ctikzsetvalof{bipoles/twoport/text}{#1}%
+}}
+\ctikzset{text in/.style={t1=#1}}
+\ctikzset{t1/.code={%
+        \ctikzsetvalof{bipoles/twoport/text in}{#1}%
+}}
+\ctikzset{text out/.style={t2=#1}}
+\ctikzset{t2/.code={%
+        \ctikzsetvalof{bipoles/twoport/text out}{#1}%
+}}
+\ctikzset{bipoles/vco/width/.initial=.7}
+\ctikzset{bipoles/bandpass/width/.initial=.7}
+\ctikzset{bipoles/bandstop/width/.initial=.7}
+\ctikzset{bipoles/highpass/width/.initial=.7}
+\ctikzset{bipoles/lowpass/width/.initial=.7}
+\ctikzset{bipoles/allpass/width/.initial=.7}
+\ctikzset{bipoles/adc/width/.initial=.7}
+\ctikzset{bipoles/dac/width/.initial=.7}
+\ctikzset{bipoles/dsp/width/.initial=.7}
+\ctikzset{bipoles/fft/width/.initial=.7}
+\ctikzset{bipoles/amp/width/.initial=.7}
+\ctikzset{bipoles/vamp/width/.initial=.7}
+\ctikzset{bipoles/piattenuator/width/.initial=.7}
+\ctikzset{bipoles/vpiattenuator/width/.initial=.7}
+\ctikzset{bipoles/tattenuator/width/.initial=.7}
+\ctikzset{bipoles/vtattenuator/width/.initial=.7}
+\ctikzset{bipoles/phaseshifter/width/.initial=.7}
+\ctikzset{bipoles/vphaseshifter/width/.initial=.7}
+\ctikzset{bipoles/detector/width/.initial=.7}
+\ctikzset{tripoles/mixer/width/.initial=0.7}
+\ctikzset{tripoles/adder/width/.initial=0.7}
+\ctikzset{tripoles/circulator/width/.initial=.7}
+\ctikzset{tripoles/oscillator/width/.initial=.7}
+
+\ctikzset{tripoles/wilkinson/height/.initial=1.3}
+\ctikzset{tripoles/wilkinson/width/.initial=1.3}
+
+\ctikzset{tripoles/splitter/height/.initial=1.3}
+\ctikzset{tripoles/splitter/width/.initial=1.3}
+
+\ctikzset{tripoles/mzm/height/.initial=1.3}
+\ctikzset{tripoles/mzm/width/.initial=1.3}
+%%>>>
+
+% Transistors %<<<1
+
+\newif\ifpgf at circuit@trans at depletiontype
+\pgf at circuit@trans at depletiontypefalse
+
+\newif\ifpgf at circuit@mos at arrows
+\ctikzset{tripoles/mos style/.is choice}
+\ctikzset{tripoles/mos style/no arrows/.code={\pgf at circuit@mos at arrowsfalse}}
+\ctikzset{tripoles/mos style/arrows/.code={\pgf at circuit@mos at arrowstrue}}
+\pgfkeys{/tikz/arrowmos/.add code={}{\pgf at circuit@mos at arrowstrue}}
+\pgfkeys{/tikz/noarrowmos/.add code={}{\pgf at circuit@mos at arrowsfalse}}
+
+% Fixed label positions
+\newif\ifpgf at circuit@transisors at fixlabels
+\pgf at circuit@transisors at fixlabelstrue
+\pgfkeys{/tikz/center transistors text/.add code={}{\pgf at circuit@transisors at fixlabelstrue}}
+\ctikzset{fix transistors text/.add code={}{\pgf at circuit@transisors at fixlabelstrue}}
+\pgfkeys{/tikz/legacy transistors text/.add code={}{\pgf at circuit@transisors at fixlabelsfalse}}
+\ctikzset{legacy transistors text/.add code={}{\pgf at circuit@transisors at fixlabelsfalse}}
+
+% Option solderdot for fet
+\newif\ifpgf at circuit@fet at solderdot
+\pgfkeys{/tikz/solderdot/.add code={}{\pgf at circuit@fet at solderdottrue}}
+\ctikzset{solderdot/.add code={}{\pgf at circuit@fet at solderdottrue}}
+\pgfkeys{/tikz/nosolderdot/.add code={}{\pgf at circuit@fet at solderdotfalse}}
+\ctikzset{nosolderdot/.add code={}{\pgf at circuit@fet at solderdotfalse}}
+
+% Option bodydiode for fet
+\newif\ifpgf at circuit@fet at bodydiode
+\pgfkeys{/tikz/bodydiode/.add code={}{\pgf at circuit@fet at bodydiodetrue}}
+\ctikzset{bodydiode/.add code={}{\pgf at circuit@fet at bodydiodetrue}}
+\pgfkeys{/tikz/nobodydiode/.add code={}{\pgf at circuit@fet at bodydiodefalse}}
+\ctikzset{nobodydiode/.add code={}{\pgf at circuit@fet at bodydiodefalse}}
+
+% Option draw fet without gate connection
+\newif\ifpgf at circuit@bpt at drawgate
+\pgf at circuit@bpt at drawgatetrue
+\pgfkeys{/tikz/nogate/.add code={}{\pgf at circuit@bpt at drawgatefalse}}
+\ctikzset{nogate/.add code={}{\pgf at circuit@bpt at drawgatefalse}}
+\pgfkeys{/tikz/nobase/.add code={}{\pgf at circuit@bpt at drawgatefalse}}
+\ctikzset{nobase/.add code={}{\pgf at circuit@bpt at drawgatefalse}}
+
+% Option draw bpt with schottky base
+\newif\ifpgf at circuit@bpt at schottky
+\pgf at circuit@bpt at schottkyfalse
+\pgfkeys{/tikz/schottky base/.add code={}{\pgf at circuit@bpt at schottkytrue}}
+\ctikzset{schottky base/.add code={}{\pgf at circuit@bpt at schottkytrue}}
+\pgfkeys{/tikz/no schottky base/.add code={}{\pgf at circuit@bpt at schottkyfalse}}
+\ctikzset{no schottky base/.add code={}{\pgf at circuit@bpt at schottkyfalse}}
+\ctikzset{tripoles/schottky base size/.initial=0.05}
+
+% Option draw bpt without base connection
+\newif\ifpgf at circuit@bpt at drawbase
+\pgf at circuit@bpt at drawbasetrue
+\pgfkeys{/tikz/nobase/.add code={}{\pgf at circuit@bpt at drawbasefalse}}
+\ctikzset{nobase/.add code={}{\pgf at circuit@bpt at drawbasefalse}}
+\pgfkeys{/tikz/nogate/.add code={}{\pgf at circuit@bpt at drawbasefalse}}
+\ctikzset{nogate/.add code={}{\pgf at circuit@bpt at drawbasefalse}}
+
+% Option draw bpt with optical input
+\newif\ifpgf at circuit@bpt at drawphoto
+\pgf at circuit@bpt at drawphotofalse
+\pgfkeys{/tikz/photo/.add code={}{\pgf at circuit@bpt at drawphototrue}}
+\ctikzset{photo/.add code={}{\pgf at circuit@bpt at drawphototrue}}
+\pgfkeys{/tikz/photo/.add code={}{\pgf at circuit@bpt at drawphototrue}}
+\ctikzset{photo/.add code={}{\pgf at circuit@bpt at drawphototrue}}
+
+% Option draw fet without bulk connection -- Added by Burak Kelleci
+\newif\ifpgf at circuit@bpt at drawbulk
+\pgfkeys{/tikz/bulk/.add code={}{\pgf at circuit@bpt at drawbulktrue}}
+\ctikzset{bulk/.add code={}{\pgf at circuit@bpt at drawbulktrue}}
+\pgfkeys{/tikz/nobulk/.add code={}{\pgf at circuit@bpt at drawbulkfalse}}
+\ctikzset{nobulk/.add code={}{\pgf at circuit@bpt at drawbulkfalse}}
+
+% Option draw pmos with empty circle
+\newif\ifpgf at circuit@pmos at emptycircle
+\pgf at circuit@pmos at emptycirclefalse
+\ctikzset{tripoles/pmos style/.is choice}
+\pgfkeys{/tikz/emptycircle/.add code={}{\pgf at circuit@pmos at emptycircletrue}}
+\ctikzset{tripoles/pmos style/emptycircle/.add code={}{\pgf at circuit@pmos at emptycircletrue}}
+% Option draw pmos with no circle
+\newif\ifpgf at circuit@pmos at nocircle
+\pgf at circuit@pmos at nocirclefalse
+\pgfkeys{/tikz/nocircle/.add code={}{\pgf at circuit@pmos at nocircletrue}}
+\ctikzset{tripoles/pmos style/nocircle/.add code={}{\pgf at circuit@pmos at nocircletrue}}
+% back to normal
+\pgfkeys{/tikz/fullcircle/.add code={}{\pgf at circuit@pmos at emptycirclefalse\pgf at circuit@pmos at nocirclefalse}}
+\ctikzset{tripoles/pmos style/fullcircle/.add code={}{\pgf at circuit@pmos at emptycirclefalse\pgf at circuit@pmos at nocirclefalse}}
+% arrows at the end, the correct way
+\newif\ifpgf at circuit@trans at arrowatend
+\pgf at circuit@trans at arrowatendfalse
+\ctikzset{transistors/arrow pos/.is choice}
+\ctikzset{transistors/arrow pos/legacy/.code={\pgf at circuit@trans at arrowatendfalse}}
+\ctikzset{transistors/arrow pos/end/.code={\pgf at circuit@trans at arrowatendtrue}}
+
+\newif\ifpgf at circuit@trans at ntype
+\pgf at circuit@trans at ntypetrue %default true
+%\newif\ifpgf at circuit@trans at ptype
+%\ctikzset{tripoles/nmos/.add code={\pgf at circuit@trans at ntypetrue}}
+\ctikzset{tripoles/nmos/width/.initial=.7}
+\ctikzset{tripoles/nmos/gate height/.initial=.35}
+\ctikzset{tripoles/nmos/base height/.initial=.5}
+\ctikzset{tripoles/nmos/conn height/.initial=0}
+\ctikzset{tripoles/nmos/height/.initial=1.1}
+\ctikzset{tripoles/nmos/base width/.initial=.5}
+\ctikzset{tripoles/nmos/gate width/.initial=.62}
+\ctikzset{tripoles/nmos/arrow pos/.initial=.6}
+\ctikzset{tripoles/nmos/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nmos/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nmos/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nmos/curr direction/.initial=1}
+
+\ctikzset{tripoles/pmos/width/.initial=.7}
+\ctikzset{tripoles/pmos/gate height/.initial=.35}
+\ctikzset{tripoles/pmos/base height/.initial=.5}
+\ctikzset{tripoles/pmos/conn height/.initial=0}
+\ctikzset{tripoles/pmos/height/.initial=1.1}
+\ctikzset{tripoles/pmos/base width/.initial=.5}
+\ctikzset{tripoles/pmos/gate width/.initial=.62}
+\ctikzset{tripoles/pmos/arrow pos/.initial=.4}
+\ctikzset{tripoles/pmos/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pmos/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pmos/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pmos/curr direction/.initial=-1}
+
+\ctikzset{tripoles/nmosd/width/.initial=.7}
+\ctikzset{tripoles/nmosd/gate height/.initial=.35}
+\ctikzset{tripoles/nmosd/base height/.initial=.5}
+\ctikzset{tripoles/nmosd/conn height/.initial=0}
+\ctikzset{tripoles/nmosd/height/.initial=1.1}
+\ctikzset{tripoles/nmosd/base width/.initial=.5}
+\ctikzset{tripoles/nmosd/gate width/.initial=.62}
+\ctikzset{tripoles/nmosd/arrow pos/.initial=.6}
+\ctikzset{tripoles/nmosd/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nmosd/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nmosd/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nmosd/curr direction/.initial=1}
+\ctikzset{tripoles/nmosd/depletion width/.initial=.1}
+\ctikzset{tripoles/nmosd/depletion color/.initial=default}
+
+\ctikzset{tripoles/pmosd/width/.initial=.7}
+\ctikzset{tripoles/pmosd/gate height/.initial=.35}
+\ctikzset{tripoles/pmosd/base height/.initial=.5}
+\ctikzset{tripoles/pmosd/conn height/.initial=0}
+\ctikzset{tripoles/pmosd/height/.initial=1.1}
+\ctikzset{tripoles/pmosd/base width/.initial=.5}
+\ctikzset{tripoles/pmosd/gate width/.initial=.62}
+\ctikzset{tripoles/pmosd/arrow pos/.initial=.4}
+\ctikzset{tripoles/pmosd/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pmosd/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pmosd/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pmosd/curr direction/.initial=-1}
+\ctikzset{tripoles/pmosd/depletion width/.initial=.1}
+\ctikzset{tripoles/pmosd/depletion color/.initial=default}
+\ctikzset{tripoles/hemt/width/.initial=.7}
+\ctikzset{tripoles/hemt/gate height/.initial=.35}
+\ctikzset{tripoles/hemt/base height/.initial=.5}
+\ctikzset{tripoles/hemt/conn height/.initial=0}
+\ctikzset{tripoles/hemt/height/.initial=1.1}
+\ctikzset{tripoles/hemt/base width/.initial=.5}
+\ctikzset{tripoles/hemt/gate width/.initial=.62}
+\ctikzset{tripoles/hemt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/hemt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/hemt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/hemt/curr direction/.initial=1}
+
+\ctikzset{tripoles/nfet/width/.initial=.7}
+\ctikzset{tripoles/nfet/gate height/.initial=.35}
+\ctikzset{tripoles/nfet/base height/.initial=.5}
+\ctikzset{tripoles/nfet/conn height/.initial=0}
+\ctikzset{tripoles/nfet/height/.initial=1.1}
+\ctikzset{tripoles/nfet/base width/.initial=.5}
+\ctikzset{tripoles/nfet/gate width/.initial=.62}
+\ctikzset{tripoles/nfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nfet/curr direction/.initial=1}
+
+\ctikzset{tripoles/pfet/width/.initial=.7}
+\ctikzset{tripoles/pfet/gate height/.initial=.35}
+\ctikzset{tripoles/pfet/base height/.initial=.5}
+\ctikzset{tripoles/pfet/conn height/.initial=0}
+\ctikzset{tripoles/pfet/height/.initial=1.1}
+\ctikzset{tripoles/pfet/base width/.initial=.5}
+\ctikzset{tripoles/pfet/gate width/.initial=.62}
+\ctikzset{tripoles/pfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pfet/curr direction/.initial=-1}
+
+\ctikzset{tripoles/nfetd/width/.initial=.7}
+\ctikzset{tripoles/nfetd/gate height/.initial=.35}
+\ctikzset{tripoles/nfetd/base height/.initial=.5}
+\ctikzset{tripoles/nfetd/conn height/.initial=0}
+\ctikzset{tripoles/nfetd/height/.initial=1.1}
+\ctikzset{tripoles/nfetd/base width/.initial=.5}
+\ctikzset{tripoles/nfetd/gate width/.initial=.62}
+\ctikzset{tripoles/nfetd/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nfetd/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nfetd/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nfetd/curr direction/.initial=1}
+
+\ctikzset{tripoles/pfetd/width/.initial=.7}
+\ctikzset{tripoles/pfetd/gate height/.initial=.35}
+\ctikzset{tripoles/pfetd/base height/.initial=.5}
+\ctikzset{tripoles/pfetd/conn height/.initial=0}
+\ctikzset{tripoles/pfetd/height/.initial=1.1}
+\ctikzset{tripoles/pfetd/base width/.initial=.5}
+\ctikzset{tripoles/pfetd/gate width/.initial=.62}
+\ctikzset{tripoles/pfetd/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pfetd/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pfetd/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pfetd/curr direction/.initial=-1}
+
+\ctikzset{tripoles/nigfete/width/.initial=.7}
+\ctikzset{tripoles/nigfete/gate height/.initial=.35}
+\ctikzset{tripoles/nigfete/base height/.initial=.5}
+\ctikzset{tripoles/nigfete/conn height/.initial=.35}
+\ctikzset{tripoles/nigfete/height/.initial=1.1}
+\ctikzset{tripoles/nigfete/base width/.initial=.5}
+\ctikzset{tripoles/nigfete/gate width/.initial=.62}
+\ctikzset{tripoles/nigfete/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigfete/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigfete/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigfete/curr direction/.initial=1}
+
+\ctikzset{tripoles/nigfetd/width/.initial=.7}
+\ctikzset{tripoles/nigfetd/gate height/.initial=.35}
+\ctikzset{tripoles/nigfetd/base height/.initial=.5}
+\ctikzset{tripoles/nigfetd/conn height/.initial=.35}
+\ctikzset{tripoles/nigfetd/height/.initial=1.1}
+\ctikzset{tripoles/nigfetd/base width/.initial=.5}
+\ctikzset{tripoles/nigfetd/gate width/.initial=.62}
+\ctikzset{tripoles/nigfetd/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigfetd/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigfetd/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigfetd/curr direction/.initial=1}
+
+\ctikzset{tripoles/nigfetebulk/width/.initial=.7}
+\ctikzset{tripoles/nigfetebulk/gate height/.initial=.35}
+\ctikzset{tripoles/nigfetebulk/base height/.initial=.5}
+\ctikzset{tripoles/nigfetebulk/conn height/.initial=.35}
+\ctikzset{tripoles/nigfetebulk/height/.initial=1.1}
+\ctikzset{tripoles/nigfetebulk/base width/.initial=.5}
+\ctikzset{tripoles/nigfetebulk/gate width/.initial=.62}
+\ctikzset{tripoles/nigfetebulk/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigfetebulk/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigfetebulk/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigfetebulk/curr direction/.initial=1}
+
+\ctikzset{tripoles/pigfete/width/.initial=.7}
+\ctikzset{tripoles/pigfete/gate height/.initial=.35}
+\ctikzset{tripoles/pigfete/base height/.initial=.5}
+\ctikzset{tripoles/pigfete/conn height/.initial=.35}
+\ctikzset{tripoles/pigfete/height/.initial=1.1}
+\ctikzset{tripoles/pigfete/base width/.initial=.5}
+\ctikzset{tripoles/pigfete/gate width/.initial=.62}
+\ctikzset{tripoles/pigfete/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigfete/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigfete/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigfete/curr direction/.initial=-1}
+
+\ctikzset{tripoles/pigfetd/width/.initial=.7}
+\ctikzset{tripoles/pigfetd/gate height/.initial=.35}
+\ctikzset{tripoles/pigfetd/base height/.initial=.5}
+\ctikzset{tripoles/pigfetd/conn height/.initial=.35}
+\ctikzset{tripoles/pigfetd/height/.initial=1.1}
+\ctikzset{tripoles/pigfetd/base width/.initial=.5}
+\ctikzset{tripoles/pigfetd/gate width/.initial=.62}
+\ctikzset{tripoles/pigfetd/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigfetd/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigfetd/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigfetd/curr direction/.initial=-1}
+
+\ctikzset{tripoles/pigfetebulk/width/.initial=.7}
+\ctikzset{tripoles/pigfetebulk/gate height/.initial=.35}
+\ctikzset{tripoles/pigfetebulk/conn height/.initial=.35}
+\ctikzset{tripoles/pigfetebulk/base height/.initial=.5}
+\ctikzset{tripoles/pigfetebulk/height/.initial=1.1}
+\ctikzset{tripoles/pigfetebulk/base width/.initial=.5}
+\ctikzset{tripoles/pigfetebulk/gate width/.initial=.62}
+\ctikzset{tripoles/pigfetebulk/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigfetebulk/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigfetebulk/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigfetebulk/curr direction/.initial=-1}
+
+\ctikzset{tripoles/npn/width/.initial=.6}
+\ctikzset{tripoles/npn/base height/.initial=.45}
+\ctikzset{tripoles/npn/base height 2/.initial=.15}
+\ctikzset{tripoles/npn/base height/.initial=.4}
+\ctikzset{tripoles/npn/conn height/.initial=0}
+\ctikzset{tripoles/npn/height/.initial=1.1}
+\ctikzset{tripoles/npn/base width/.initial=.5}
+\ctikzset{tripoles/npn/arrow pos/.initial=.5}
+\ctikzset{tripoles/npn/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/npn/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/npn/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/npn/curr direction/.initial=1}
+
+\ctikzset{tripoles/pnp/width/.initial=.6}
+\ctikzset{tripoles/pnp/base height/.initial=.45}
+\ctikzset{tripoles/pnp/base height 2/.initial=.15}
+\ctikzset{tripoles/pnp/base height/.initial=.4}
+\ctikzset{tripoles/pnp/conn height/.initial=0}
+\ctikzset{tripoles/pnp/height/.initial=1.1}
+\ctikzset{tripoles/pnp/base width/.initial=.5}
+\ctikzset{tripoles/pnp/arrow pos/.initial=.5}
+\ctikzset{tripoles/pnp/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pnp/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pnp/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pnp/curr direction/.initial=-1}
+
+\ctikzset{tripoles/pigbt/width/.initial=.6}
+\ctikzset{tripoles/pigbt/gate height/.initial=.45}
+\ctikzset{tripoles/pigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/pigbt/base height/.initial=.4}
+\ctikzset{tripoles/pigbt/outer base height/.initial=.4}
+\ctikzset{tripoles/pigbt/outer base thickness/.initial=1}
+\ctikzset{tripoles/pigbt/conn height/.initial=0}
+\ctikzset{tripoles/pigbt/height/.initial=1.1}
+\ctikzset{tripoles/pigbt/gate width/.initial=.62}
+\ctikzset{tripoles/pigbt/base width/.initial=.5}
+\ctikzset{tripoles/pigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigbt/curr direction/.initial=-1}
+
+\ctikzset{tripoles/nigbt/width/.initial=.6}
+\ctikzset{tripoles/nigbt/gate height/.initial=.45}
+\ctikzset{tripoles/nigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/nigbt/base height/.initial=.4}
+\ctikzset{tripoles/nigbt/outer base height/.initial=.4}
+\ctikzset{tripoles/nigbt/outer base thickness/.initial=1}
+\ctikzset{tripoles/nigbt/conn height/.initial=0}
+\ctikzset{tripoles/nigbt/height/.initial=1.1}
+\ctikzset{tripoles/nigbt/gate width/.initial=.62}
+\ctikzset{tripoles/nigbt/base width/.initial=.5}
+\ctikzset{tripoles/nigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigbt/curr direction/.initial=1}
+
+\ctikzset{tripoles/Lpigbt/width/.initial=.6}
+\ctikzset{tripoles/Lpigbt/gate height/.initial=.45}
+\ctikzset{tripoles/Lpigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/Lpigbt/base height/.initial=.4}
+\ctikzset{tripoles/Lpigbt/outer base height/.initial=.4}
+\ctikzset{tripoles/Lpigbt/outer base thickness/.initial=1}
+\ctikzset{tripoles/Lpigbt/conn height/.initial=.4}
+\ctikzset{tripoles/Lpigbt/height/.initial=1.1}
+\ctikzset{tripoles/Lpigbt/gate width/.initial=.62}
+\ctikzset{tripoles/Lpigbt/base width/.initial=.5}
+\ctikzset{tripoles/Lpigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/Lpigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/Lpigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/Lpigbt/curr direction/.initial=-1}
+
+\ctikzset{tripoles/Lnigbt/width/.initial=.6}
+\ctikzset{tripoles/Lnigbt/gate height/.initial=.45}
+\ctikzset{tripoles/Lnigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/Lnigbt/base height/.initial=.4}
+\ctikzset{tripoles/Lnigbt/outer base height/.initial=.4}
+\ctikzset{tripoles/Lnigbt/outer base thickness/.initial=1}
+\ctikzset{tripoles/Lnigbt/conn height/.initial=.4}
+\ctikzset{tripoles/Lnigbt/height/.initial=1.1}
+\ctikzset{tripoles/Lnigbt/gate width/.initial=.62}
+\ctikzset{tripoles/Lnigbt/base width/.initial=.5}
+\ctikzset{tripoles/Lnigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/Lnigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/Lnigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/Lnigbt/curr direction/.initial=1}
+
+\ctikzset{tripoles/igbt/outer base height/.code={
+    \ctikzset{tripoles/nigbt/outer base height/.initial=#1}
+    \ctikzset{tripoles/pigbt/outer base height/.initial=#1}
+    \ctikzset{tripoles/Lnigbt/outer base height/.initial=#1}
+    \ctikzset{tripoles/Lpigbt/outer base height/.initial=#1}
+    \ctikzset{tripoles/Lnigbt/conn height/.initial=#1}
+    \ctikzset{tripoles/Lpigbt/conn height/.initial=#1}
+}}
+\ctikzset{tripoles/igbt/outer base thickness/.code={
+    \ctikzset{tripoles/nigbt/outer base thickness=#1}
+    \ctikzset{tripoles/pigbt/outer base thickness=#1}
+    \ctikzset{tripoles/Lnigbt/outer base thickness=#1}
+    \ctikzset{tripoles/Lpigbt/outer base thickness=#1}
+}}
+
+\ctikzset{tripoles/njfet/width/.initial=.7}
+\ctikzset{tripoles/njfet/gate height/.initial=.5}
+\ctikzset{tripoles/njfet/gate height 2/.initial=.35}
+\ctikzset{tripoles/njfet/gate width/.initial=.5}
+\ctikzset{tripoles/njfet/conn height/.initial=.35}
+\ctikzset{tripoles/njfet/height/.initial=1.1}
+\ctikzset{tripoles/njfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/njfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/njfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/njfet/curr direction/.initial=1}
+
+\ctikzset{tripoles/pjfet/width/.initial=.7}
+\ctikzset{tripoles/pjfet/gate height/.initial=.5}
+\ctikzset{tripoles/pjfet/gate height 2/.initial=.35}
+\ctikzset{tripoles/pjfet/gate width/.initial=.5}
+\ctikzset{tripoles/pjfet/conn height/.initial=.35}
+\ctikzset{tripoles/pjfet/height/.initial=1.1}
+\ctikzset{tripoles/pjfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pjfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pjfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pjfet/curr direction/.initial=-1}
+
+\ctikzset{tripoles/isfet/width/.initial=1}
+\ctikzset{tripoles/isfet/gate height/.initial=.35}
+\ctikzset{tripoles/isfet/base height/.initial=.5}
+\ctikzset{tripoles/isfet/height/.initial=1.1}
+\ctikzset{tripoles/isfet/base width/.initial=.3}
+\ctikzset{tripoles/isfet/gate width/.initial=.5}
+\ctikzset{tripoles/isfet/conn height/.initial=0}
+\ctikzset{tripoles/isfet/wave width/.initial=.16}
+\ctikzset{tripoles/isfet/wave amp/.initial=.06}
+\ctikzset{tripoles/isfet/waves y sep/.initial=.22}
+\ctikzset{tripoles/isfet/waves x sep/.initial=.8}
+\ctikzset{tripoles/isfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/isfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/isfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/isfet/curr direction/.initial=1}
+%
+% multi-emitter and multi-collector BJTs by Romano Giannetti
+%
+\ctikzset{tripoles/bjt/emitters/.initial=1}
+\ctikzset{tripoles/bjt/collectors/.initial=1}
+\pgfkeys{/tikz/emitters/.add code={}{\ctikzset{tripoles/bjt/emitters=#1}}}
+\pgfkeys{/tikz/collectors/.add code={}{\ctikzset{tripoles/bjt/collectors=#1}}}
+\ctikzset{tripoles/bjt/pins width/.initial=0.3}
+\pgfkeys{/tikz/bjt pins width/.add code={}{\ctikzset{tripoles/bjt/pins width=#1}}}
+\ctikzset{tripoles/bjt/multi height/.initial=.5}
+\pgfkeys{/tikz/bjt multi height/.add code={}{\ctikzset{tripoles/bjt/multi height/.initial=#1}}}
+%
+\ctikzset{tripoles/bjt/width/.initial=.3}
+\ctikzset{tripoles/bjt/base height 2/.initial=.4}
+\ctikzset{tripoles/bjt/base height/.initial=1.1}
+\ctikzset{tripoles/bjt/height/.initial=.4}
+\ctikzset{tripoles/bjt/base width/.initial=1}
+\ctikzset{tripoles/bjt/arrow pos/.initial=.5}
+% do NOT touch these two!
+\ctikzset{tripoles/bjt/npn/curr direction/.initial=1}
+\ctikzset{tripoles/bjt/pnp/curr direction/.initial=-1}
+
+%% transistors stop here
+%%>>>
+
+% Electronic tubes: diodetube, triode, tetrode and pentode%<<<1
+\ctikzset{tubes/width/.initial=1}                    % relative width
+\ctikzset{tubes/height/.initial=1.4}                 % relative height
+\ctikzset{tubes/tube radius/.initial=0.40}           % radius of tube circle
+\ctikzset{tubes/anode distance/.initial=0.40}        % distance from center
+\ctikzset{tubes/anode width/.initial=0.40}           % width of an anode/plate
+\ctikzset{tubes/grid protrusion/.initial=0.25}       % distance from center
+\ctikzset{tubes/grid dashes/.initial=5}              % number of grid dashes
+\ctikzset{tubes/grid separation/.initial=0.2}        % separation between grids
+\ctikzset{tubes/grid shift/.initial=0.0}             % y shift grids from center
+\ctikzset{tubes/cathode distance/.initial=0.40}      % distance from grid
+\ctikzset{tubes/cathode width/.initial=0.40}         % width of an cathode
+\ctikzset{tubes/cathode corners/.initial=0.06}       % corners of the cathode wire
+\ctikzset{tubes/cathode right extend/.initial=0.075} % extension at the right side
+\ctikzset{tubes/filament distance/.initial=0.1}      % distance from cathode
+\ctikzset{tubes/filament angle/.initial=15}          % Angle from centerpoint
+
+\newif\ifpgf at circuit@tubes at filament\pgf at circuit@tubes at filamentfalse
+\pgfkeys{/tikz/filament/.add code={}{\pgf at circuit@tubes at filamenttrue}}
+\ctikzset{tubes/filament/.add code={}{\pgf at circuit@tubes at filamenttrue}}
+\newif\ifpgf at circuit@tubes at nocathode\pgf at circuit@tubes at nocathodefalse
+\pgfkeys{/tikz/nocathode/.add code={}{\pgf at circuit@tubes at nocathodetrue}}
+\ctikzset{tubes/nocathode/.add code={}{\pgf at circuit@tubes at nocathodetrue}}
+\newif\ifpgf at circuit@tubes at fullcathode\pgf at circuit@tubes at fullcathodefalse
+\pgfkeys{/tikz/fullcathode/.add code={}{\pgf at circuit@tubes at fullcathodetrue}}
+\ctikzset{tubes/fullcathode/.add code={}{\pgf at circuit@tubes at fullcathodetrue}}%
+%>>>
+
+%% Logic ports%<<<1
+%% beware that the third option is in IEEE ports in pgfcircmultipoles.tex
+
+% switches for logic gates
+%
+\pgfkeys{/tikz/number inputs/.initial=0}
+\pgfkeys{/tikz/number inputs/.default=0}
+
+\newif\ifpgf at circuit@europeanlogicport
+\ctikzset{logic ports/.is choice}
+\ctikzset{logic ports/european/.code= {\pgf at circuit@europeanlogicporttrue
+    \tikzset{and port/.style={shape=european and port}}%
+    \tikzset{or port/.style={shape=european or port}}%
+    \tikzset{xor port/.style={shape=european xor port}}%
+    \tikzset{buffer port/.style={shape=european buffer port}}%
+    \tikzset{not port/.style={shape=european not port}}%
+    \tikzset{nand port/.style={shape=european nand port}}%
+    \tikzset{nor port/.style={shape=european nor port}}%
+    \tikzset{xnor port/.style={shape=european xnor port}}%
+    % there is no Schmitt ports in european style (yet)
+    \tikzset{schmitt port/.style={shape=schmitt}}%
+    \tikzset{invschmitt port/.style={shape=invschmitt}}%
+}}
+\ctikzset{logic ports/american/.code= {\pgf at circuit@europeanlogicportfalse
+    \tikzset{and port/.style={shape=american and port}}%
+    \tikzset{or port/.style={shape=american or port}}%
+    \tikzset{xor port/.style={shape=american xor port}}%
+    \tikzset{buffer port/.style={shape=american buffer port}}%
+    \tikzset{not port/.style={shape=american not port}}%
+    \tikzset{nand port/.style={shape=american nand port}}%
+    \tikzset{nor port/.style={shape=american nor port}}%
+    \tikzset{xnor port/.style={shape=american xnor port}}%
+    \tikzset{schmitt port/.style={shape=schmitt}}%
+    \tikzset{invschmitt port/.style={shape=invschmitt}}%
+}}
+
+\ctikzset{logic ports origin/.is choice}
+\ctikzset{logic ports origin/legacy/.code={
+    \ctikzset{tripoles/american and port/origin/.initial=0.8}%
+    \ctikzset{tripoles/american nand port/origin/.initial=0.8}%
+    \ctikzset{tripoles/american nor port/origin/.initial=0.8}%
+    \ctikzset{tripoles/american or port/origin/.initial=0.8}%
+    \ctikzset{tripoles/american xor port/origin/.initial=0.8}%
+    \ctikzset{tripoles/american xnor port/origin/.initial=0.8}%
+    \ctikzset{tripoles/european and port/origin/.initial=0.8}%
+    \ctikzset{tripoles/european nand port/origin/.initial=0.8}%
+    \ctikzset{tripoles/european or port/origin/.initial=0.8}%
+    \ctikzset{tripoles/european nor port/origin/.initial=0.8}%
+    \ctikzset{tripoles/european xor port/origin/.initial=0.8}%
+    \ctikzset{tripoles/european xnor port/origin/.initial=0.8}%
+    \ctikzset{tripoles/european buffer port/origin/.initial=0.8}%
+    \ctikzset{tripoles/european not port/origin/.initial=0.8}%
+    }%
+}
+\ctikzset{logic ports origin/center/.code={%
+    \ctikzset{tripoles/american and port/origin/.initial=0}%
+    \ctikzset{tripoles/american nand port/origin/.initial=0}%
+    \ctikzset{tripoles/american nor port/origin/.initial=0}%
+    \ctikzset{tripoles/american or port/origin/.initial=0}%
+    \ctikzset{tripoles/american xor port/origin/.initial=0}%
+    \ctikzset{tripoles/american xnor port/origin/.initial=0}%
+    \ctikzset{tripoles/european and port/origin/.initial=0}%
+    \ctikzset{tripoles/european nand port/origin/.initial=0}%
+    \ctikzset{tripoles/european or port/origin/.initial=0}%
+    \ctikzset{tripoles/european nor port/origin/.initial=0}%
+    \ctikzset{tripoles/european xor port/origin/.initial=0}%
+    \ctikzset{tripoles/european xnor port/origin/.initial=0}%
+    \ctikzset{tripoles/european buffer port/origin/.initial=0}%
+    \ctikzset{tripoles/european not port/origin/.initial=0}%
+    }%
+}
+
+\newif\ifpgfcirc at roundy@or at shapes\pgfcirc at roundy@or at shapesfalse
+\ctikzset{american or shape/.is choice}
+\ctikzset{american or shape/roundy/.code={\pgfcirc at roundy@or at shapestrue}}
+\ctikzset{american or shape/pointy/.code={\pgfcirc at roundy@or at shapesfalse}}
+
+\newif\ifpgfcirc at draw@input at leads\pgfcirc at draw@input at leadstrue
+\ctikzset{logic ports draw input leads/.is choice}
+\ctikzset{logic ports draw input leads/true/.code={\pgfcirc at draw@input at leadstrue}}
+\ctikzset{logic ports draw input leads/false/.code={\pgfcirc at draw@input at leadsfalse}}
+\tikzset{input leads/.code={\pgfcirc at draw@input at leadstrue}}
+\tikzset{no input leads/.code={\pgfcirc at draw@input at leadsfalse}}
+
+\newif\ifpgfcirc at draw@output at leads\pgfcirc at draw@output at leadstrue
+\ctikzset{logic ports draw output leads/.is choice}
+\ctikzset{logic ports draw output leads/true/.code={\pgfcirc at draw@output at leadstrue}}
+\ctikzset{logic ports draw output leads/false/.code={\pgfcirc at draw@output at leadsfalse}}
+\tikzset{output leads/.code={\pgfcirc at draw@output at leadstrue}}
+\tikzset{no output leads/.code={\pgfcirc at draw@output at leadsfalse}}
+
+\ctikzset{logic ports draw leads/.is choice}
+\ctikzset{logic ports draw leads/true/.code={\pgfcirc at draw@output at leadstrue\pgfcirc at draw@input at leadstrue}}
+\ctikzset{logic ports draw leads/false/.code={\pgfcirc at draw@output at leadsfalse\pgfcirc at draw@input at leadsfalse}}
+\tikzset{all leads/.code={\pgfcirc at draw@output at leadstrue\pgfcirc at draw@input at leadstrue}}
+\tikzset{no leads/.code={\pgfcirc at draw@output at leadsfalse\pgfcirc at draw@input at leadsfalse}}
+
+% adding a different style of xnor port
+% see https://github.com/circuitikz/circuitikz/issues/467
+\ctikzset{european xnor style/.is choice}
+\ctikzset{european xnor style/default/.code={%
+    \pgfcircdeclareeurologicport{xnor}{$=1$}{\pgf at circ@res at count}{not}}%
+}
+\ctikzset{european xnor style/direct/.code={%
+    \pgfcircdeclareeurologicport{xnor}{$=$}{\pgf at circ@res at count}{}}%
+}
+
+
+% old, legacy keys that should be killed over
+\ctikzset{bipoles/buffer/height/.initial=1}
+\ctikzset{bipoles/buffer/width/.initial=1}
+\ctikzset{bipoles/not port/width/.initial=1}
+\ctikzset{bipoles/not port/height/.initial=.8}
+\ctikzset{bipoles/not port/circle width/.initial=.15}
+
+\ctikzset{tripoles/american and port/width/.initial=1.1}
+\ctikzset{tripoles/american and port/height/.initial=.8}
+\ctikzset{tripoles/american and port/port width/.initial=.7}
+\ctikzset{tripoles/american and port/input height/.initial=.5}
+\ctikzset{tripoles/american nand port/width/.initial=1.1}
+\ctikzset{tripoles/american nand port/height/.initial=.8}
+\ctikzset{tripoles/american nand port/port width/.initial=.7}
+\ctikzset{tripoles/american nand port/circle width/.initial=.15}
+\ctikzset{tripoles/american nand port/input height/.initial=.5}
+\ctikzset{tripoles/american or port/width/.initial=1.1}
+\ctikzset{tripoles/american or port/height/.initial=.8}
+\ctikzset{tripoles/american or port/port width/.initial=.7}
+\ctikzset{tripoles/american or port/input height/.initial=.5}
+\ctikzset{tripoles/american or port/input skip/.initial=.25}
+\ctikzset{tripoles/american or port/aaa/.initial=.6}
+\ctikzset{tripoles/american or port/bbb/.initial=.4}
+\ctikzset{tripoles/american or port/ccc/.initial=.5}
+\ctikzset{tripoles/american or port/ddd/.initial=.0}
+\ctikzset{tripoles/american nor port/width/.initial=1.1}
+\ctikzset{tripoles/american nor port/height/.initial=.8}
+\ctikzset{tripoles/american nor port/port width/.initial=.7}
+\ctikzset{tripoles/american nor port/input height/.initial=.5}
+\ctikzset{tripoles/american nor port/input skip/.initial=.25}
+\ctikzset{tripoles/american nor port/circle width/.initial=.15}
+\ctikzset{tripoles/american nor port/aaa/.initial=.6}
+\ctikzset{tripoles/american nor port/bbb/.initial=.4}
+\ctikzset{tripoles/american nor port/ccc/.initial=.5}
+\ctikzset{tripoles/american nor port/ddd/.initial=.0}
+\ctikzset{tripoles/american xor port/width/.initial=1.1}
+\ctikzset{tripoles/american xor port/height/.initial=.8}
+\ctikzset{tripoles/american xor port/port width/.initial=.7}
+\ctikzset{tripoles/american xor port/input height/.initial=.5}
+\ctikzset{tripoles/american xor port/input skip/.initial=.15}
+\ctikzset{tripoles/american xor port/distance/.initial=.1}
+\ctikzset{tripoles/american xnor port/width/.initial=1.1}
+\ctikzset{tripoles/american xnor port/height/.initial=.8}
+\ctikzset{tripoles/american xnor port/port width/.initial=.7}
+\ctikzset{tripoles/american xnor port/input height/.initial=.5}
+\ctikzset{tripoles/american xnor port/input skip/.initial=.15}
+\ctikzset{tripoles/american xnor port/distance/.initial=.1}
+\ctikzset{tripoles/american xnor port/circle width/.initial=.15}
+\ctikzset{tripoles/american and port/origin/.initial=0.8}
+\ctikzset{tripoles/american and port/inputs/.initial=2}
+% variable number of inputs
+\ctikzset{tripoles/american nand port/origin/.initial=0.8}
+\ctikzset{tripoles/american nand port/inputs/.initial=2}
+\ctikzset{tripoles/american nor port/origin/.initial=0.8}
+\ctikzset{tripoles/american nor port/inputs/.initial=2}
+\ctikzset{tripoles/american nor port/angle/.initial=70}
+\ctikzset{tripoles/american nor port/inner/.initial=0.3}
+\ctikzset{tripoles/american or port/origin/.initial=0.8}
+\ctikzset{tripoles/american or port/inputs/.initial=2}
+\ctikzset{tripoles/american or port/angle/.initial=70}
+\ctikzset{tripoles/american or port/inner/.initial=0.3}
+\ctikzset{tripoles/american xor port/origin/.initial=0.8}
+\ctikzset{tripoles/american xor port/inputs/.initial=2}
+\ctikzset{tripoles/american xor port/angle/.initial=70}
+\ctikzset{tripoles/american xor port/inner/.initial=0.3}
+\ctikzset{tripoles/american xnor port/origin/.initial=0.8}
+\ctikzset{tripoles/american xnor port/inputs/.initial=2}
+\ctikzset{tripoles/american xnor port/angle/.initial=70}
+\ctikzset{tripoles/american xnor port/inner/.initial=0.3}
+
+\ctikzset{tripoles/european and port/width/.initial=1.4}
+\ctikzset{tripoles/european and port/height/.initial=.65}
+\ctikzset{tripoles/european and port/reserved/.initial=.6}
+\ctikzset{tripoles/european and port/input height/.initial=.6}
+\ctikzset{tripoles/european or port/width/.initial=1.4}
+\ctikzset{tripoles/european or port/height/.initial=.65}
+\ctikzset{tripoles/european or port/reserved/.initial=.6}
+\ctikzset{tripoles/european or port/input height/.initial=.6}
+\ctikzset{tripoles/european xor port/width/.initial=1.4}
+\ctikzset{tripoles/european xor port/height/.initial=.65}
+\ctikzset{tripoles/european xor port/reserved/.initial=.6}
+\ctikzset{tripoles/european xor port/input height/.initial=.6}
+\ctikzset{tripoles/european nand port/width/.initial=1.4}
+\ctikzset{tripoles/european nand port/not height/.initial=.3}
+\ctikzset{tripoles/european nand port/not width/.initial=.8}
+\ctikzset{tripoles/european nand port/height/.initial=.65}
+\ctikzset{tripoles/european nand port/reserved/.initial=.6}
+\ctikzset{tripoles/european nand port/input height/.initial=.6}
+\ctikzset{tripoles/european buffer port/width/.initial=1.4}
+\ctikzset{tripoles/european buffer port/not height/.initial=.3}
+\ctikzset{tripoles/european buffer port/not width/.initial=.8}
+\ctikzset{tripoles/european buffer port/height/.initial=.65}
+\ctikzset{tripoles/european buffer port/reserved/.initial=.6}
+\ctikzset{tripoles/european buffer port/input height/.initial=0}
+\ctikzset{tripoles/european not port/width/.initial=1.4}
+\ctikzset{tripoles/european not port/not height/.initial=.3}
+\ctikzset{tripoles/european not port/not width/.initial=.8}
+\ctikzset{tripoles/european not port/height/.initial=.65}
+\ctikzset{tripoles/european not port/reserved/.initial=.6}
+\ctikzset{tripoles/european not port/input height/.initial=0}
+\ctikzset{tripoles/european xnor port/width/.initial=1.4}
+\ctikzset{tripoles/european xnor port/not height/.initial=.3}
+\ctikzset{tripoles/european xnor port/not width/.initial=.8}
+\ctikzset{tripoles/european xnor port/height/.initial=.65}
+\ctikzset{tripoles/european xnor port/reserved/.initial=.6}
+\ctikzset{tripoles/european xnor port/input height/.initial=.6}
+\ctikzset{tripoles/european nor port/width/.initial=1.4}
+\ctikzset{tripoles/european nor port/not height/.initial=.3}
+\ctikzset{tripoles/european nor port/not width/.initial=.8}
+\ctikzset{tripoles/european nor port/height/.initial=.65}
+\ctikzset{tripoles/european nor port/reserved/.initial=.6}
+\ctikzset{tripoles/european nor port/input height/.initial=.6}
+% variable number of inputs
+\ctikzset{tripoles/european and port/origin/.initial=0.8}
+\ctikzset{tripoles/european and port/inputs/.initial=2}
+\ctikzset{tripoles/european nand port/origin/.initial=0.8}
+\ctikzset{tripoles/european nand port/inputs/.initial=2}
+\ctikzset{tripoles/european or port/origin/.initial=0.8}
+\ctikzset{tripoles/european or port/inputs/.initial=2}
+\ctikzset{tripoles/european nor port/origin/.initial=0.8}
+\ctikzset{tripoles/european nor port/inputs/.initial=2}
+\ctikzset{tripoles/european xor port/origin/.initial=0.8}
+\ctikzset{tripoles/european xor port/inputs/.initial=2}
+\ctikzset{tripoles/european xnor port/origin/.initial=0.8}
+\ctikzset{tripoles/european xnor port/inputs/.initial=2}
+\ctikzset{tripoles/european buffer port/origin/.initial=0.8}
+\ctikzset{tripoles/european buffer port/inputs/.initial=1}%
+\ctikzset{tripoles/european not port/origin/.initial=0.8}
+\ctikzset{tripoles/european not port/inputs/.initial=1}%
+%%% parameters that are not used anymore after multi-input
+%%% gates --- left for compatibility of source code.
+\ctikzset{tripoles/american xor port/aaa/.initial=.6}
+\ctikzset{tripoles/american xor port/bbb/.initial=.4}
+\ctikzset{tripoles/american xor port/ccc/.initial=.5}
+\ctikzset{tripoles/american xor port/ddd/.initial=.0}
+\ctikzset{tripoles/american xnor port/aaa/.initial=.6}
+\ctikzset{tripoles/american xnor port/bbb/.initial=.4}
+\ctikzset{tripoles/american xnor port/ccc/.initial=.5}
+\ctikzset{tripoles/american xnor port/ddd/.initial=.0}
+%%>>>
+
+% flip flops and muxdemxes%<<<1
+
+%% flip-flop specific keys (most others are the same as chips)
+
+\ctikzset{multipoles/flipflop/font/.initial=\pgf at circ@font at small}
+\ctikzset{multipoles/flipflop/fontud/.initial=\pgf at circ@font at tiny}
+\ctikzset{multipoles/flipflop/width/.initial=1.2}
+\ctikzset{multipoles/flipflop/pin spacing/.initial=0.6}
+\ctikzset{multipoles/flipflop/clock wedge size/.initial=0.2}
+
+%% muxdemuxes keys
+
+\ctikzset{multipoles/muxdemux/base len/.initial=0.4}
+\ctikzset{multipoles/muxdemux/Lh/.initial=8.0}
+\ctikzset{multipoles/muxdemux/Rh/.initial=6.0}
+\ctikzset{multipoles/muxdemux/w/.initial=3.0}
+\ctikzset{multipoles/muxdemux/inset w/.initial=0.0}
+\ctikzset{multipoles/muxdemux/inset Lh/.initial=0.0}
+\ctikzset{multipoles/muxdemux/inset Rh/.initial=0.0}
+\ctikzset{multipoles/muxdemux/NL/.initial=8}
+\ctikzset{multipoles/muxdemux/NR/.initial=1}
+\ctikzset{multipoles/muxdemux/NB/.initial=3}
+\ctikzset{multipoles/muxdemux/NT/.initial=0}
+\ctikzset{multipoles/muxdemux/square pins/.initial=0}%
+%>>>
+
+% Amplifiers%<<<1
+%
+% switches for op amps
+% changing input polarity
+%
+\newif\ifpgf at circuit@oa at iplusup\pgf at circuit@oa at iplusupfalse
+\pgfkeys{/tikz/noinv input up/.add code={}{\pgf at circuit@oa at iplusuptrue}}
+\ctikzset{noinv input up/.add code={}{\pgf at circuit@oa at iplusuptrue}}
+\pgfkeys{/tikz/noinv input down/.add code={}{\pgf at circuit@oa at iplusupfalse}}
+\ctikzset{noinv input down/.add code={}{\pgf at circuit@oa at iplusupfalse}}
+%
+% changing output polarity (for fully diff objects)
+%
+\newif\ifpgf at circuit@oa at oplusup\pgf at circuit@oa at oplusuptrue
+\pgfkeys{/tikz/noinv output up/.add code={}{\pgf at circuit@oa at oplusuptrue}}
+\ctikzset{noinv output up/.add code={}{\pgf at circuit@oa at oplusuptrue}}
+\pgfkeys{/tikz/noinv output down/.add code={}{\pgf at circuit@oa at oplusupfalse}}
+\ctikzset{noinv output down/.add code={}{\pgf at circuit@oa at oplusupfalse}}
+
+% Operational amplifier
+\ctikzset{tripoles/op amp/width/.initial=1.7}              % Total width
+\ctikzset{tripoles/op amp/port width/.initial=.7}          % Terminals length
+\ctikzset{tripoles/op amp/height/.initial=1.4}             % Total height
+\ctikzset{tripoles/op amp/input height/.initial=.5}        % Input port vertical separation
+\ctikzset{tripoles/op amp/up pos/.initial=.45}             % Top and bottom anchor position
+\ctikzset{tripoles/op amp/font/.initial=\pgf at circ@font at tenbm}  % Absolute font size needed!
+
+% Fully differential operational amplifier
+\ctikzset{tripoles/fd op amp/width/.initial=1.7}           % Total width
+\ctikzset{tripoles/fd op amp/port width/.initial=.7}       % Terminals length
+\ctikzset{tripoles/fd op amp/height/.initial=1.4}          % Total height
+\ctikzset{tripoles/fd op amp/input height/.initial=.5}     % Input port vertical separation
+\ctikzset{tripoles/fd op amp/output height/.initial=.5}    % Output port vertical separation
+\ctikzset{tripoles/fd op amp/up pos/.initial=.45}          % Top and bottom anchor position
+\ctikzset{tripoles/fd op amp/font/.initial=\pgf at circ@font at tenbm}  % Absolute font size needed!
+
+\ctikzset{tripoles/en amp/width/.initial=1.7}
+\ctikzset{tripoles/en amp/port width/.initial=.7}
+\ctikzset{tripoles/en amp/height/.initial=1.6}
+\ctikzset{tripoles/en amp/input height/.initial=.3}
+\ctikzset{tripoles/en amp/up pos/.initial=.45}
+\ctikzset{tripoles/en amp/font/.initial=\pgf at circ@font at tenbm}   % Absolute font size needed!
+\ctikzset{tripoles/en amp/font2/.initial=\pgf at circ@font at twelve}  % Absolute font size needed!
+\ctikzset{tripoles/en amp/text/.initial={$\mathstrut{\triangleright}\,{\infty}$}}
+\tikzset{
+    en amp text/.code = {%
+        \ctikzsetvalof{tripoles/en amp/text}{#1}%
+    },
+    en amp text A/.code = {%
+        \ctikzsetvalof{tripoles/en amp/text}{$\mathstrut{\triangleright}\,\mathrm{A}$}%
+    },
+}
+
+% Transconductance amplifier
+\ctikzset{tripoles/gm amp/width/.initial=1.7}              % Total width
+\ctikzset{tripoles/gm amp/port width/.initial=.7}          % Terminals length
+\ctikzset{tripoles/gm amp/height/.initial=1.4}             % Left side of the trapezoid
+\ctikzset{tripoles/gm amp/height 2/.initial=0.5}           % Right side of the trapezoid
+\ctikzset{tripoles/gm amp/input height/.initial=.5}        % Input port vertical separation
+\ctikzset{tripoles/gm amp/up pos/.initial=.45}             % Top and bottom anchor position
+\ctikzset{tripoles/gm amp/font/.initial=\pgf at circ@font at tenbm}  % Absolute font size needed!
+
+% Instrumentation amplifier
+\ctikzset{tripoles/inst amp/width/.initial=1.7}            % Total width
+\ctikzset{tripoles/inst amp/port width/.initial=.7}        % Terminals length
+\ctikzset{tripoles/inst amp/height/.initial=1.4}           % Left side of the trapezoid
+\ctikzset{tripoles/inst amp/height 2/.initial=0.6}         % Right side of the trapezoid
+\ctikzset{tripoles/inst amp/input height/.initial=.5}      % Input ports vertical separation
+\ctikzset{tripoles/inst amp/up pos/.initial=.4}            % Top and bottom anchor position
+\ctikzset{tripoles/inst amp/refv pos/.initial=.7}          % Top and bottom voltage reference position
+\ctikzset{tripoles/inst amp/font/.initial=\pgf at circ@font at tenbm}  % Absolute font size needed!
+
+% Instrumentation amplifier with differential output
+\ctikzset{tripoles/fd inst amp/width/.initial=1.7}         % Total width
+\ctikzset{tripoles/fd inst amp/port width/.initial=.7}     % Terminals length
+\ctikzset{tripoles/fd inst amp/height/.initial=1.4}        % Left side of the trapezoid
+\ctikzset{tripoles/fd inst amp/height 2/.initial=0.6}      % Right side of the trapezoid
+\ctikzset{tripoles/fd inst amp/input height/.initial=.5}   % Input ports vertical separation
+\ctikzset{tripoles/fd inst amp/output height/.initial=.5}  % Output ports vertical separation
+\ctikzset{tripoles/fd inst amp/up pos/.initial=.4}         % Top and bottom anchor position
+\ctikzset{tripoles/fd inst amp/refv pos/.initial=.7}       % Top and bottom voltage reference position
+\ctikzset{tripoles/fd inst amp/font/.initial=\pgf at circ@font at tenbm}  % Absolute font size needed!
+
+% Instrumentation amplifier with gain resistor terminals
+\ctikzset{tripoles/inst amp ra/width/.initial=2.4}         % Total width
+\ctikzset{tripoles/inst amp ra/port width/.initial=.7}     % Terminals length
+\ctikzset{tripoles/inst amp ra/height/.initial=2.9}        % Left side of the trapezoid
+\ctikzset{tripoles/inst amp ra/height 2/.initial=0.4}      % Right side of the trapezoid
+\ctikzset{tripoles/inst amp ra/input height/.initial=.7}   % Input ports vertical separation
+\ctikzset{tripoles/inst amp ra/up pos/.initial=.4}         % Top and bottom anchor position
+\ctikzset{tripoles/inst amp ra/refv pos/.initial=.7}       % Top and bottom voltage reference position
+\ctikzset{tripoles/inst amp ra/ra pos/.initial=.6}         % Gain resistor terminals vertical separation
+\ctikzset{tripoles/inst amp ra/font/.initial=\pgf at circ@font at tenbm}  % Absolute font size needed!
+
+% Plain amplifier
+\ctikzset{tripoles/plain amp/width/.initial=1.7}           % Total width
+\ctikzset{tripoles/plain amp/port width/.initial=.7}       % Terminals length
+\ctikzset{tripoles/plain amp/height/.initial=1.4}          % Total height
+\ctikzset{tripoles/plain amp/input height/.initial=.5}     % Input ports vertical separation
+\ctikzset{tripoles/plain amp/up pos/.initial=.45}          % Top and bottom anchor position
+
+% changing fonts and symbols of amplifiers
+\ctikzset{amplifiers/symbol font/.code={%
+        \ctikzset{tripoles/inst amp ra/font=#1}%
+        \ctikzset{tripoles/fd inst amp/font=#1}%
+        \ctikzset{tripoles/inst amp/font=#1}%
+        \ctikzset{tripoles/gm amp/font=#1}%
+        \ctikzset{tripoles/en amp/font=#1}%
+        \ctikzset{tripoles/fd op amp/font=#1}%
+        \ctikzset{tripoles/op amp/font=#1}%
+}}
+\ctikzset{amplifiers/plus/.initial={$+$}}
+\ctikzset{amplifiers/minus/.initial={$-$}}
+\tikzset{amp symbol font/.code={%
+        \ctikzset{amplifiers/symbol font={#1}}%
+    }
+}
+\tikzset{amp plus/.code={\ctikzsetvalof{amplifiers/plus}{#1}}}
+\tikzset{amp minus/.code={\ctikzsetvalof{amplifiers/minus}{#1}}}
+\def\pgf at circ@ampli at plus{\ctikzvalof{amplifiers/plus}}
+\def\pgf at circ@ampli at minus{\ctikzvalof{amplifiers/minus}}
+%%>>>
+
+% Transformers%<<<1
+
+\ctikzset{quadpoles/transformer/inner/.initial=0.4}
+\ctikzset{quadpoles/transformer/width/.initial=1.5}
+\ctikzset{quadpoles/transformer/width1/.initial=.4}
+\ctikzset{quadpoles/transformer/height/.initial=1.5}
+\ctikzset{quadpoles/transformer/height1/.initial=.8}
+\ctikzset{quadpoles/transformer core/inner/.initial=0.4}
+\ctikzset{quadpoles/transformer core/width/.initial=1.5}
+\ctikzset{quadpoles/transformer core/height/.initial=1.5}
+\ctikzset{quadpoles/transformer core/core height/.initial=.5}
+\ctikzset{quadpoles/transformer core/core width/.initial=.05}
+\ctikzset{quadpoles/gyrator/inner/.initial=0.4}
+\ctikzset{quadpoles/gyrator/width/.initial=1.5}
+\ctikzset{quadpoles/gyrator/height/.initial=1.5}
+\ctikzset{quadpoles/fourport/width/.initial=1.3}
+\ctikzset{quadpoles/fourport/height/.initial=1.3}
+\ctikzset{quadpoles/coupler/width/.initial=1.3}
+\ctikzset{quadpoles/coupler/height/.initial=1.3}
+\ctikzset{quadpoles/coupler2/width/.initial=1.3}
+\ctikzset{quadpoles/coupler2/height/.initial=1.3}
+
+\ctikzset{/tikz/circuitikz/tripoles/magnetron/width/.initial=1}
+
+\ctikzset{quadpoles style/.is choice}
+\ctikzset{quadpoles style/inward/.code={% default value
+        \ctikzset{quadpoles/transformer/inner=0.4}%
+        \ctikzset{quadpoles/transformer/width=1.5}%
+        \ctikzset{quadpoles/transformer core/inner=0.4}%
+        \ctikzset{quadpoles/transformer core/width=1.5}%
+        \ctikzset{quadpoles/gyrator/inner=0.4}%
+        \ctikzset{quadpoles/gyrator/width=1.5}%
+    }%
+}
+\ctikzset{quadpoles style/inline/.code={% now horizontal baffle
+        \ctikzset{quadpoles/transformer/inner=1}%
+        \ctikzset{quadpoles/transformer/width=0.6}%
+        \ctikzset{quadpoles/transformer core/inner=1}%
+        \ctikzset{quadpoles/transformer core/width=0.6}%
+        \ctikzset{quadpoles/gyrator/inner=1} % FIXME
+        \ctikzset{quadpoles/gyrator/width=0.6}%
+    }%
+}
+%%>>>
+
+% seven segment displays by RGtti%<<<1
+
+\newif\ifpgf at circ@sevenseg at dot
+\newif\ifpgf at circ@sevenseg at box
+\def\pgf at circ@sevenseg at dotstate{empty}
+\ctikzset{seven seg/.is family}
+\ctikzset{seven seg/dot/.is choice}
+% none means no dot, not space for it. Empty means no dot, but space
+\ctikzset{seven seg/dot/none/.code={\pgf at circ@sevenseg at dotfalse}}
+\ctikzset{seven seg/dot/empty/.code={\pgf at circ@sevenseg at dottrue\def\pgf at circ@sevenseg at dotstate{empty}}}
+\ctikzset{seven seg/dot/off/.code={\pgf at circ@sevenseg at dottrue\def\pgf at circ@sevenseg at dotstate{off}}}
+\ctikzset{seven seg/dot/on/.code={\pgf at circ@sevenseg at dottrue\def\pgf at circ@sevenseg at dotstate{on}}}
+%
+\ctikzset{seven seg/width/.initial=0.4}% relative to \pgf at circ@Rlen
+\ctikzset{seven seg/thickness/.initial=4pt}% segment thickness
+\ctikzset{seven seg/segment sep/.initial=0.2pt}% gap between segments
+\ctikzset{seven seg/box sep/.initial=1pt}% external box gap
+\ctikzset{seven seg/color on/.initial=red}% color for segment "on"
+\ctikzset{seven seg/color off/.initial=gray!20!white} % ...and "off"
+\ctikzset{seven seg/box/.is choice}
+\ctikzset{seven seg/box/off/.code={\pgf at circ@sevenseg at boxfalse}}
+\ctikzset{seven seg/box/on/.code={\pgf at circ@sevenseg at boxtrue}}
+
+\ctikzset{seven seg/bits/.initial=0000000}
+
+\ctikzset{seven seg/value/.code={%
+    \edef\@@tmp{#1}%
+    \edef\@@n{0} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1111110}\fi
+    \edef\@@n{1} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0110000}\fi
+    \edef\@@n{2} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1101101}\fi
+    \edef\@@n{3} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1111001}\fi
+    \edef\@@n{4} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0110011}\fi
+    \edef\@@n{5} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1011011}\fi
+    \edef\@@n{6} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1011111}\fi
+    \edef\@@n{7} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1110000}\fi
+    \edef\@@n{8} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1111111}\fi
+    \edef\@@n{9} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1111011}\fi
+    \edef\@@n{10}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1110111}\fi
+    \edef\@@n{11}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0011111}\fi
+    \edef\@@n{12}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001110}\fi
+    \edef\@@n{13}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0111101}\fi
+    \edef\@@n{14}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001111}\fi
+    \edef\@@n{15}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1000111}\fi
+    \edef\@@n{A} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1110111}\fi
+    \edef\@@n{B} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0011111}\fi
+    \edef\@@n{C} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001110}\fi
+    \edef\@@n{D} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0111101}\fi
+    \edef\@@n{E} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001111}\fi
+    \edef\@@n{F} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1000111}\fi
+    \edef\@@n{a} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1110111}\fi
+    \edef\@@n{b} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0011111}\fi
+    \edef\@@n{c} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001110}\fi
+    \edef\@@n{d} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0111101}\fi
+    \edef\@@n{e} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001111}\fi
+    \edef\@@n{f} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1000111}\fi
+    \edef\@@n{-} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0000001}\fi
+}}
+
+\tikzset{%
+    seven segment val/.style args={#1dot#2box#3}{%
+        shape=bare7seg,
+        /tikz/circuitikz/seven seg/value=#1,
+        /tikz/circuitikz/seven seg/dot=#2,
+        /tikz/circuitikz/seven seg/box=#3,
+    },
+    seven segment bits/.style args={#1dot#2box#3}{%
+        shape=bare7seg,
+        /tikz/circuitikz/seven seg/bits=#1,
+        /tikz/circuitikz/seven seg/dot=#2,
+        /tikz/circuitikz/seven seg/box=#3,
+    },
+}
+%%>>>
+
+% Options for twoports and blocks%<<<1
+
+% Option ">" for twoports
+\newif\ifpgf at circuit@inputarrow
+\ctikzset{>/.add code={}{\pgf at circuit@inputarrowtrue}}
+\ctikzset{inputarrow/.is choice}
+\ctikzset{inputarrow/true/.code={\pgf at circuit@inputarrowtrue}}
+\ctikzset{inputarrow/false/.code={\pgf at circuit@inputarrowfalse}}
+
+% Option "boxed" for nodes and twoports
+\newif\ifpgf at circuit@boxed
+\pgfkeys{/tikz/boxed/.add code={}{\pgf at circuit@boxedtrue}}
+\ctikzset{boxed/.add code={}{\pgf at circuit@boxedtrue}}
+\pgfkeys{/tikz/box/.add code={}{\pgf at circuit@boxedtrue}}
+\ctikzset{box/.add code={}{\pgf at circuit@boxedtrue}}
+
+% Option "dashed" for nodes and twoports
+\newif\ifpgf at circuit@dashed
+\pgfkeys{/tikz/dashed/.add code={}{\pgf at circuit@dashedtrue}}
+\ctikzset{dashed/.add code={}{\pgf at circuit@dashedtrue}}%
+%>>>
+
+% Chips and Rotary switches (multipoles) %<<<1
+%
+\ctikzset{multipoles/thickness/.initial=2}
+\ctikzset{multipoles/font/.initial=\pgf at circ@font at tiny}
+% DIP (dual in line package) chips
+\ctikzset{multipoles/dipchip/width/.initial=1.2}
+\ctikzset{multipoles/dipchip/num pins/.initial=8}
+\ctikzset{multipoles/dipchip/pin spacing/.initial=0.4}
+\pgfkeys{/tikz/num pins/.add code={}{\ctikzset{multipoles/dipchip/num pins=#1}}}
+% QFP (quad flat package) chips
+\ctikzset{multipoles/qfpchip/num pins/.initial=8}
+\ctikzset{multipoles/qfpchip/pin spacing/.initial=0.4}
+\pgfkeys{/tikz/num pins/.add code={}{\ctikzset{multipoles/qfpchip/num pins=#1}}}
+% chip numbers
+\newif\ifpgf at circuit@chip at shownumbers\pgf at circuit@chip at shownumberstrue
+\pgfkeys{/tikz/show numbers/.add code={}{\pgf at circuit@chip at shownumberstrue}}
+\ctikzset{show numbers/.add code={}{\pgf at circuit@chip at shownumberstrue}}
+\pgfkeys{/tikz/hide numbers/.add code={}{\pgf at circuit@chip at shownumbersfalse}}
+\ctikzset{hide numbers/.add code={}{\pgf at circuit@chip at shownumbersfalse}}
+\newif\ifpgf at circuit@chip at straightnumbers\pgf at circuit@chip at straightnumberstrue
+\pgfkeys{/tikz/straight numbers/.add code={}{\pgf at circuit@chip at straightnumberstrue}}
+\ctikzset{straight numbers/.add code={}{\pgf at circuit@chip at straightnumberstrue}}
+\pgfkeys{/tikz/rotated numbers/.add code={}{\pgf at circuit@chip at straightnumbersfalse}}
+\ctikzset{rotated numbers/.add code={}{\pgf at circuit@chip at straightnumbersfalse}}
+% external chip pins
+\ctikzset{multipoles/external pins thickness/.initial=1}
+\ctikzset{multipoles/external pins width/.initial=0.2}
+\ctikzset{multipoles/external pad fraction/.initial=0}
+\pgfkeys{/tikz/external pins width/.add code={}{\ctikzset{multipoles/external pins width=#1}}}
+\pgfkeys{/tikz/external pad fraction/.add code={}{\ctikzset{multipoles/external pad fraction=#1}}}
+% topmarks
+\newif\ifpgf at circuit@chip at topmark\pgf at circuit@chip at topmarktrue
+\pgfkeys{/tikz/topmark/.add code={}{\pgf at circuit@chip at topmarktrue}}
+\ctikzset{topmark/.add code={}{\pgf at circuit@chip at topmarktrue}}
+\pgfkeys{/tikz/no topmark/.add code={}{\pgf at circuit@chip at topmarkfalse}}
+\ctikzset{no topmark/.add code={}{\pgf at circuit@chip at topmarkfalse}}
+
+% rotary switch by Romano
+\ctikzset{multipoles/rotary/thickness/.initial=1}
+\ctikzset{multipoles/rotary/shape/.initial=ocirc}
+\ctikzset{multipoles/rotary/channels/.initial=5}
+\ctikzset{multipoles/rotary/angle/.initial=60}
+\ctikzset{multipoles/rotary/wiper/.initial=20}
+\ctikzset{multipoles/rotary/arrow/.is choice}
+\newif\ifpgf at circ@rotaryarrow\pgf at circ@rotaryarrowfalse
+\newif\ifpgf at circ@rotaryarrow at cw\pgf at circ@rotaryarrow at cwfalse
+\newif\ifpgf at circ@rotaryarrow at ccw\pgf at circ@rotaryarrow at ccwfalse
+\ctikzset{multipoles/rotary/arrow/none/.code={\pgf at circ@rotaryarrowfalse\pgf at circ@rotaryarrow at cwfalse\pgf at circ@rotaryarrow at ccwfalse}}
+\ctikzset{multipoles/rotary/arrow/both/.code={\pgf at circ@rotaryarrowtrue\pgf at circ@rotaryarrow at cwtrue\pgf at circ@rotaryarrow at ccwtrue}}
+\ctikzset{multipoles/rotary/arrow/cw/.code={\pgf at circ@rotaryarrowtrue\pgf at circ@rotaryarrow at cwtrue\pgf at circ@rotaryarrow at ccwfalse}}
+\ctikzset{multipoles/rotary/arrow/ccw/.code={\pgf at circ@rotaryarrowtrue\pgf at circ@rotaryarrow at cwfalse\pgf at circ@rotaryarrow at ccwtrue}}
+
+\tikzset{%
+    rotary switch/.style args={#1in#2wiper#3}{%
+        shape=rotaryswitch,
+        /tikz/circuitikz/multipoles/rotary/channels=#1,
+        /tikz/circuitikz/multipoles/rotary/angle=#2,
+        /tikz/circuitikz/multipoles/rotary/wiper=#3,
+    },
+    rotary switch -/.style args={#1in#2wiper#3}{
+        rotary switch=#1 in #2 wiper #3,
+        /tikz/circuitikz/multipoles/rotary/arrow=none,
+    },
+    rotary switch <-/.style args={#1in#2wiper#3}{
+        rotary switch=#1 in #2 wiper #3,
+        /tikz/circuitikz/multipoles/rotary/arrow=ccw,
+    },
+    rotary switch ->/.style args={#1in#2wiper#3}{
+        rotary switch=#1 in #2 wiper #3,
+        /tikz/circuitikz/multipoles/rotary/arrow=cw,
+    },
+    rotary switch <->/.style args={#1in#2wiper#3}{
+        rotary switch=#1 in #2 wiper #3,
+        /tikz/circuitikz/multipoles/rotary/arrow=both,
+    },
+    % Notice that these should be the same as the initial values of the keys
+    rotary switch/.default={5 in 60 wiper 20},
+    rotary switch -/.default={5 in 60 wiper 20},
+    rotary switch <-/.default={5 in 60 wiper 20},
+    rotary switch ->/.default={5 in 60 wiper 20},
+    rotary switch <->/.default={5 in 60 wiper 20},
+}
+%%>>>
+
+% %Mechanical section%<<<1
+\ctikzset{/tikz/circuitikz/tripoles/elmech/height/.initial=.8}
+\ctikzset{/tikz/circuitikz/tripoles/elmech/width/.initial=.6}
+\ctikzset{bipoles/spring/height/.initial=.5}
+\ctikzset{bipoles/spring/width/.initial=.5}
+\ctikzset{bipoles/inerter/height/.initial=.7}
+\ctikzset{bipoles/inerter/width/.initial=.175}
+\ctikzset{bipoles/mass/height/.initial=.55}
+\ctikzset{bipoles/mass/box height/.initial=.4}
+\ctikzset{bipoles/mass/width/.initial=.5}
+
+\ctikzset{bipoles/damper/height/.initial=.35}
+\ctikzset{bipoles/damper/length/.initial=.3}
+\ctikzset{bipoles/damper/width/.initial=.4}
+%%>>>
+
+% powerelectronic blocks%<<<1
+\ctikzset{bipoles/sacdc/width/.initial=.7}
+\ctikzset{bipoles/sdcac/width/.initial=.7}
+\ctikzset{bipoles/tacdc/width/.initial=.7}
+\ctikzset{bipoles/tdcac/width/.initial=.7}
+\ctikzset{quadpoles/gridnode/width/.initial=.7} %not sure if quadpole?
+%>>>
+
+% voltage and current options%<<<1
+%
+\ctikzset{current arrow scale/.initial=16}
+\ctikzset{current/distance/.initial = .5}
+
+\newif\ifpgf at circuit@europeancurrent
+\newif\ifpgf at circuit@europeanvoltage
+\newif\ifpgf at circuit@bipole at voltage@straight
+\newif\ifpgf at circuit@bipole at voltage@raised
+
+\ctikzset{voltage/.is choice}
+%
+% straight is expected to be a subset of european, so disable it in american style
+%
+\ctikzset{voltage/american/.code = {%
+    \pgf at circuit@europeanvoltagefalse
+    \pgf at circuit@bipole at voltage@straightfalse
+    \pgf at circuit@bipole at voltage@raisedfalse
+}}
+\ctikzset{voltage/raised/.code = {%
+    \pgf at circuit@europeanvoltagefalse
+    \pgf at circuit@bipole at voltage@straightfalse
+    \pgf at circuit@bipole at voltage@raisedtrue
+}}
+\ctikzset{voltage/european/.code = {%
+    \pgf at circuit@europeanvoltagetrue
+    \pgf at circuit@bipole at voltage@straightfalse
+    \pgf at circuit@bipole at voltage@raisedfalse
+}}
+\ctikzset{voltage/straight/.code = {%
+    \pgf at circuit@europeanvoltagetrue
+    \pgf at circuit@bipole at voltage@straighttrue
+    \pgf at circuit@bipole at voltage@raisedfalse
+}}
+\ctikzset{voltage/curved/.code = {%
+    \pgf at circuit@europeanvoltagetrue
+    \pgf at circuit@bipole at voltage@straightfalse
+    \pgf at circuit@bipole at voltage@raisedfalse
+}}
+% are these used?
+\ctikzset{current/.is choice}
+\ctikzset{current/american/.code = \pgf at circuit@europeancurrentfalse}
+\ctikzset{current/european/.code = \pgf at circuit@europeancurrenttrue}
+
+% this is left for backward compatibility...
+\ctikzset{straight/.is choice}
+\ctikzset{straight/true/.code = {\pgf at circuit@bipole at voltage@straighttrue}}
+\ctikzset{straight/false/.code = {\pgf at circuit@bipole at voltage@straightfalse}}
+\ctikzset{bipole/straight/.is if=pgf at circuit@bipole at voltage@straight}
+%
+% voltage is used also to set parameters, apart for the /.is choice
+% above. I hope it is ok --- would be a mess otherwise
+%
+\ctikzset{voltage/shift/.initial=0.0} % shift form the cable of voltage symbols
+\ctikzset{voltage shift/.style={\circuitikzbasekey/voltage/shift=#1}}
+\tikzset{voltage shift/.style={\circuitikzbasekey/voltage/shift=#1}}
+%
+% keys for exporting voltage, current, flow anchors
+%
+\newif\ifpgfcirc at has@v\pgfcirc at has@vfalse
+\newif\ifpgfcirc at has@f\pgfcirc at has@ffalse
+\newif\ifpgfcirc at has@i\pgfcirc at has@ifalse
+\def\ctikzgetanchor#1#2{\csname pgfcirc@#1-#2-anchor\endcsname}
+\def\ctikzgetdirection#1{\csname pgfcirc@#1-direction\endcsname}
+%
+% shaping the +/- sign, see pgfcircvoltage.tex
+\ctikzset{voltage/american font/.initial={}}
+\ctikzset{voltage/american plus/.initial={$+$}}
+\ctikzset{voltage/american minus/.initial={$-$}}
+% here we start the voltage adjustments for special components.
+% default values:
+%
+% this is the distance of the "point" marking the voltage along the line
+% 0.0 is on the external nodes of the to path
+% 1.0 is cramped on the object
+% this can be overriden component by component
+\ctikzset{voltage/distance from node/.initial=.5}% pos, 0->1
+%
+% this is the distance from the line (perpendicular to) where the voltage is drawn.
+% It is global, and not adjustable by component (use the "label distance" or locally
+% if you need it)
+\ctikzset{voltage/distance from line/.initial=.08}% in \pgf at circ@scaled at Rlen units
+%
+% bend paramenters for european arc. You can override them component-based
+\ctikzset{voltage/bump b/.initial=1.5}
+%
+% generator voltages symbols or arrows (always straight) are put along the
+% 60 ... 120 angles of the symbol (don't ask why). The distance here is on the
+% center..angle line. It's called bump a because I don't know...
+%
+\ctikzset{voltage/bump a/.initial=1.2}
+%
+% these are the label distances FROM the drawings.
+% You can override them component by component.
+\ctikzset{voltage/european label distance/.initial=1.4}
+\ctikzset{voltage/straight label distance/.initial=1.4}
+\ctikzset{voltage/american label distance/.initial=1.4}
+% american open voltage adjusting
+%
+\newif\ifpgf at adjust@open at voltage\pgf at adjust@open at voltagetrue
+\ctikzset{open voltage position/.is choice}
+\ctikzset{open voltage position/center/.code={\pgf at adjust@open at voltagetrue}}
+\ctikzset{open voltage position/legacy/.code={\pgf at adjust@open at voltagefalse}}
+% bad names, kept for compatibility, don't use
+\ctikzset{american open voltage/.is choice}
+\ctikzset{american open voltage/center/.code={\pgf at adjust@open at voltagetrue}}
+\ctikzset{american open voltage/legacy/.code={\pgf at adjust@open at voltagefalse}}
+%
+% voltage and current styles
+%
+\tikzset{american currents/.style = {\circuitikzbasekey/current = american}}
+\tikzset{european currents/.style = {\circuitikzbasekey/current = european}}
+\tikzset{american voltages/.style = {\circuitikzbasekey/voltage = american}}
+\tikzset{european voltages/.style = {\circuitikzbasekey/voltage = european}}
+\tikzset{straight voltages/.style = {\circuitikzbasekey/voltage = straight}}
+\tikzset{raised voltages/.style = {\circuitikzbasekey/voltage = raised}}
+%%>>>
+
+% special cases for voltage positions%<<<1
+% the KIND is the node name without SHAPE
+% See the definition above for meaning
+% if bipoles/KIND/voltage/straight label distance is not defined, it uses the height
+% if bipoles/KIND/voltage/additional shift is not defined, it is 0 (extra distance)
+%
+\ctikzset{bipoles/generic/voltage/distance from node/.initial=0.4}
+\ctikzset{bipoles/generic/voltage/bump b/.initial=2}
+%
+\ctikzset{bipoles/ageneric/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/ageneric/voltage/bump b/.initial=2}
+%
+\ctikzset{bipoles/fullgeneric/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/fullgeneric/voltage/bump b/.initial=2}
+%
+\ctikzset{bipoles/memristor/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/memristor/voltage/bump b/.initial=2}
+%
+\ctikzset{bipoles/tline/voltage/bump b/.initial=2.4}
+%
+\ctikzset{bipoles/varistor/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/varistor/voltage/american label distance/.initial=1.8}
+%
+\ctikzset{bipoles/photoresistor/voltage/bump b/.initial=1.6}
+%
+\ctikzset{bipoles/thermistor/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/thermistor/voltage/european label distance/.initial=0.8}
+\ctikzset{bipoles/thermistorntc/voltage/bump b/.initial=1.6}
+\ctikzset{bipoles/thermistorntc/voltage/european label distance/.initial=0.8}
+\ctikzset{bipoles/thermistorptc/voltage/bump b/.initial=1.6}
+\ctikzset{bipoles/thermistorptc/voltage/european label distance/.initial=0.8}
+%
+\ctikzset{bipoles/ccapacitor/voltage/bump b/.initial=2.2}
+%
+\ctikzset{bipoles/emptyzzdiode/voltage/bump b/.initial=2.5}
+\ctikzset{bipoles/emptyzzdiode/voltage/european label distance/.initial=1.0}
+\ctikzset{bipoles/fullzzdiode/voltage/bump b/.initial=2.5}
+\ctikzset{bipoles/fullzzdiode/voltage/european label distance/.initial=1.0}
+\ctikzset{bipoles/emptythyristor/voltage/bump b/.initial=2.0}
+\ctikzset{bipoles/emptythyristor/voltage/european label distance/.initial=1.2}
+\ctikzset{bipoles/fullthyristor/voltage/bump b/.initial=2.0}
+\ctikzset{bipoles/fullthyristor/voltage/european label distance/.initial=1.2}
+\ctikzset{bipoles/emptytriac/voltage/bump b/.initial=1.8}
+\ctikzset{bipoles/emptytriac/voltage/european label distance/.initial=0.8}
+\ctikzset{bipoles/fulltriac/voltage/bump b/.initial=1.8}
+\ctikzset{bipoles/fulltriac/voltage/european label distance/.initial=0.8}
+%
+\ctikzset{bipoles/short/voltage/american label distance/.initial=2.8}
+\ctikzset{bipoles/open/voltage/distance from node/.initial=0.3}
+%
+\ctikzset{bipoles/battery/voltage/bump a/.initial=1.4}
+\ctikzset{bipoles/vsourceAM/voltage/american label distance/.initial=1.2}
+\ctikzset{bipoles/cvsourceAM/voltage/american label distance/.initial=1.2}
+%%>>>
+
+% vim: set fdm=marker fmr=%<<<,%>>>:
+%%%---------- close: tex/pgfcirc.defines
+%%%%%%%%%%% Springe nach tex/pgfcircutils
+%%%---------- open: tex/pgfcircutils.tex
+% Copyright 2018-2020 by Romano Giannetti
+% Copyright 2015-2020 by Stefan Lindner
+% Copyright 2013-2020 by Stefan Erhardt
+% Copyright 2007-2020 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+\def\pgf at circ@handleSI#1{
+    \noexpandarg
+    \def\pgf at temp{}
+    \StrBetween{#1}{<}{>}[\pgf at circ@handleSI at unit]
+    \StrLen{\pgf at circ@handleSI at unit}[\pgf at circ@handleSI at unit@len]
+
+    \ifnum\pgf at circ@handleSI at unit@len=0
+    \pgf at circ@siunitx at resfalse
+    \else
+    \IfEndWith{#1}{>}{
+        \pgf at circ@siunitx at restrue
+        \noexpandarg
+        \StrBefore{#1}{<}[\pgf at circ@handleSI at val]
+        %\typeout{si |#1|}
+        }{
+        \pgf at circ@siunitx at resfalse
+        %\typeout{no si |#1|}
+    }
+\fi
+}
+
+\def\pgf at circ@ifkeyempty#1{
+    \pgfextra{
+        \ctikzset{#1/.get=\pgf at circ@temp}
+        \edef\pgf at temp{}
+    }
+    \ifx\pgf at circ@temp\pgf at temp
+    }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%    Math routines
+
+\def\pgf at circ@stripdecimals#1.#2\pgf at nil{#1}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% useful commands
+
+\ifpgfutil at format@is at latex
+    %% flipping text
+    \def\ctikzflipx#1{\scalebox{-1}[1]{#1}}
+    \def\ctikzflipy#1{\scalebox{1}[-1]{#1}}
+    \def\ctikzflipxy#1{\scalebox{-1}[-1]{#1}}
+    % text mode overbar
+    % Thanks to @egreg https://tex.stackexchange.com/a/24133/38080
+    \def\ctikztextnot#1{$\overline{\hbox{#1}}\m at th$}
+\else\ifpgfutil at format@is at plain
+    % text mode overbar
+    % Thanks to @egreg https://tex.stackexchange.com/a/24133/38080
+    \def\ctikztextnot#1{$\overline{\hbox{#1}}$}
+\else\ifpgfutil at format@is at context
+    % text mode overbar
+    % Thanks to @egreg https://tex.stackexchange.com/a/24133/38080
+    \def\ctikztextnot#1{$\overline{\hbox{#1}}$}
+\fi\fi\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% switch to use fpu in reciprocal scale transformations
+%%
+%% this code has been contributed by Schrödinger's cat
+%% https://tex.stackexchange.com/a/529159/38080
+%%
+%% Use the official key to use the fpu if installed, see
+%% https://github.com/pgf-tikz/pgf/issues/861
+%%
+%% Thanks to "muzimuzhi Z" https://tex.stackexchange.com/a/547085/38080
+%%
+\pgfkeysifdefined{/pgf/fpu/install only/. at cmd}{%
+    \pgfqkeys{/pgf}{use fpu reciprocal/.code={\pgfkeys{/pgf/fpu/install only={reciprocal}}}}%
+    }{%
+    \pgfqkeys{/pgf}{use fpu reciprocal/.code={%
+    \def\pgfmathreciprocal@##1{%
+        \begingroup
+        \pgfkeys{/pgf/fpu=true,/pgf/fpu/output format=fixed}%
+        \pgfmathparse{1/##1}%
+        \pgfmath at smuggleone\pgfmathresult
+        \endgroup
+    }}}%
+}
+
+%%%---------- close: tex/pgfcircutils
+
+%%%%%%%%%%% Springe nach tex/pgfcircshapes
+%%%---------- open: tex/pgfcircshapes.tex
+% Copyright 2018-2020 by Romano Giannetti
+% Copyright 2015-2020 by Stefan Lindner
+% Copyright 2013-2020 by Stefan Erhardt
+% Copyright 2007-2020 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%  Other shapes
+
+%% Nothing
+
+\pgfdeclareshape{emptyshape}{
+    \savedanchor{\northeast}{%
+        \pgf at x=.5\wd\pgfnodeparttextbox%
+        \pgf at y=.5\ht\pgfnodeparttextbox%
+    }
+    \anchor{north}{\northeast\pgf at x=0cm\relax}
+    \anchor{east}{\northeast\pgf at y=0cm\relax}
+    \anchor{south}{\northeast\pgf at y=-\pgf at y \pgf at x=0cm\relax}
+    \anchor{west}{\northeast\pgf at y=0cm\pgf at x=-\pgf at x}
+    \anchor{north east}{\northeast}
+    \anchor{north west}{\northeast\pgf at x=-\pgf at x}
+    \anchor{south east}{\northeast\pgf at y=-\pgf at y}
+    \anchor{south west}{\northeast\pgf at y=-\pgf at y\pgf at x=-\pgf at x}
+    \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+    \anchor{center}{
+        \pgfpointorigin
+    }
+}
+%
+% Provision for changing opacity. Only expert use, see the manual.
+%
+\ctikzset{poles/open fill opacity/.initial=1.0}% better not touch it
+\tikzset{open poles opacity/.code={%
+        \ctikzset{poles/open fill opacity=#1}%
+}}
+\ctikzset{poles/full fill opacity/.initial=1.0}% better not touch it
+\tikzset{full poles opacity/.code={%
+        \ctikzset{poles/full fill opacity=#1}%
+}}
+
+%
+% Provision for changing default background
+%
+
+\ctikzset{open poles fill/.initial={white}}
+
+%% Full terminal
+
+\pgfdeclareshape{circ}{
+    \anchor{center}{
+        \pgfpointorigin
+    }
+    \savedanchor\northwest{%
+        \pgf at y=\ctikzvalof{nodes width}\pgf at circ@Rlen
+        \pgf at x=-\pgf at y
+    }
+    \anchor{center}{ \pgf at y=0pt \pgf at x=0pt }
+    \anchor{east}{ \northwest \pgf at y=0pt \pgf at x=-\pgf at x  }
+    \anchor{e}{ \northwest \pgf at y=0pt \pgf at x=-\pgf at x  }
+    \anchor{west}{ \northwest \pgf at y=0pt }
+    \anchor{w}{ \northwest \pgf at y=0pt }
+    \anchor{south}{ \northwest \pgf at x=0pt \pgf at y=-\pgf at y }
+    \anchor{s}{ \northwest \pgf at x=0pt \pgf at y=-\pgf at y }
+    \anchor{north}{ \northwest \pgf at x=0pt }
+    \anchor{n}{ \northwest \pgf at x=0pt }
+    \anchor{south west}{ \northwest \pgf at y=-\pgf at y }
+    \anchor{north east}{ \northwest \pgf at x=-\pgf at x }
+    \anchor{north west}{ \northwest }
+    \anchor{south east}{ \northwest \pgf at x=-\pgf at x \pgf at y=-\pgf at y }
+    \anchorborder{
+        \pgf at circ@res at left=\pgf at x
+        \pgf at circ@res at up=\pgf at y
+        \pgfpointborderellipse{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}
+        }{\pgfpoint{\ctikzvalof{nodes width}*\pgf at circ@Rlen}{\ctikzvalof{nodes width}*\pgf at circ@Rlen}}
+    }
+    \behindforegroundpath{
+
+        \pgfscope
+            \pgfpathcircle{\pgfpointorigin}{\ctikzvalof{nodes width}*\pgf at circ@Rlen}
+            \pgfsetcolor{\ctikzvalof{color}}
+            \pgfsetfillopacity{\ctikzvalof{poles/full fill opacity}}% normally 1.0
+            \pgfusepath{draw,fill}
+        \endpgfscope
+
+    }
+}
+
+%% Empty round terminal
+
+\pgfdeclareshape{ocirc}{
+    \anchor{center}{
+        \pgfpointorigin
+    }
+    \savedanchor\northwest{%
+        \pgf at y=\ctikzvalof{nodes width}\pgf at circ@Rlen
+        \pgf at x=-\pgf at y
+    }
+    \anchor{center}{ \pgf at y=0pt \pgf at x=0pt }
+    \anchor{east}{ \northwest \pgf at y=0pt \pgf at x=-\pgf at x  }
+    \anchor{e}{ \northwest \pgf at y=0pt \pgf at x=-\pgf at x  }
+    \anchor{west}{ \northwest \pgf at y=0pt }
+    \anchor{w}{ \northwest \pgf at y=0pt }
+    \anchor{south}{ \northwest \pgf at x=0pt \pgf at y=-\pgf at y }
+    \anchor{s}{ \northwest \pgf at x=0pt \pgf at y=-\pgf at y }
+    \anchor{north}{ \northwest \pgf at x=0pt }
+    \anchor{n}{ \northwest \pgf at x=0pt }
+    \anchor{south west}{ \northwest \pgf at y=-\pgf at y }
+    \anchor{north east}{ \northwest \pgf at x=-\pgf at x }
+    \anchor{north west}{ \northwest }
+    \anchor{south east}{ \northwest \pgf at x=-\pgf at x \pgf at y=-\pgf at y }
+    \anchorborder{
+        \pgf at circ@res at left=\pgf at x
+        \pgf at circ@res at up=\pgf at y
+        \pgfpointborderellipse{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}
+        }{\pgfpoint{\ctikzvalof{nodes width}*\pgf at circ@Rlen}{\ctikzvalof{nodes width}*\pgf at circ@Rlen}}
+    }
+
+    \behindforegroundpath{
+
+        \pgfscope
+            \pgfpathcircle{\pgfpointorigin}{\ctikzvalof{nodes width}*\pgf at circ@Rlen}
+            \pgfsetcolor{\ctikzvalof{color}}
+            \ifx\tikz at fillcolor\pgfutil at empty
+                % set the default fill color to white
+                \pgfsetfillcolor{\ctikzvalof{open poles fill}}
+                % ...but override it if the class is defined!
+                % note that this element has no class, but will inherit it when used
+                % into another component
+                \pgf at circ@setifdefinedfill{draw, fill}{draw, fill}
+            \else
+                \pgfsetfillcolor{\tikz at fillcolor}
+            \fi
+            \pgfsetfillopacity{\ctikzvalof{poles/open fill opacity}}% normally 1.0
+            \pgfusepath{draw,fill}
+        \endpgfscope
+
+    }
+}
+
+%% Diamond terminal
+
+\pgfdeclareshape{diamondpole}{
+    \anchor{center}{
+        \pgfpointorigin
+    }
+    \savedanchor\northwest{%
+        \pgfmathsetlength{\pgf at y}{sqrt(2)*\ctikzvalof{nodes width}*\pgf at circ@Rlen}
+        \pgf at x=-\pgf at y
+    }
+    \anchor{center}{ \pgf at y=0pt \pgf at x=0pt }
+    \anchor{east}{ \northwest \pgf at y=0pt \pgf at x=-\pgf at x  }
+    \anchor{e}{ \northwest \pgf at y=0pt \pgf at x=-\pgf at x  }
+    \anchor{west}{ \northwest \pgf at y=0pt }
+    \anchor{w}{ \northwest \pgf at y=0pt }
+    \anchor{south}{ \northwest \pgf at x=0pt \pgf at y=-\pgf at y }
+    \anchor{s}{ \northwest \pgf at x=0pt \pgf at y=-\pgf at y }
+    \anchor{north}{ \northwest \pgf at x=0pt }
+    \anchor{n}{ \northwest \pgf at x=0pt }
+    \anchor{south west}{ \northwest \pgf at y=-\pgf at y }
+    \anchor{north east}{ \northwest \pgf at x=-\pgf at x }
+    \anchor{north west}{ \northwest }
+    \anchor{south east}{ \northwest \pgf at x=-\pgf at x \pgf at y=-\pgf at y }
+    \anchorborder{
+        % \typeout{IN\space X:\the\pgf at x\space Y:\the\pgf at y}
+        \pgfmathsetmacro{\@@switchx}{ifthenelse(\pgf at x>0,1,-1)}
+        \pgfmathsetmacro{\@@switchy}{ifthenelse(\pgf at y>0,1,-1)}
+        \pgfmathsetlength{\pgf at xa}{abs(\pgf at x)}
+        \pgfmathsetlength{\pgf at ya}{abs(\pgf at y)}
+        \pgfextracty{\pgf at circ@res at up}{\northwest}
+        % \typeout{MID\space X:\the\pgf at xa\space Y:\the\pgf at ya\space L:\the\pgf at circ@res at up}
+        % \typeout{MID\space SX:\@@switchx\space SY:\@@switchy}
+        \pgfpointintersectionoflines
+            {\pgfpointorigin}{\pgfqpoint{\pgf at xa}{\pgf at ya}}
+            {\pgfqpoint{0pt}{\pgf at circ@res at up}}{\pgfqpoint{\pgf at circ@res at up}{0pt}}
+        % \typeout{CROSS \space X:\the\pgf at x\space Y:\the\pgf at y}
+        \pgf at x=\@@switchx\pgf at x
+        \pgf at y=\@@switchy\pgf at y
+    }
+    \behindforegroundpath{
+        \pgfscope
+            \pgfmathsetlength{\pgf at circ@res at temp}{\ctikzvalof{nodes width}*\pgf at circ@Rlen}
+            \pgftransformrotate{45}
+            \pgfpathrectanglecorners
+            {\pgfpoint{-\pgf at circ@res at temp}{-\pgf at circ@res at temp}}
+            {\pgfpoint{\pgf at circ@res at temp}{\pgf at circ@res at temp}}
+            \pgfsetcolor{\ctikzvalof{color}}
+            \pgfsetfillopacity{\ctikzvalof{poles/full fill opacity}}% normally 1.0
+            \pgfusepath{draw,fill}
+        \endpgfscope
+    }
+}
+
+%% Diamond terminal, unfilled
+
+\pgfdeclareshape{odiamondpole}{
+    \anchor{center}{
+        \pgfpointorigin
+    }
+    \savedanchor\northwest{%
+        \pgfmathsetlength{\pgf at y}{sqrt(2)*\ctikzvalof{nodes width}*\pgf at circ@Rlen}
+        \pgf at x=-\pgf at y
+    }
+    \anchor{center}{ \pgf at y=0pt \pgf at x=0pt }
+    \anchor{east}{ \northwest \pgf at y=0pt \pgf at x=-\pgf at x  }
+    \anchor{e}{ \northwest \pgf at y=0pt \pgf at x=-\pgf at x  }
+    \anchor{west}{ \northwest \pgf at y=0pt }
+    \anchor{w}{ \northwest \pgf at y=0pt }
+    \anchor{south}{ \northwest \pgf at x=0pt \pgf at y=-\pgf at y }
+    \anchor{s}{ \northwest \pgf at x=0pt \pgf at y=-\pgf at y }
+    \anchor{north}{ \northwest \pgf at x=0pt }
+    \anchor{n}{ \northwest \pgf at x=0pt }
+    \anchor{south west}{ \northwest \pgf at y=-\pgf at y }
+    \anchor{north east}{ \northwest \pgf at x=-\pgf at x }
+    \anchor{north west}{ \northwest }
+    \anchor{south east}{ \northwest \pgf at x=-\pgf at x \pgf at y=-\pgf at y }
+    \anchorborder{
+        % \typeout{IN\space X:\the\pgf at x\space Y:\the\pgf at y}
+        \pgfmathsetmacro{\@@switchx}{ifthenelse(\pgf at x>0,1,-1)}
+        \pgfmathsetmacro{\@@switchy}{ifthenelse(\pgf at y>0,1,-1)}
+        \pgfmathsetlength{\pgf at xa}{abs(\pgf at x)}
+        \pgfmathsetlength{\pgf at ya}{abs(\pgf at y)}
+        \pgfextracty{\pgf at circ@res at up}{\northwest}
+        % \typeout{MID\space X:\the\pgf at xa\space Y:\the\pgf at ya\space L:\the\pgf at circ@res at up}
+        % \typeout{MID\space SX:\@@switchx\space SY:\@@switchy}
+        \pgfpointintersectionoflines
+            {\pgfpointorigin}{\pgfqpoint{\pgf at xa}{\pgf at ya}}
+            {\pgfqpoint{0pt}{\pgf at circ@res at up}}{\pgfqpoint{\pgf at circ@res at up}{0pt}}
+        % \typeout{CROSS \space X:\the\pgf at x\space Y:\the\pgf at y}
+        \pgf at x=\@@switchx\pgf at x
+        \pgf at y=\@@switchy\pgf at y
+    }
+    \behindforegroundpath{
+        \pgfscope
+            \pgfmathsetlength{\pgf at circ@res at temp}{\ctikzvalof{nodes width}*\pgf at circ@Rlen}
+            \pgftransformrotate{45}
+            \pgfpathrectanglecorners
+            {\pgfpoint{-\pgf at circ@res at temp}{-\pgf at circ@res at temp}}
+            {\pgfpoint{\pgf at circ@res at temp}{\pgf at circ@res at temp}}
+            \pgfsetcolor{\ctikzvalof{color}}
+            \ifx\tikz at fillcolor\pgfutil at empty
+                % set the default fill color to white
+                \pgfsetfillcolor{\ctikzvalof{open poles fill}}
+                % ...but override it if the class is defined!
+                % note that this element has no class, but will inherit it when used
+                % into another component
+                \pgf at circ@setifdefinedfill{draw, fill}{draw, fill}
+            \else
+                \pgfsetfillcolor{\tikz at fillcolor}
+            \fi
+            \pgfsetfillopacity{\ctikzvalof{poles/open fill opacity}}% normally 1.0
+            \pgfusepath{draw,fill}
+        \endpgfscope
+    }
+}
+
+%% square terminal, filled
+
+\pgfdeclareshape{squarepole}{
+    \anchor{center}{
+        \pgfpointorigin
+    }
+    \savedanchor\northwest{%
+        \pgfmathsetlength{\pgf at y}{\ctikzvalof{nodes width}*\pgf at circ@Rlen}
+        \pgf at x=-\pgf at y
+    }
+    \anchor{center}{ \pgf at y=0pt \pgf at x=0pt }
+    \anchor{east}{ \northwest \pgf at y=0pt \pgf at x=-\pgf at x  }
+    \anchor{e}{ \northwest \pgf at y=0pt \pgf at x=-\pgf at x  }
+    \anchor{west}{ \northwest \pgf at y=0pt }
+    \anchor{w}{ \northwest \pgf at y=0pt }
+    \anchor{south}{ \northwest \pgf at x=0pt \pgf at y=-\pgf at y }
+    \anchor{s}{ \northwest \pgf at x=0pt \pgf at y=-\pgf at y }
+    \anchor{north}{ \northwest \pgf at x=0pt }
+    \anchor{n}{ \northwest \pgf at x=0pt }
+    \anchor{south west}{ \northwest \pgf at y=-\pgf at y }
+    \anchor{north east}{ \northwest \pgf at x=-\pgf at x }
+    \anchor{north west}{ \northwest }
+    \anchor{south east}{ \northwest \pgf at x=-\pgf at x \pgf at y=-\pgf at y }
+    \anchorborder{
+        \pgf at xa=\pgf at x
+        \pgf at ya=\pgf at y
+        \pgfextracty{\pgf at circ@res at up}{\northwest}
+        \pgfpointborderrectangle
+            {\pgfqpoint{\pgf at xa}{\pgf at ya}}
+            {\pgfqpoint{\pgf at circ@res at up}{\pgf at circ@res at up}}
+    }
+    \behindforegroundpath{
+        \pgfscope
+            \pgfmathsetlength{\pgf at circ@res at temp}{\ctikzvalof{nodes width}*\pgf at circ@Rlen}
+            \pgfpathrectanglecorners
+            {\pgfpoint{-\pgf at circ@res at temp}{-\pgf at circ@res at temp}}
+            {\pgfpoint{\pgf at circ@res at temp}{\pgf at circ@res at temp}}
+            \pgfsetcolor{\ctikzvalof{color}}
+            \pgfsetfillopacity{\ctikzvalof{poles/full fill opacity}}% normally 1.0
+            \pgfusepath{draw,fill}
+        \endpgfscope
+    }
+}
+%% square terminal, unfilled
+
+\pgfdeclareshape{osquarepole}{
+    \anchor{center}{
+        \pgfpointorigin
+    }
+    \savedanchor\northwest{%
+        \pgfmathsetlength{\pgf at y}{\ctikzvalof{nodes width}*\pgf at circ@Rlen}
+        \pgf at x=-\pgf at y
+    }
+    \anchor{center}{ \pgf at y=0pt \pgf at x=0pt }
+    \anchor{east}{ \northwest \pgf at y=0pt \pgf at x=-\pgf at x  }
+    \anchor{e}{ \northwest \pgf at y=0pt \pgf at x=-\pgf at x  }
+    \anchor{west}{ \northwest \pgf at y=0pt }
+    \anchor{w}{ \northwest \pgf at y=0pt }
+    \anchor{south}{ \northwest \pgf at x=0pt \pgf at y=-\pgf at y }
+    \anchor{s}{ \northwest \pgf at x=0pt \pgf at y=-\pgf at y }
+    \anchor{north}{ \northwest \pgf at x=0pt }
+    \anchor{n}{ \northwest \pgf at x=0pt }
+    \anchor{south west}{ \northwest \pgf at y=-\pgf at y }
+    \anchor{north east}{ \northwest \pgf at x=-\pgf at x }
+    \anchor{north west}{ \northwest }
+    \anchor{south east}{ \northwest \pgf at x=-\pgf at x \pgf at y=-\pgf at y }
+    \anchorborder{
+        \pgf at xa=\pgf at x
+        \pgf at ya=\pgf at y
+        \pgfextracty{\pgf at circ@res at up}{\northwest}
+        \pgfpointborderrectangle
+            {\pgfqpoint{\pgf at xa}{\pgf at ya}}
+            {\pgfqpoint{\pgf at circ@res at up}{\pgf at circ@res at up}}
+    }
+    \behindforegroundpath{
+        \pgfscope
+            \pgfmathsetlength{\pgf at circ@res at temp}{\ctikzvalof{nodes width}*\pgf at circ@Rlen}
+            \pgfpathrectanglecorners
+            {\pgfpoint{-\pgf at circ@res at temp}{-\pgf at circ@res at temp}}
+            {\pgfpoint{\pgf at circ@res at temp}{\pgf at circ@res at temp}}
+            \pgfsetcolor{\ctikzvalof{color}}
+            \ifx\tikz at fillcolor\pgfutil at empty
+                % set the default fill color to white
+                \pgfsetfillcolor{\ctikzvalof{open poles fill}}
+                % ...but override it if the class is defined!
+                % note that this element has no class, but will inherit it when used
+                % into another component
+                \pgf at circ@setifdefinedfill{draw, fill}{draw, fill}
+            \else
+                \pgfsetfillcolor{\tikz at fillcolor}
+            \fi
+            \pgfsetfillopacity{\ctikzvalof{poles/open fill opacity}}% normally 1.0
+            \pgfusepath{draw,fill}
+        \endpgfscope
+    }
+}
+% BNC connector
+
+\pgfdeclareshape{bnc}{
+    \anchor{center}{
+        \pgfpointorigin
+    }
+    % BNC size is 2.5 times the size of the internal "ocirc"
+    \savedanchor\northwest{%
+        \pgf at y=\ctikzvalof{nodes width}\pgf at circ@Rlen
+        \pgf at y=2.5\pgf at y
+        \pgf at x=-\pgf at y
+    }
+    % center is on the opening
+    \anchor{center}{ \northwest \pgf at y=0pt \pgf at x=-\pgf at x  }
+    \anchor{zero}{ \pgfpointorigin }
+    \anchor{hot}{ \northwest \pgf at y=0pt \pgf at x=-\pgf at x  }
+    \anchor{shield}{ \northwest \pgf at x=0pt \pgf at y=-\pgf at y }
+    % geo-anchors
+    \anchor{east}{ \northwest \pgf at y=0pt \pgf at x=-\pgf at x  }
+    \anchor{right}{ \northwest \pgf at y=0pt \pgf at x=-\pgf at x  }
+    \anchor{west}{ \northwest \pgf at y=0pt }
+    \anchor{left}{ \northwest \pgf at y=0pt }
+    \anchor{south}{ \northwest \pgf at x=0pt \pgf at y=-\pgf at y }
+    \anchor{north}{ \northwest \pgf at x=0pt }
+    \anchor{south west}{ \northwest \pgf at y=-\pgf at y }
+    \anchor{north east}{ \northwest \pgf at x=-\pgf at x }
+    \anchor{north west}{ \northwest }
+    \anchor{south east}{ \northwest \pgf at x=-\pgf at x \pgf at y=-\pgf at y }
+    % put the node text above and centered
+    \anchor{text}{\pgfextracty{\pgf at circ@res at up}{\northwest}
+        \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+            \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf at circ@res at up\relax
+        }
+    }
+    \anchorborder{
+        \pgf at circ@res at left=\pgf at x
+        \pgf at circ@res at up=\pgf at y
+        \pgfpointborderellipse{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}
+        }{\pgfpoint{2.5*\ctikzvalof{nodes width}*\pgf at circ@Rlen}{2.5*\ctikzvalof{nodes width}*\pgf at circ@Rlen}}
+    }
+    \behindforegroundpath{
+        \pgfextracty{\pgf at circ@res at other}{\northwest}
+        \pgf at circ@res at step=\ctikzvalof{nodes width}\pgf at circ@Rlen
+        \pgfscope
+            \pgfstartlinewidth=\pgflinewidth
+            \pgf at circ@setlinewidth{bipoles}{\pgflinewidth}
+            \pgfsetcolor{\ctikzvalof{color}}
+            % external circle
+            \pgfscope
+                % clipping path: first a rectangle bigger then the shape
+                % to avoid problems with the line thickness
+                \pgfpathrectanglecorners{\pgfpoint{-2\pgf at circ@res at other}{-2\pgf at circ@res at other}}
+                    {\pgfpoint{2\pgf at circ@res at other}{2\pgf at circ@res at other}}
+                % next the opening to the right
+                \pgfpathrectanglecorners{\pgfpoint{-\pgf at circ@res at step}{-\pgf at circ@res at step}}
+                    {\pgfpoint{2\pgf at circ@res at other}{\pgf at circ@res at step}}
+                % do the difference and clip before drawing
+                \pgfseteorule
+                \pgfusepath{clip}
+                \pgfpathcircle{\pgfpointorigin}{\pgf at circ@res at other}
+                \pgfusepath{draw}
+            \endpgfscope
+            % internal circle
+            \pgfpathcircle{\pgfpointorigin}{\pgf at circ@res at step}
+            \pgf at circ@draworfill
+            % and the contact line to the right
+            \pgfsetlinewidth{\pgfstartlinewidth}
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{0pt}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{0pt}}
+            \pgfusepath{draw}
+        \endpgfscope
+    }
+}
+
+%% Fill for correct rectangular joins
+
+\pgfdeclareshape{rectjoinfill}{
+    \savedanchor{\northeast}{%
+        \pgf at x=.5\pgflinewidth%
+        \pgf at y=.5\pgflinewidth%
+    }
+    \anchor{north}{\northeast\pgf at x=0cm\relax}
+    \anchor{east}{\northeast\pgf at y=0cm\relax}
+    \anchor{south}{\northeast\pgf at y=-\pgf at y \pgf at x=0cm\relax}
+    \anchor{west}{\northeast\pgf at y=0cm\pgf at x=-\pgf at x}
+    \anchor{north east}{\northeast}
+    \anchor{north west}{\northeast\pgf at x=-\pgf at x}
+    \anchor{south east}{\northeast\pgf at y=-\pgf at y}
+    \anchor{south west}{\northeast\pgf at y=-\pgf at y\pgf at x=-\pgf at x}
+    \anchor{center}{
+        \pgfpointorigin
+    }
+    \anchorborder{
+        \pgf at circ@res at left=\pgf at x
+        \pgf at circ@res at up=\pgf at y
+    }
+    \behindforegroundpath{
+        \pgfscope
+            \pgfpathrectanglecorners
+            {\pgfpoint{0}{.5\pgflinewidth}}
+            {\pgfpoint{0}{-.5\pgflinewidth}}
+            \pgfsetcolor{\ctikzvalof{color}}
+            \pgfusepath{draw,fill}
+        \endpgfscope
+    }
+}
+
+%% transistor arrow
+
+\def\pgf at circ@find at linescale{
+    % find the scale inverse of the scale factor: line width do not scale
+    % with scale=..., transform shape so we have to counteract it.
+    \iftikz at fullytransformed % this is true if `transform shape` is active
+        % from @Circumscribe https://tex.stackexchange.com/a/474035/38080
+        % Note that this trick is not working inside a `spy` environment...
+        \pgfgettransformentries{\scaleA}{\scaleB}{\scaleC}{\scaleD}{\whatevs}{\whatevs}%
+        \pgfmathsetmacro{\@@factor}{1.0/sqrt(abs(\scaleA*\scaleD-\scaleB*\scaleC))}%
+    \else
+        \pgfmathsetmacro{\@@factor}{1.0}
+    \fi
+}
+
+\pgfdeclareshape{trarrow}{%
+    % this arrow is only filled but grows with the linewidth, more or less
+    % like currarrow do
+    \savedanchor{\northeast}{%
+        \pgf at circ@res at step = \pgf at circ@Rlen
+        \pgf at circ@find at linescale
+        \divide \pgf at circ@res at step by \ctikzvalof{current arrow scale}
+        \pgfpoint{0.7*\pgf at circ@res at step +0.5*\@@factor*\pgflinewidth}
+            {0.8*\pgf at circ@res at step+0.7593*\@@factor*\pgflinewidth}
+    }
+    % The arrow size should be more or less the same of a currarrow, which is
+    % both filled and stroke, for backward output compatibility (more or less)
+    %
+    %      angle \beta       W is \pgf at circ@Rlen/\ctikzvalof{current arrow scale}
+    %    |-\__               currarrow as the tip at (W,0)
+    %    |    |              and the upper tail at (-0.7*W, 0.8*W)
+    %    |    \__            it then "overshoot" do to the linew width L
+    %    |       \__ xangle \alpha
+    %    ---0------->
+    %
+    %   \beta = atan(0.7/0.8)  \alpha=atan(0.8/1.7)
+    %   tip overshoot is (L/2)/sin(\alpha) = 1.743*L only in x direction
+    %   tail overshoot is -(L/2) in x, and (L/2)/sin(\beta) = 0.7539*L in y
+    %
+    \savedanchor{\northwest}{%
+        \pgf at circ@res at step = \pgf at circ@Rlen
+        \divide \pgf at circ@res at step by \ctikzvalof{current arrow scale}
+        \pgf at circ@find at linescale
+        \pgfpoint{-0.7*\pgf at circ@res at step -0.5*\@@factor*\pgflinewidth}
+            {0.8*\pgf at circ@res at step+0.7593*\@@factor*\pgflinewidth}
+    }
+    \savedanchor{\tip}{%
+        \pgf at circ@res at step = \pgf at circ@Rlen
+        \divide \pgf at circ@res at step by \ctikzvalof{current arrow scale}
+        \pgf at circ@find at linescale
+        \pgfpoint{\pgf at circ@res at step + 1.743*\@@factor*\pgflinewidth}{0pt}
+    }
+    \anchor{north}{\northeast\pgf at x=0cm\relax}
+    \anchor{east}{\northeast\pgf at y=0cm\relax}
+    \anchor{south}{\northeast\pgf at y=-\pgf at y \pgf at x=0cm\relax}
+    \anchor{west}{\northeast\pgf at y=0cm\pgf at x=-\pgf at x}
+    \anchor{north east}{\northeast}
+    \anchor{north west}{\northeast\pgf at x=-\pgf at x}
+    \anchor{south east}{\northeast\pgf at y=-\pgf at y}
+    \anchor{south west}{\northeast\pgf at y=-\pgf at y\pgf at x=-\pgf at x}
+    \anchor{center}{
+        \pgfpointorigin
+    }
+    \anchor{tip}{
+        \tip
+    }
+    \anchor{btip}{% this anchor is behind the tip of half a linewidth
+        \tip
+        \pgf at circ@find at linescale
+        \pgf at circ@res at temp=\@@factor\pgflinewidth
+        \advance\pgf at x by -.5\pgf at circ@res at temp
+    }
+    \behindforegroundpath{
+        \pgfscope
+            \northwest
+            \pgf at circ@res at up=\pgf at y
+            \pgf at circ@res at left=\pgf at x
+            \tip
+            \pgf at circ@res at step = \pgf at x
+            %
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{1\pgf at circ@res at step}{0pt}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{-\pgf at circ@res at up}}
+            \pgfpathclose
+            \pgfsetcolor{\ctikzvalof{color}}
+            \pgfusepath{fill} % just fill
+        \endpgfscope
+    }
+}
+
+%% Current arrow
+
+\pgfdeclareshape{currarrow}{
+    \savedanchor{\northeast}{%
+        \pgf at circ@res at step = \pgf at circ@Rlen
+        \divide \pgf at circ@res at step by \ctikzvalof{current arrow scale}
+        \pgf at x=.5\pgf at circ@res at step
+        \pgf at y=\pgf at x%
+    }
+    \anchor{north}{\northeast\pgf at x=0cm\relax}
+    \anchor{east}{\northeast\pgf at y=0cm\relax}
+    \anchor{south}{\northeast\pgf at y=-\pgf at y \pgf at x=0cm\relax}
+    \anchor{west}{\northeast\pgf at y=0cm\pgf at x=-\pgf at x}
+    \anchor{north east}{\northeast}
+    \anchor{north west}{\northeast\pgf at x=-\pgf at x}
+    \anchor{south east}{\northeast\pgf at y=-\pgf at y}
+    \anchor{south west}{\northeast\pgf at y=-\pgf at y\pgf at x=-\pgf at x}
+    \anchor{center}{
+        \pgfpointorigin
+    }
+    \anchor{tip}{
+        \pgfpointorigin
+        \pgf at circ@res at step = \pgf at circ@Rlen
+        \divide \pgf at circ@res at step by \ctikzvalof{current arrow scale}
+        \pgf at x	=\pgf at circ@res at step
+    }
+    \behindforegroundpath{
+        \pgfscope
+            \pgf at circ@res at step = \pgf at circ@Rlen
+            \divide \pgf at circ@res at step by \ctikzvalof{current arrow scale}
+
+            \pgfpathmoveto{\pgfpoint{-.7\pgf at circ@res at step}{0pt}}
+            \pgfpathlineto{\pgfpoint{-.7\pgf at circ@res at step}{-.8\pgf at circ@res at step}}
+            \pgfpathlineto{\pgfpoint{1\pgf at circ@res at step}{0pt}}
+            \pgfpathlineto{\pgfpoint{-.7\pgf at circ@res at step}{.8\pgf at circ@res at step}}
+            \pgfpathlineto{\pgfpoint{-.7\pgf at circ@res at step}{0pt}}
+            \pgfsetcolor{\ctikzvalof{color}}
+            \pgfusepath{draw,fill}
+
+        \endpgfscope
+    }
+}
+
+%% Flow arrow
+
+\pgfdeclareshape{flowarrow}{
+    \savedanchor{\northeast}{%
+        \pgf at circ@res at step = \pgf at circ@Rlen
+        \divide \pgf at circ@res at step by \ctikzvalof{current arrow scale}
+        \pgf at y=.5\pgf at circ@res at step
+        \pgf at circ@res at step = \pgf at circ@Rlen
+        \divide \pgf at circ@res at step by 4
+        \pgf at x=\pgf at circ@res at step%
+    }
+    \anchor{north}{\northeast\pgf at x=0cm\relax}
+    \anchor{east}{\northeast\pgf at y=0cm\relax}
+    \anchor{south}{\northeast\pgf at y=-\pgf at y \pgf at x=0cm\relax}
+    \anchor{west}{\northeast\pgf at y=0cm\pgf at x=-\pgf at x}
+    \anchor{north east}{\northeast}
+    \anchor{north west}{\northeast\pgf at x=-\pgf at x}
+    \anchor{south east}{\northeast\pgf at y=-\pgf at y}
+    \anchor{south west}{\northeast\pgf at y=-\pgf at y\pgf at x=-\pgf at x}
+    \anchor{text}{% text centered above
+        \pgfpointorigin
+        \pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox}
+    }
+    \anchor{center}{
+        \pgfpointorigin
+    }
+    \anchor{tip}{
+        \pgfpointorigin
+        \pgf at circ@res at step = \pgf at circ@Rlen
+        \divide \pgf at circ@res at step by \ctikzvalof{current arrow scale}
+        \pgf at x	=\pgf at circ@res at step
+    }
+    \behindforegroundpath{
+        \pgfscope
+            \pgf at circ@res at step = \pgf at circ@Rlen
+            \divide \pgf at circ@res at step by 4
+            \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at step}{0pt}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{0pt}}
+            \pgfsetcolor{\ctikzvalof{color}}
+            \pgfusepath{draw}
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at step}{0pt}}
+            \pgfnode{currarrow}{tip}{}{}{\pgfusepath{fill}}
+        \endpgfscope
+    }
+}
+
+%% Input arrow
+
+\pgfdeclareshape{inputarrow}{
+    \savedanchor{\northeast}{% this is really not northeast, really -northwest
+        \pgf at circ@res at step = \pgf at circ@Rlen
+        \divide \pgf at circ@res at step by \ctikzvalof{current arrow scale}
+        \pgf at y=.5\pgf at circ@res at step
+        \pgf at x=1.7\pgf at circ@res at step
+    }
+    \anchor{north}{\northeast\pgf at x=0cm\relax}
+    \anchor{east}{\northeast\pgf at y=0cm\relax\pgf at x=0cm\relax}
+    \anchor{south}{\northeast\pgf at y=-\pgf at y \pgf at x=0cm\relax}
+    \anchor{west}{\northeast\pgf at y=0cm\pgf at x=-\pgf at x}
+    \anchor{north east}{\northeast\pgf at x=0cm\relax}
+    \anchor{north west}{\northeast\pgf at x=-\pgf at x}
+    \anchor{south east}{\northeast\pgf at y=-\pgf at y\pgf at x=0cm\relax}
+    \anchor{south west}{\northeast\pgf at y=-\pgf at y\pgf at x=-\pgf at x}
+    \savedanchor{\tip}{
+        \pgfpointorigin
+    }
+    \anchor{center}{
+        \tip
+    }
+    \anchor{tip}{
+        \tip
+    }
+    \behindforegroundpath{
+
+        \pgfscope
+            \pgf at circ@res at step = \pgf at circ@Rlen
+            \divide \pgf at circ@res at step by 16
+
+            \pgfpathmoveto{\pgfpoint{-1.7\pgf at circ@res at step}{0pt}}
+            \pgfpathlineto{\pgfpoint{-1.7\pgf at circ@res at step}{-.8\pgf at circ@res at step}}
+            \pgfpathlineto{\pgfpoint{0pt}{0pt}}
+            \pgfpathlineto{\pgfpoint{-1.7\pgf at circ@res at step}{.8\pgf at circ@res at step}}
+            \pgfpathlineto{\pgfpoint{-1.7\pgf at circ@res at step}{0pt}}
+            \pgfsetcolor{\ctikzvalof{color}}
+            \pgfusepath{fill}
+
+        \endpgfscope
+    }
+}
+
+
+%% box
+
+\pgfdeclareshape{box}{
+    \anchor{center}{
+        \pgfpointorigin
+    }
+    \behindforegroundpath{
+
+        \pgfscope
+            \pgf at circ@res at step = \ctikzvalof{bipoles/twoport/width}\pgf at circ@Rlen
+            \pgf at circ@res at step = 0.5\pgf at circ@res at step
+            \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+            \pgfpathrectanglecorners{\pgfpoint{-\pgf at circ@res at step}{\pgf at circ@res at step}}{\pgfpoint{\pgf at circ@res at step}{-\pgf at circ@res at step}}
+            \pgf at circ@draworfill
+        \endpgfscope
+    }
+}
+
+%% box scaled with blocks
+
+\pgfdeclareshape{blockbox}{
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{blocks/scale}\pgf at circ@Rlen}}
+    \anchor{center}{
+        \pgfpointorigin
+    }
+    \behindforegroundpath{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{blocks/scale}\pgf at circ@Rlen}
+        \pgfscope
+            \pgf at circ@res at step = \ctikzvalof{bipoles/twoport/width}\pgf at circ@scaled at Rlen
+            \pgf at circ@res at step = 0.5\pgf at circ@res at step
+            \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+            \pgfpathrectanglecorners{\pgfpoint{-\pgf at circ@res at step}{\pgf at circ@res at step}}{\pgfpoint{\pgf at circ@res at step}{-\pgf at circ@res at step}}
+            \pgf at circ@draworfill
+        \endpgfscope
+    }
+}
+
+% full nodes for wire crossing
+
+\pgfdeclareshape{jump crossing}
+{
+    \savedanchor\northwest{%
+        \pgf at y=\ctikzvalof{bipoles/crossing/size}\pgf at circ@Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\pgf at y
+    }
+    \anchor{center}{ \pgf at y=0pt \pgf at x=0pt }
+    \anchor{east}{ \northwest \pgf at y=0pt \pgf at x=-\pgf at x  }
+    \anchor{e}{ \northwest \pgf at y=0pt \pgf at x=-\pgf at x  }
+    \anchor{west}{ \northwest \pgf at y=0pt }
+    \anchor{w}{ \northwest \pgf at y=0pt }
+    \anchor{south}{ \northwest \pgf at x=0pt \pgf at y=-\pgf at y }
+    \anchor{s}{ \northwest \pgf at x=0pt \pgf at y=-\pgf at y }
+    \anchor{north}{ \northwest \pgf at x=0pt }
+    \anchor{n}{ \northwest \pgf at x=0pt }
+    \anchor{south west}{ \northwest \pgf at y=-\pgf at y }
+    \anchor{north east}{ \northwest \pgf at x=-\pgf at x }
+    \anchor{north west}{ \northwest }
+    \anchor{south east}{ \northwest \pgf at x=-\pgf at x \pgf at y=-\pgf at y }
+    \behindbackgroundpath{
+        \northwest
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        % horizontal jumper
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+        \pgfpathlineto{\pgfpoint{0.4\pgf at circ@res at left}{0pt}}
+        \pgfpatharc{0}{-180}{0.4*\pgf at circ@res at left}
+        \pgfsetbeveljoin
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+        % vertical, broken path
+        \pgfpathmoveto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0pt}{0.5\pgf at circ@res at up}}
+        \pgfpathmoveto{\pgfpoint{0pt}{0.3\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down}}
+        \pgfusepath{draw}
+
+    }
+}
+\pgfdeclareshape{plain crossing}
+{
+    \savedanchor\northwest{%
+        \pgf at y=\ctikzvalof{bipoles/crossing/size}\pgf at circ@Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\pgf at y
+    }
+    \anchor{center}{ \pgf at y=0pt \pgf at x=0pt }
+    \anchor{east}{ \northwest \pgf at y=0pt \pgf at x=-\pgf at x  }
+    \anchor{e}{ \northwest \pgf at y=0pt \pgf at x=-\pgf at x  }
+    \anchor{west}{ \northwest \pgf at y=0pt }
+    \anchor{w}{ \northwest \pgf at y=0pt }
+    \anchor{south}{ \northwest \pgf at x=0pt \pgf at y=-\pgf at y }
+    \anchor{s}{ \northwest \pgf at x=0pt \pgf at y=-\pgf at y }
+    \anchor{north}{ \northwest \pgf at x=0pt }
+    \anchor{n}{ \northwest \pgf at x=0pt }
+    \anchor{south west}{ \northwest \pgf at y=-\pgf at y }
+    \anchor{north east}{ \northwest \pgf at x=-\pgf at x }
+    \anchor{north west}{ \northwest }
+    \anchor{south east}{ \northwest \pgf at x=-\pgf at x \pgf at y=-\pgf at y }
+    \behindbackgroundpath{
+        \northwest
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        % horizontal jumper
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+        % vertical, broken path
+        \pgfpathmoveto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0pt}{0.1\pgf at circ@res at up}}
+        \pgfpathmoveto{\pgfpoint{0pt}{0.1\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down}}
+        \pgfusepath{draw}
+
+    }
+}
+
+%%%---------- close: tex/pgfcircshapes
+%%%%%%%%%%% Springe nach tex/pgfcircmonopoles
+%%%---------- open: tex/pgfcircmonopoles.tex
+% Copyright 2018-2020 by Romano Giannetti
+% Copyright 2015-2020 by Stefan Lindner
+% Copyright 2013-2020 by Stefan Erhardt
+% Copyright 2007-2020 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Monopoles
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%
+%% Grounds
+%%%%%%%%%%%%%
+
+
+%% Ground symbol
+% #1 -> name
+% #2 -> width
+% #3 -> depth
+% #4 -> code
+\long\def\pgf at circ@declareground#1#2#3#4{
+    \pgfdeclareshape{#1}{
+        \savedmacro{\ctikzclass}{\edef\ctikzclass{grounds}}  % class of these components
+        \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+        \savedanchor{\southeast}{
+            \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            \pgf at x=\ctikzvalof{monopoles/ground/width}\pgf at circ@scaled at Rlen
+            \pgf at x=#2\pgf at x
+            \pgf at y=\ctikzvalof{monopoles/ground/width}\pgf at circ@scaled at Rlen
+            \pgf at y=-#3\pgf at y
+        }
+        \anchor{north}{\pgfpointorigin}
+        \anchor{north east}{\southeast\pgf at y=0pt\relax}
+        \anchor{east}{\southeast\pgf at y=.5\pgf at y}
+        \anchor{south east}{\southeast}
+        \anchor{south}{\southeast\pgf at x=0pt\relax}
+        \anchor{south west}{\southeast\pgf at x=-\pgf at x}
+        \anchor{west}{\southeast\pgf at y=.5\pgf at y\pgf at x=-\pgf at x}
+        \anchor{north west}{\southeast\pgf at y=0pt\pgf at x=-\pgf at x}
+        \anchor{left}{\pgfpointorigin}
+        \anchor{right}{\pgfpointorigin}
+        \anchor{center}{\pgfpointorigin}
+        \behindforegroundpath{
+            \pgf at circ@scaled at Rlen=\scaledRlen
+            \pgf at circ@res at step=\ctikzvalof{monopoles/ground/width}\pgf at circ@scaled at Rlen
+            \pgfscope
+                \pgfstartlinewidth=\pgflinewidth
+                #4
+            \endpgfscope
+        }
+    }
+}
+
+
+\pgf at circ@declareground{ground}{0.6}{1.6}{
+    \pgfsetlinewidth{\ctikzvalof{monopoles/ground/connectionthickness}\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpointorigin}
+    \pgfpathlineto{\pgfpoint{0pt}{-1.2\pgf at circ@res at step}}
+    \pgfusepath{draw}
+    \pgf at circ@setlinewidth{monopoles/ground}{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{-.6\pgf at circ@res at step}{-1.2\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{.6\pgf at circ@res at step}{-1.2\pgf at circ@res at step}}
+    \pgfpathmoveto{\pgfpoint{-.4\pgf at circ@res at step}{-1.4\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{.4\pgf at circ@res at step}{-1.4\pgf at circ@res at step}}
+    \pgfpathmoveto{\pgfpoint{-.25\pgf at circ@res at step}{-1.6\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{.25\pgf at circ@res at step}{-1.6\pgf at circ@res at step}}
+    \pgfusepath{draw}
+}
+
+\pgf at circ@declareground{tlground}{0.6}{0.4}{
+    \pgf at circ@setlinewidth{monopoles/ground}{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{-.6\pgf at circ@res at step}{0pt}}
+    \pgfpathlineto{\pgfpoint{.6\pgf at circ@res at step}{0pt}}
+    \pgfpathmoveto{\pgfpoint{-.4\pgf at circ@res at step}{-0.2\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{.4\pgf at circ@res at step}{-0.2\pgf at circ@res at step}}
+    \pgfpathmoveto{\pgfpoint{-.25\pgf at circ@res at step}{-0.4\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{.25\pgf at circ@res at step}{-0.4\pgf at circ@res at step}}
+    \pgfusepath{draw}
+}
+
+
+\pgf at circ@declareground{rground}{0.6}{1}{
+    \pgfpathmoveto{\pgfpointorigin}
+    \pgfpathlineto{\pgfpoint{0pt}{-\pgf at circ@res at step}}
+    \pgfusepath{draw}
+
+    \pgfstartlinewidth=\pgflinewidth
+    \pgf at circ@setlinewidth{monopoles/rground}{\pgfstartlinewidth}
+
+    \pgfpathmoveto{\pgfpoint{-.6\pgf at circ@res at step}{-\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{.6\pgf at circ@res at step}{-\pgf at circ@res at step}}
+    \pgfsetroundcap\pgfusepath{draw}
+}
+
+\pgf at circ@declareground{tground}{0.6}{0}{
+    \pgfpathmoveto{\pgfpointorigin}
+    \pgfusepath{draw}
+
+    \pgfstartlinewidth=\pgflinewidth
+    \pgf at circ@setlinewidth{monopoles/tground}{\pgfstartlinewidth}
+
+    \pgfpathmoveto{\pgfpoint{-.6\pgf at circ@res at step}{0pt}}
+    \pgfpathlineto{\pgfpoint{.6\pgf at circ@res at step}{0pt}}
+    \pgfusepath{draw}
+}
+
+\pgf at circ@declareground{sground}{0.6}{1.8}{
+    \pgfpathmoveto{\pgfpointorigin}
+    \pgfpathlineto{\pgfpoint{0pt}{-\pgf at circ@res at step}}
+    \pgfusepath{draw}
+
+    \pgfstartlinewidth=\pgflinewidth
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgfpathmoveto{\pgfpoint{-.6\pgf at circ@res at step}{-\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{.6\pgf at circ@res at step}{-\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{0}{-1.8\pgf at circ@res at step}}
+    \pgfpathclose
+    \pgf at circ@draworfill
+}
+
+% noiseless ground
+\pgf at circ@declareground{nground}{0.9}{1.6}{
+    \pgfsetlinewidth{\ctikzvalof{monopoles/ground/connectionthickness}\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpointorigin}
+    \pgfpathlineto{\pgfpoint{0pt}{-1.2\pgf at circ@res at step}}
+    \pgfusepath{draw}
+    \pgf at circ@setlinewidth{monopoles/ground}{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{-.6\pgf at circ@res at step}{-1.2\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{.6\pgf at circ@res at step}{-1.2\pgf at circ@res at step}}
+    \pgfpathmoveto{\pgfpoint{-.4\pgf at circ@res at step}{-1.4\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{.4\pgf at circ@res at step}{-1.4\pgf at circ@res at step}}
+    \pgfpathmoveto{\pgfpoint{-.25\pgf at circ@res at step}{-1.6\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{.25\pgf at circ@res at step}{-1.6\pgf at circ@res at step}}
+    \pgfusepath{draw}
+    \pgfpathmoveto{\pgfpoint{0.9\pgf at circ@res at step}{-1.6\pgf at circ@res at step}}
+    \pgfpatharc{0}{180}{0.9\pgf at circ@res at step}
+    \pgfusepath{draw}
+}
+
+% protective ground
+\pgf at circ@declareground{pground}{0.9}{1.8}{
+    \pgf at circ@setlinewidth{monopoles/ground}{\pgfstartlinewidth}
+    \pgfpathcircle{\pgfpoint{0pt}{-0.9\pgf at circ@res at step}}{0.9\pgf at circ@res at step}
+    \pgf at circ@draworfill
+    \pgfsetlinewidth{\ctikzvalof{monopoles/ground/connectionthickness}\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpointorigin}
+    \pgfpathlineto{\pgfpoint{0pt}{-1\pgf at circ@res at step}}
+    \pgfusepath{draw}
+    \pgf at circ@setlinewidth{monopoles/ground}{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{-.6\pgf at circ@res at step}{-1\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{.6\pgf at circ@res at step}{-1\pgf at circ@res at step}}
+    \pgfpathmoveto{\pgfpoint{-.4\pgf at circ@res at step}{-1.2\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{.4\pgf at circ@res at step}{-1.2\pgf at circ@res at step}}
+    \pgfpathmoveto{\pgfpoint{-.25\pgf at circ@res at step}{-1.4\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{.25\pgf at circ@res at step}{-1.4\pgf at circ@res at step}}
+    \pgfusepath{draw}
+}
+
+% chassis ground
+\pgf at circ@declareground{cground}{1}{2}{
+    \pgfsetlinewidth{\ctikzvalof{monopoles/ground/connectionthickness}\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpointorigin}
+    \pgfpathlineto{\pgfpoint{0pt}{-1.5\pgf at circ@res at step}}
+    \pgfusepath{draw}
+    \pgf at circ@setlinewidth{monopoles/ground}{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{-1.00\pgf at circ@res at step}{-2.10\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{-0.75\pgf at circ@res at step}{-1.50\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{ 0.75\pgf at circ@res at step}{-1.50\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{ 0.50\pgf at circ@res at step}{-2.10\pgf at circ@res at step}}
+    \pgfpathmoveto{\pgfpoint{ 0.00\pgf at circ@res at step}{-1.50\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{-0.25\pgf at circ@res at step}{-2.10\pgf at circ@res at step}}
+    \pgfusepath{draw}
+}
+
+% Contributed by @fotesan https://github.com/fotesan
+% european ground
+\pgf at circ@declareground{eground}{1.1}{1.7}{
+    \pgfpathmoveto{\pgfpointorigin}
+    \pgfpathlineto{\pgfpoint{0pt}{-\pgf at circ@res at step}}
+    \pgfusepath{draw}
+
+    \pgfstartlinewidth=\pgflinewidth
+    \pgf at circ@setlinewidth{monopoles/tground}{\pgfstartlinewidth}
+
+    \pgfpathmoveto{\pgfpoint{-1\pgf at circ@res at step}{-\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{1\pgf at circ@res at step}{-\pgf at circ@res at step}}
+    \pgfusepath{draw}
+
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{-1.1\pgf at circ@res at step}{-1.7\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{-.6\pgf at circ@res at step}{-1\pgf at circ@res at step}}
+    \pgfpathmoveto{\pgfpoint{-.6\pgf at circ@res at step}{-1.7\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{-.1\pgf at circ@res at step}{-1\pgf at circ@res at step}}
+    \pgfpathmoveto{\pgfpoint{-.1\pgf at circ@res at step}{-1.7\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{.4\pgf at circ@res at step}{-1\pgf at circ@res at step}}
+    \pgfpathmoveto{\pgfpoint{.4\pgf at circ@res at step}{-1.7\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{.9\pgf at circ@res at step}{-1\pgf at circ@res at step}}
+    \pgfusepath{draw}
+}
+
+\pgf at circ@declareground{eground2}{1.1}{1.7}{
+    \pgfpathmoveto{\pgfpointorigin}
+    \pgfpathlineto{\pgfpoint{0pt}{-\pgf at circ@res at step}}
+    \pgfusepath{draw}
+
+    \pgfstartlinewidth=\pgflinewidth
+    \pgf at circ@setlinewidth{monopoles/tground}{\pgfstartlinewidth}
+
+    \pgfpathmoveto{\pgfpoint{-1\pgf at circ@res at step}{-\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{1\pgf at circ@res at step}{-\pgf at circ@res at step}}
+    \pgfusepath{draw}
+
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{-1.1\pgf at circ@res at step}{-1.7\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{-.4\pgf at circ@res at step}{-1\pgf at circ@res at step}}
+    \pgfpathmoveto{\pgfpoint{-.45\pgf at circ@res at step}{-1.7\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{.25\pgf at circ@res at step}{-1\pgf at circ@res at step}}
+    \pgfpathmoveto{\pgfpoint{.2\pgf at circ@res at step}{-1.7\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{.9\pgf at circ@res at step}{-1\pgf at circ@res at step}}
+    \pgfusepath{draw}
+}
+
+%%%%%%%%%%%%%%%%%%
+%% Power supplies
+%%%%%%%%%%%%%%%%%%
+
+% Vcc
+\pgfdeclareshape{vcc}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{power supplies}}  % class of these components
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \saveddimen{\scaledwidth}{% thanks to @Schrödinger's cat on https://tex.stackexchange.com/a/506249/38080
+        \pgfgettransformentries{\tmpa}{\tmpb}{\tmpc}{\tmpd}{\tmp}{\tmp}%
+        \pgfmathsetmacro{\gscale}{sqrt(abs(\tmpa*\tmpd-\tmpb*\tmpc))}% abs should not be needed
+        \pgfmathsetlength{\pgf at x}{(\ctikzvalof{\ctikzclass/scale}*\gscale*\ctikzvalof{monopoles/vcc/width})*\pgf at circ@Rlen}%
+    }
+    \savedanchor{\northeast}{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at circ@res at step=\ctikzvalof{monopoles/vcc/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at circ@res at step
+        \pgf at y=3\pgf at x%
+    }
+    \anchor{north}{\northeast\pgf at x=0cm\relax}
+    \anchor{east}{\northeast\pgf at y=0.5\pgf at y\relax}
+    \anchor{south}{\pgfpointorigin}
+    \anchor{west}{\northeast\pgf at y=0.5\pgf at y\pgf at x=-\pgf at x}
+    \anchor{north east}{\northeast}
+    \anchor{north west}{\northeast\pgf at x=-\pgf at x}
+    \anchor{south east}{\northeast\pgf at y=0pt\relax}
+    \anchor{south west}{\northeast\pgf at y=0pt\pgf at x=-\pgf at x}
+    \anchor{center}{\pgfpointorigin}
+    \anchor{left}{\pgfpointorigin}
+    \anchor{right}{\pgfpointorigin}
+    \anchor{text}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at circ@res at step=\ctikzvalof{monopoles/vcc/width}\pgf at circ@scaled at Rlen
+        \pgfpathmoveto{\pgfpoint{-.5\wd\pgfnodeparttextbox}{2\pgf at circ@res at step+2\ht\pgfnodeparttextbox}}
+        \pgfpathmoveto{\pgfpoint{.5\wd\pgfnodeparttextbox}{2\pgf at circ@res at step+2\ht\pgfnodeparttextbox}}
+        \pgf at x=0pt
+        \pgf at y=2\pgf at circ@res at step
+        \advance \pgf at y by 0.5\ht\pgfnodeparttextbox
+        \pgf at x=-.5\wd\pgfnodeparttextbox
+    }
+    \behindforegroundpath{
+        \pgf at circ@scaled at Rlen=\scaledRlen
+        \pgf at circ@res at step=\ctikzvalof{monopoles/vcc/width}\pgf at circ@scaled at Rlen
+        \pgfscope
+            \edef\pgf at circ@temp{\ctikzvalof{monopoles/vcc/arrow}}\edef\pgf at temp{legacy}
+            \ifx\pgf at temp\pgf at circ@temp
+                \pgfstartlinewidth=\pgflinewidth
+                \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+                \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{.8\pgf at circ@res at step}}
+                \pgfpathlineto{\pgfpoint{0}{1.5\pgf at circ@res at step}}
+                \pgfpathlineto{\pgfpoint{0.5\pgf at circ@res at step}{.8\pgf at circ@res at step}}
+                \pgfusepath{draw}
+
+                \pgfsetlinewidth{\pgfstartlinewidth}
+            \else
+            \pgfsetarrowsend{\pgf at circ@temp}
+        \fi
+        \pgfpathmoveto{\pgfpointorigin}
+        \pgfpathlineto{\pgfpoint{0pt}{1.5\pgf at circ@res at step}}
+        \pgfusepath{draw}
+    \endpgfscope
+    }
+}
+
+% Vee
+\pgfdeclareshape{vee}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{power supplies}}  % class of these components
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \saveddimen{\scaledwidth}{% thanks to @Schrödinger's cat on https://tex.stackexchange.com/a/506249/38080
+        \pgfgettransformentries{\tmpa}{\tmpb}{\tmpc}{\tmpd}{\tmp}{\tmp}%
+        \pgfmathsetmacro{\gscale}{sqrt(abs(\tmpa*\tmpd-\tmpb*\tmpc))}% abs should not be needed
+        \pgfmathsetlength{\pgf at x}{(\ctikzvalof{\ctikzclass/scale}*\gscale*\ctikzvalof{monopoles/vcc/width})*\pgf at circ@Rlen}%
+    }
+    \savedanchor{\northeast}{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at circ@res at step=\ctikzvalof{monopoles/vcc/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at circ@res at step
+        \pgf at y=-3\pgf at x%
+    }
+    \anchor{south}{\northeast\pgf at x=0cm\relax}
+    \anchor{east}{\northeast\pgf at y=0.5\pgf at y\relax}
+    \anchor{north}{\pgfpointorigin}
+    \anchor{west}{\northeast\pgf at y=0.5\pgf at y\pgf at x=-\pgf at x}
+    \anchor{south east}{\northeast}
+    \anchor{south west}{\northeast\pgf at x=-\pgf at x}
+    \anchor{north east}{\northeast\pgf at y=0pt\relax}
+    \anchor{north west}{\northeast\pgf at y=0pt\pgf at x=-\pgf at x}
+    \anchor{center}{\pgfpointorigin}
+    \anchor{left}{\pgfpointorigin}
+    \anchor{right}{\pgfpointorigin}
+    \anchor{text}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at circ@res at step=\ctikzvalof{monopoles/vcc/width}\pgf at circ@scaled at Rlen
+        \pgfpathmoveto{\pgfpoint{-.5\wd\pgfnodeparttextbox}{-2\pgf at circ@res at step-2\ht\pgfnodeparttextbox}}
+        \pgfpathmoveto{\pgfpoint{.5\wd\pgfnodeparttextbox}{-2\pgf at circ@res at step-2\ht\pgfnodeparttextbox}}
+        \pgf at x=0pt
+        \pgf at y=-2\pgf at circ@res at step
+        \advance \pgf at y by -1.5\ht\pgfnodeparttextbox
+        \pgf at x=-.5\wd\pgfnodeparttextbox
+    }
+
+    \behindforegroundpath{
+        \pgf at circ@scaled at Rlen=\scaledRlen
+        \pgf at circ@res at step=\ctikzvalof{monopoles/vcc/width}\pgf at circ@scaled at Rlen
+        \pgfscope
+            \edef\pgf at circ@temp{\ctikzvalof{monopoles/vee/arrow}}\edef\pgf at temp{legacy}
+            \ifx\pgf at temp\pgf at circ@temp
+
+                \pgfstartlinewidth=\pgflinewidth
+                \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+                \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{-.8\pgf at circ@res at step}}
+                \pgfpathlineto{\pgfpoint{0}{-1.5\pgf at circ@res at step}}
+                \pgfpathlineto{\pgfpoint{0.5\pgf at circ@res at step}{-.8\pgf at circ@res at step}}
+                \pgfusepath{draw}
+                \pgfsetlinewidth{\pgfstartlinewidth}
+            \else
+                \pgfsetarrowsend{\pgf at circ@temp}
+            \fi
+            \pgfpathmoveto{\pgfpointorigin}
+            \pgfpathlineto{\pgfpoint{0pt}{-1.5\pgf at circ@res at step}}
+            \pgfusepath{draw}
+        \endpgfscope
+    }
+}
+
+%%%%%%%%%%%%%%%%
+%% RF elements
+%%%%%%%%%%%%%%%%
+
+% Legacy tlinestub
+% Contributed by Leonardo Azzinnari
+\pgfdeclareshape{tlinestub}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \savedanchor{\northeast}{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at circ@res at step = \ctikzvalof{bipoles/tline/width} \pgf at circ@scaled at Rlen
+        \pgf at x=1.2\pgf at circ@res at step
+        \pgf at circ@res at step = \ctikzvalof{bipoles/tline/width} \pgf at circ@scaled at Rlen
+        \pgf at y=.2\pgf at circ@res at step%
+    }
+    % the center is on the left side of the shape for facility of usage
+    \anchor{north}{\northeast\pgf at x=0.5\pgf at x\relax}
+    \anchor{east}{\northeast\pgf at y=0cm\relax}
+    \anchor{south}{\northeast\pgf at y=-\pgf at y \pgf at x=0.5\pgf at x\relax}
+    \anchor{west}{\pgfpointorigin}
+    \anchor{north east}{\northeast}
+    \anchor{north west}{\northeast\pgf at x=0cm\relax}
+    \anchor{south east}{\northeast\pgf at y=-\pgf at y}
+    \anchor{south west}{\northeast\pgf at x=0cm\pgf at y=-\pgf at y}
+    \anchor{center}{\pgfpointorigin}
+    % this is not exact, but it's better than nothing
+    \anchor{text}{\northeast\pgf at xa=\pgf at x\pgf at ya=\pgf at y
+        \pgfpoint{\dimexpr-.5\wd\pgfnodeparttextbox+.8\pgf at xa}
+        {\dimexpr-.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf at ya}}
+    \behindforegroundpath{
+        \pgfstartlinewidth=\pgflinewidth
+
+        \pgf at circ@scaled at Rlen=\scaledRlen
+        \pgf at circ@res at step=\ctikzvalof{bipoles/tline/width}\pgf at circ@scaled at Rlen
+
+        \pgfscope\begin{pgftransparencygroup}
+            \pgfpathellipse{\pgfpoint{0.5\pgf at circ@res at step}{0\pgf at circ@res at step}}{\pgfpoint{0.125\pgf at circ@res at step}{0\pgf at circ@res at step}}{\pgfpoint{0\pgf at circ@res at step}{0.25\pgf at circ@res at step}}
+            \pgf at circ@maybefill
+            \pgfpathmoveto{\pgfpoint{0.5\pgf at circ@res at step}{0.25\pgf at circ@res at step}}
+            \pgfpathlineto{\pgfpoint{1.5\pgf at circ@res at step}{0.25\pgf at circ@res at step}}
+            \pgfpatharc{90}{-90}{0.125\pgf at circ@res at step and 0.25\pgf at circ@res at step}
+            \pgfpathlineto{\pgfpoint{0.5\pgf at circ@res at step}{-0.25\pgf at circ@res at step}}
+            \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+            \pgf at circ@draworfill
+            \pgfpathellipse{\pgfpoint{0.5\pgf at circ@res at step}{0\pgf at circ@res at step}}{\pgfpoint{0.125\pgf at circ@res at step}{0\pgf at circ@res at step}}{\pgfpoint{0\pgf at circ@res at step}{0.25\pgf at circ@res at step}}
+            \pgfusepath{draw}
+        \end{pgftransparencygroup} \endpgfscope
+        \pgfpathmoveto{\pgfpointorigin}
+        \pgfpathlineto{\pgfpoint{0.5\pgf at circ@res at step}{0pt}}
+        \pgfusepath{draw}
+    }
+}
+
+%% New antennas without tails
+
+% main body of antennas
+\def\pgf at circ@antennabody{%
+    \pgfstartlinewidth=\pgflinewidth
+    \pgf at circ@scaled at Rlen=\scaledRlen
+    \pgfsetcolor{\ctikzvalof{color}}
+    \pgf at circ@res at step=\ctikzvalof{monopoles/bareantenna/width}\pgf at circ@scaled at Rlen
+    \pgfscope
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgfpathmoveto{\pgfpointorigin}
+        \pgfpathlineto{\pgfpoint{-\pgf at circ@res at step}{2\pgf at circ@res at step}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{2\pgf at circ@res at step}}
+        \pgfsetbeveljoin
+        \pgfpathclose
+        \pgf at circ@draworfill
+    \endpgfscope
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpointorigin}
+    \pgfpathlineto{\pgfpoint{0pt}{2\pgf at circ@res at step}}
+    \pgfusepath{draw}
+}
+
+% Waves for the antennas.
+\def\pgf at circ@antennawaves{%
+    \pgfscope
+    % define a triangle for clipping the waves
+    \pgfpathmoveto{\pgfpoint{0pt}{\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{4.2\pgf at circ@res at step}{3\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{4.2\pgf at circ@res at step}{-1\pgf at circ@res at step}}
+    \pgfpathclose
+    \pgfusepath{clip}
+    % ...and build the waves as clipped circles
+    \pgf at circ@count at a=8\pgf at circ@res at other=0.5\pgf at circ@res at step
+    \pgfmathloop%
+    \ifnum\pgf at circ@count at a>2
+        \pgfpathcircle{\pgfpoint{0pt}{\pgf at circ@res at step}}{\the\pgf at circ@count at a*\pgf at circ@res at other}
+        \advance\pgf at circ@count at a-1\relax%
+        \repeatpgfmathloop
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+% additional shape with the waves
+\pgfdeclareshape{waves}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \anchor{center}{\pgfpointorigin}
+    \savedanchor{\northeast}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at circ@res at step=\ctikzvalof{monopoles/waves/width}\pgf at circ@scaled at Rlen
+        \pgf at x=\pgf at circ@res at step
+        \pgf at y=\pgf at circ@res at step
+    }
+    \anchor{text}{
+        \northeast
+        \pgf at y=\dimexpr\pgf at y+.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+    }
+    \anchor{top}{\northeast\pgf at x=0pt}
+    \anchor{right}{\northeast\pgf at y=0pt}
+    \anchor{left}{\northeast\pgf at x=-\pgf at x\pgf at y=0pt}
+    \anchor{bottom}{\northeast\pgf at y=-\pgf at y\pgf at x=0pt}
+    \anchor{north}{\northeast\pgf at x=0pt}
+    \anchor{north east}{\northeast}
+    \anchor{east}{\northeast\pgf at y=0pt}
+    \anchor{south east}{\northeast\pgf at y=-\pgf at y}
+    \anchor{south}{\northeast\pgf at y=-\pgf at y\pgf at x=0pt}
+    \anchor{south west}{\northeast\pgf at y=-\pgf at y\pgf at x=-\pgf at x}
+    \anchor{west}{\northeast\pgf at x=-\pgf at x\pgf at y=0pt}
+    \anchor{north west}{\northeast\pgf at x=-\pgf at x}
+    \behindforegroundpath{
+        \pgf at circ@scaled at Rlen=\scaledRlen
+        \pgf at circ@res at step=\ctikzvalof{monopoles/waves/width}\pgf at circ@scaled at Rlen
+        \pgf at circ@res at step=0.5\pgf at circ@res at step
+        \pgfsetcolor{\ctikzvalof{color}}
+        \pgfscope
+        % define a triangle for clipping the waves
+        \pgfpathmoveto{\pgfpoint{-2\pgf at circ@res at step}{0pt}}
+        \pgfpathlineto{\pgfpoint{2.1\pgf at circ@res at step}{2\pgf at circ@res at step}}
+        \pgfpathlineto{\pgfpoint{2.1\pgf at circ@res at step}{-2\pgf at circ@res at step}}
+        \pgfpathclose
+        \pgfusepath{clip}
+        % ...and build the waves as clipped circles
+        \c at pgf@counta=8\pgf at circ@res at other=0.5\pgf at circ@res at step
+        \pgfmathloop%
+        \ifnum\c at pgf@counta>1
+            \pgfpathcircle{\pgfpoint{-2\pgf at circ@res at step}{0pt}}{\the\c at pgf@counta*\pgf at circ@res at other}
+            \advance\c at pgf@counta-1\relax%
+            \repeatpgfmathloop
+            \pgfusepath{draw}
+        \endpgfscope
+    }
+}
+
+% the three types of antennas: simple, TX, RX. Notice that you can flip them...
+
+\pgfdeclareshape{bareantenna}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \anchor{center}{\pgfpointorigin}
+    \savedanchor{\northeast}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at circ@res at step=\ctikzvalof{monopoles/bareantenna/width}\pgf at circ@scaled at Rlen
+        \pgf at x=\pgf at circ@res at step
+        \pgf at y=2\pgf at circ@res at step
+    }
+    \anchor{text}{
+        \northeast
+        \pgf at x=\ctikzvalof{monopoles/bareantenna/label/xanchor}\pgf at x
+        \pgf at y=\ctikzvalof{monopoles/bareantenna/label/yanchor}\pgf at y
+        \pgf at y=\dimexpr\pgf at y+.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+    }
+    \anchor{top}{\northeast\pgf at x=0pt}
+    \anchor{right}{\northeast\pgf at y=0.5\pgf at y}
+    \anchor{left}{\northeast\pgf at x=-\pgf at x\pgf at y=0.5\pgf at y}
+    \anchor{bottom}{\pgfpointorigin}
+    \anchor{north}{\northeast\pgf at x=0pt}
+    \anchor{east}{\northeast\pgf at y=0.5\pgf at y}
+    \anchor{west}{\northeast\pgf at x=-\pgf at x\pgf at y=0.5\pgf at y}
+    \anchor{south}{\pgfpointorigin}
+    \anchor{north east}{\northeast}
+    \anchor{north west}{\northeast\pgf at x=-\pgf at x}
+    \anchor{south east}{\northeast\pgf at y=0pt\relax}
+    \anchor{south west}{\northeast\pgf at y=0pt\pgf at x=-\pgf at x}
+    \behindforegroundpath{
+        \pgf at circ@antennabody
+    }
+}
+
+\pgfdeclareshape{bareTXantenna}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \anchor{center}{\pgfpointorigin}
+    \savedanchor{\northeast}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at circ@res at step=\ctikzvalof{monopoles/bareantenna/width}\pgf at circ@scaled at Rlen
+        \pgf at x=\pgf at circ@res at step
+        \pgf at y=2\pgf at circ@res at step
+    }
+    \savedanchor{\savedwaves}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at circ@res at step=\ctikzvalof{monopoles/bareantenna/width}\pgf at circ@scaled at Rlen
+        \pgf at x=4.2\pgf at circ@res at step
+        \pgf at y=\pgf at circ@res at step
+    }
+    \anchor{text}{
+        \northeast
+        \pgf at x=\ctikzvalof{monopoles/bareantenna/label/xanchor}\pgf at x
+        \pgf at y=\ctikzvalof{monopoles/bareantenna/label/yanchor}\pgf at y
+        \pgf at x=\dimexpr-\pgf at x-\wd\pgfnodeparttextbox\relax
+        \pgf at y=\dimexpr\pgf at y+.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+    }
+    \anchor{waves}{\savedwaves}
+    \anchor{top}{\northeast\pgf at x=0pt}
+    \anchor{right}{\northeast\pgf at y=0.5\pgf at y}
+    \anchor{left}{\northeast\pgf at x=-\pgf at x\pgf at y=0.5\pgf at y}
+    \anchor{bottom}{\pgfpointorigin}
+    \anchor{north}{\northeast\pgf at x=0pt}
+    \anchor{east}{\northeast\pgf at y=0.5\pgf at y}
+    \anchor{west}{\northeast\pgf at x=-\pgf at x\pgf at y=0.5\pgf at y}
+    \anchor{south}{\pgfpointorigin}
+    \anchor{north east}{\northeast}
+    \anchor{north west}{\northeast\pgf at x=-\pgf at x}
+    \anchor{south east}{\northeast\pgf at y=0pt\relax}
+    \anchor{south west}{\northeast\pgf at y=0pt\pgf at x=-\pgf at x}
+    \behindforegroundpath{
+        \pgf at circ@antennabody
+        \pgf at circ@antennawaves
+    }
+}
+
+\pgfdeclareshape{bareRXantenna}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \anchor{center}{\pgfpointorigin}
+    \savedanchor{\northeast}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at circ@res at step=\ctikzvalof{monopoles/bareantenna/width}\pgf at circ@scaled at Rlen
+        \pgf at x=\pgf at circ@res at step
+        \pgf at y=2\pgf at circ@res at step
+    }
+    \savedanchor{\savedwaves}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at circ@res at step=\ctikzvalof{monopoles/bareantenna/width}\pgf at circ@scaled at Rlen
+        \pgf at x=-4.2\pgf at circ@res at step
+        \pgf at y=\pgf at circ@res at step
+    }
+    \anchor{text}{
+        \northeast
+        \pgf at x=\ctikzvalof{monopoles/bareantenna/label/xanchor}\pgf at x
+        \pgf at y=\ctikzvalof{monopoles/bareantenna/label/yanchor}\pgf at y
+        \pgf at y=\dimexpr\pgf at y+.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+    }
+    \anchor{waves}{\savedwaves}
+    \anchor{top}{\northeast\pgf at x=0pt}
+    \anchor{right}{\northeast\pgf at y=0.5\pgf at y}
+    \anchor{left}{\northeast\pgf at x=-\pgf at x\pgf at y=0.5\pgf at y}
+    \anchor{bottom}{\pgfpointorigin}
+    \anchor{north}{\northeast\pgf at x=0pt}
+    \anchor{east}{\northeast\pgf at y=0.5\pgf at y}
+    \anchor{west}{\northeast\pgf at x=-\pgf at x\pgf at y=0.5\pgf at y}
+    \anchor{south}{\pgfpointorigin}
+    \anchor{north east}{\northeast}
+    \anchor{north west}{\northeast\pgf at x=-\pgf at x}
+    \anchor{south east}{\northeast\pgf at y=0pt\relax}
+    \anchor{south west}{\northeast\pgf at y=0pt\pgf at x=-\pgf at x}
+    \behindforegroundpath{
+        \pgf at circ@antennabody
+        \pgftransformxshift{-5.2\pgf at circ@res at step}
+        \pgf at circ@antennawaves
+    }
+}
+
+%%% dynodes (see https://github.com/circuitikz/circuitikz/issues/469)
+\ctikzset{monopoles/dynode/width/.initial=0.4}
+\ctikzset{monopoles/dynode/height/.initial=0.8}
+\ctikzset{monopoles/dynode/arc pos/.initial=0.5}
+\ctikzset{monopoles/dynode/arc angle/.initial=30}
+\ctikzset{monopoles/dynode/top width/.initial=1.0}
+
+\pgfdeclareshape{dynode}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{tubes}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \anchor{center}{\pgfpointorigin}
+    \savedanchor{\northeast}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at x=\ctikzvalof{monopoles/dynode/width}\pgf at circ@scaled at Rlen
+        \pgf at x=0.5\pgf at x
+        \pgf at y=\ctikzvalof{monopoles/dynode/height}\pgf at circ@scaled at Rlen
+    }
+    \savedanchor{\arcpos}{% bottom part of the arc pos
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at x=0pt
+        \pgf at y=\ctikzvalof{monopoles/dynode/height}\pgf at circ@scaled at Rlen
+        \pgf at y=\ctikzvalof{monopoles/dynode/arc pos}\pgf at y
+    }
+    \savedanchor{\topright}{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at x=\ctikzvalof{monopoles/dynode/width}\pgf at circ@scaled at Rlen
+        \pgf at x=\ctikzvalof{monopoles/dynode/top width}\pgf at x
+        \pgf at x=0.5\pgf at x
+        \pgf at y=\ctikzvalof{monopoles/dynode/height}\pgf at circ@scaled at Rlen
+    }
+    \anchor{arc}{\arcpos}
+    \anchor{top right}{\topright}
+    \anchor{top left}{\topright\pgf at x=-\pgf at x}
+    \anchor{text}{
+        \northeast
+        \advance\pgf at x by 4pt\relax
+        \pgf at y=\dimexpr0.5\pgf at y+.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+    }
+    \anchor{top}{\northeast\pgf at x=0pt}
+    \anchor{right}{\northeast\pgf at y=0.5\pgf at y}
+    \anchor{left}{\northeast\pgf at x=-\pgf at x\pgf at y=0.5\pgf at y}
+    \anchor{bottom}{\pgfpointorigin}
+    \anchor{north}{\northeast\pgf at x=0pt}
+    \anchor{east}{\northeast\pgf at y=0.5\pgf at y}
+    \anchor{west}{\northeast\pgf at x=-\pgf at x\pgf at y=0.5\pgf at y}
+    \anchor{south}{\pgfpointorigin}
+    \anchor{north east}{\northeast}
+    \anchor{north west}{\northeast\pgf at x=-\pgf at x}
+    \anchor{south east}{\northeast\pgf at y=0pt\relax}
+    \anchor{south west}{\northeast\pgf at y=0pt\pgf at x=-\pgf at x}
+    \behindforegroundpath{
+        \pgfstartlinewidth=\pgflinewidth
+        \pgf at circ@scaled at Rlen=\scaledRlen
+        \pgfsetcolor{\ctikzvalof{color}}
+        \northeast
+        \pgf at circ@res at right=\pgf at x
+        \pgf at circ@res at up=\pgf at y
+        \arcpos
+        \pgf at circ@res at step=\pgf at y
+        % top
+        \pgfscope
+            \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+            \pgfpathmoveto{\pgfpoint{-\ctikzvalof{monopoles/dynode/top width}*\pgf at circ@res at right}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\ctikzvalof{monopoles/dynode/top width}*\pgf at circ@res at right}{\pgf at circ@res at up}}
+            \pgfusepath{draw}
+        \endpgfscope
+        % arc
+        \edef\@@angle{\ctikzvalof{monopoles/dynode/arc angle}}
+        \ifnum90=\@@angle\else % avoid divisions by zero
+            % radius
+            \pgfmathsetlength{\pgf at circ@res at other}{\pgf at circ@res at right/cos(\@@angle)}
+            % start angle y position
+            \pgfmathsetlength{\pgf at circ@res at step}{\pgf at circ@res at step+\pgf at circ@res at other*(1-sin(\@@angle))}
+            \pgfsetlinewidth{\pgfstartlinewidth}
+            \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at right}{\pgf at circ@res at step}}
+            \pgfpatharc{-180+\@@angle}{-\@@angle}{\pgf at circ@res at other}
+        \fi
+        % tail
+        \pgfpathmoveto{\pgfpointorigin}
+        \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+        \pgfusepath{draw}
+    }
+}
+% Microstrip monopoles
+
+\pgfdeclareshape{mslstub}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \savedanchor{\southeast}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at x=\ctikzvalof{bipoles/mstline/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at y=\ctikzvalof{bipoles/mstline/height}\pgf at circ@scaled at Rlen
+        \pgf at y=-.5\pgf at y
+    }
+    \savedanchor{\northwest}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at x=\ctikzvalof{bipoles/mstline/width}\pgf at circ@scaled at Rlen
+        \pgf at x=-.5\pgf at x
+        \pgf at y=\ctikzvalof{bipoles/mstline/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+    }
+    \anchor{north}{\northwest\pgf at x=0pt\relax}
+    \anchor{north east}{\northwest\pgf at x=-\pgf at x}
+    \anchor{east}{\southeast\pgf at y=0pt\relax}
+    \anchor{south east}{\southeast}
+    \anchor{south}{\southeast\pgf at x=0pt\relax}
+    \anchor{south west}{\southeast\pgf at x=-\pgf at x}
+    \anchor{west}{\northwest\pgf at y=0pt\relax}
+    \anchor{north west}{\northwest}
+    %
+    \anchor{center}{\northwest\pgf at y=0pt\relax}
+    \anchor{left}{\northwest\pgf at y=0pt\relax}
+    \anchor{right}{\southeast\pgf at y=0pt\relax}
+    % put the node text above and centered
+    \anchor{text}{\pgfextracty{\pgf at circ@res at up}{\northwest}
+        \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+            \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf at circ@res at up\relax
+        }
+    }
+    \behindbackgroundpath{
+        \pgfextracty{\pgf at circ@res at up}{\northwest}
+        \pgfextractx{\pgf at circ@res at right}{\southeast}
+        \pgfextractx{\pgf at circ@res at left}{\northwest}
+        \pgfextracty{\pgf at circ@res at down}{\southeast}
+        \pgfmathsetlength{\pgf at circ@res at step}{0.25*\pgf at circ@res at up}
+        \pgfstartlinewidth=\pgflinewidth
+        \pgfscope
+            \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+            \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+            \pgf at circ@draworfill
+        \endpgfscope
+    }
+}
+
+\pgfdeclareshape{msrstub}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \savedanchor{\southeast}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at x=\ctikzvalof{monopoles/msrstub/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at y=0pt\relax
+    }
+    \savedanchor{\northwest}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at x=\ctikzvalof{monopoles/msrstub/width}\pgf at circ@scaled at Rlen
+        \pgf at x=-.5\pgf at x
+        \pgf at y=\ctikzvalof{monopoles/msrstub/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+    }
+    \anchor{north}{\northwest\pgf at x=0pt\relax}
+    \anchor{north east}{\northwest\pgf at x=-\pgf at x}
+    \anchor{east}{\southeast\pgf at y=0pt\relax}
+    \anchor{south east}{\southeast}
+    \anchor{south}{\southeast\pgf at x=0pt\relax}
+    \anchor{south west}{\southeast\pgf at x=-\pgf at x}
+    \anchor{west}{\northwest\pgf at y=0pt\relax}
+    \anchor{north west}{\northwest}
+    %
+    \anchor{center}{\pgfpointorigin}
+    \anchor{left}{\pgfpointorigin}
+    \anchor{right}{\pgfpointorigin}
+    % put the node text above and centered
+    \anchor{text}{\pgfextracty{\pgf at circ@res at up}{\northwest}
+        \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+            \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf at circ@res at up\relax
+        }
+    }
+    \behindbackgroundpath{
+        \pgfextracty{\pgf at circ@res at up}{\northwest}
+        \pgfextractx{\pgf at circ@res at right}{\southeast}
+        \pgfextractx{\pgf at circ@res at left}{\northwest}
+        \pgfextracty{\pgf at circ@res at down}{\southeast}
+        \pgfmathsetlength{\pgf at circ@res at step}{0.25*\pgf at circ@res at up}
+        \pgfstartlinewidth=\pgflinewidth
+        \pgfscope
+            \pgfpathmoveto{\pgfpointorigin}
+            \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at step}}
+            \pgfusepath{draw}
+            \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+            \pgfpathmoveto{\pgfpointpolar{135}{\pgf at circ@res at step}}
+            \pgfpatharc{135}{45}{\pgf at circ@res at step}
+            \pgfpathlineto{\pgfpointpolar{45}{\pgf at circ@res at up}}
+            \pgfpatharc{45}{135}{\pgf at circ@res at up}
+            \pgfclosepath
+            \pgf at circ@draworfill
+        \endpgfscope
+    }
+}
+
+\pgfdeclareshape{msport}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \savedanchor{\southeast}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at x=\ctikzvalof{monopoles/msport/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at y=\ctikzvalof{bipoles/mstline/height}\pgf at circ@scaled at Rlen
+        \pgf at y=-.5\pgf at y
+    }
+    \savedanchor{\northwest}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at x=\ctikzvalof{monopoles/msport/width}\pgf at circ@scaled at Rlen
+        \pgf at x=-.5\pgf at x
+        \pgf at y=\ctikzvalof{bipoles/mstline/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+    }
+    \anchor{north}{\northwest\pgf at x=0pt\relax}
+    \anchor{north east}{\northwest\pgf at x=-\pgf at x}
+    \anchor{east}{\southeast\pgf at y=0pt\relax}
+    \anchor{south east}{\southeast}
+    \anchor{south}{\southeast\pgf at x=0pt\relax}
+    \anchor{south west}{\southeast\pgf at x=-\pgf at x}
+    \anchor{west}{\northwest\pgf at y=0pt\relax}
+    \anchor{north west}{\northwest}
+    %
+    \anchor{center}{\northwest\pgf at y=0pt\relax}
+    \anchor{left}{\northwest\pgf at y=0pt\relax}
+    \anchor{right}{\southeast\pgf at y=0pt\relax}
+    % put the node text above and centered
+    \anchor{text}{\pgfextracty{\pgf at circ@res at up}{\northwest}
+        \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+            \dimexpr-.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+        }
+    }
+    \behindbackgroundpath{
+        \pgfextracty{\pgf at circ@res at up}{\northwest}
+        \pgfextractx{\pgf at circ@res at right}{\southeast}
+        \pgfextractx{\pgf at circ@res at left}{\northwest}
+        \pgfextracty{\pgf at circ@res at down}{\southeast}
+        \pgfmathsetlength{\pgf at circ@res at step}{0.5*\pgf at circ@res at up}
+        \pgfstartlinewidth=\pgflinewidth
+        \pgfscope
+            \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at left+\pgf at circ@res at step}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at left+\pgf at circ@res at step}{\pgf at circ@res at down}}
+            \pgfpathclose
+            \pgf at circ@draworfill
+        \endpgfscope
+    }
+}
+
+% Legacy antennas (with tails)
+\def\pgf at circ@shift at antenna@xy#1#2{%
+    \pgf at y=\dimexpr\pgf at y+#2\pgf at circ@res at step
+    \pgf at x=\dimexpr\pgf at x+#1\pgf at circ@res at step
+\relax}
+
+% Legacy antenna
+\pgfdeclareshape{antenna}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \anchor{center}{\pgfpointorigin}
+    \savedanchor{\northeast}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at circ@res at step=\ctikzvalof{monopoles/antenna/width}\pgf at circ@scaled at Rlen
+        \pgf at x=\pgf at circ@res at step%-0.5\pgflinewidth
+        \pgf at y=4\pgf at circ@res at step
+    }
+    \anchor{north}{\northeast\pgf at circ@res at step=\pgf at x\pgf at x=0cm\pgf at circ@shift at antenna@xy{0}{2}}
+    \anchor{east}{\northeast\pgf at circ@res at step=\pgf at x\pgf at y=0cm\pgf at circ@shift at antenna@xy{0}{3}\relax}
+    \anchor{south}{\northeast\pgf at circ@res at step=\pgf at x\pgf at y=-\pgf at y \pgf at x=0cm\pgf at circ@shift at antenna@xy{0}{4}\relax}
+    \anchor{west}{\northeast\pgf at circ@res at step=\pgf at x\pgf at y=0cm\pgf at x=-\pgf at x\pgf at circ@shift at antenna@xy{0}{3}}
+    \anchor{north east}{\northeast\pgf at circ@res at step=\pgf at x\pgf at circ@shift at antenna@xy{0}{2}}
+    \anchor{north west}{\northeast\pgf at circ@res at step=\pgf at x\pgf at x=-\pgf at x\pgf at circ@shift at antenna@xy{0}{2}}
+    \anchor{south east}{\northeast\pgf at circ@res at step=\pgf at x\pgf at y=-\pgf at y\pgf at circ@shift at antenna@xy{0}{4}}
+    \anchor{south west}{\northeast\pgf at circ@res at step=\pgf at x\pgf at y=-\pgf at y\pgf at x=-\pgf at x\pgf at circ@shift at antenna@xy{0}{4}}
+    \anchor{text}{
+        \northeast
+        \pgf at x=\ctikzvalof{monopoles/antenna/label/xanchor}\pgf at x
+        \pgf at y=\ctikzvalof{monopoles/antenna/label/yanchor}\pgf at y
+    }
+    \behindforegroundpath{
+        \pgfstartlinewidth=\pgflinewidth
+        \pgf at circ@scaled at Rlen=\scaledRlen
+        \pgf at circ@res at step=\ctikzvalof{monopoles/antenna/width}\pgf at circ@scaled at Rlen
+
+        \pgftransformxshift{ -4\pgf at circ@res at step }
+
+        \pgfpathmoveto{\pgfpoint{4\pgf at circ@res at step-0.5\pgflinewidth}{0pt}}
+        \pgfpathlineto{\pgfpoint{4\pgf at circ@res at step-0.5\pgflinewidth}{6\pgf at circ@res at step}}
+
+        \pgfusepath{draw}
+
+        \pgfscope
+            \pgfpathmoveto{\pgfpoint{4\pgf at circ@res at step-0.5\pgflinewidth}{6\pgf at circ@res at step}}
+            \pgfpathlineto{\pgfpoint{5\pgf at circ@res at step-0.5\pgflinewidth}{6\pgf at circ@res at step}}
+            \pgfpathlineto{\pgfpoint{4\pgf at circ@res at step-0.5\pgflinewidth}{4\pgf at circ@res at step}}
+            \pgfpathlineto{\pgfpoint{3\pgf at circ@res at step-0.5\pgflinewidth}{6\pgf at circ@res at step}}
+            \pgfpathlineto{\pgfpoint{4\pgf at circ@res at step-0.5\pgflinewidth}{6\pgf at circ@res at step}}
+            \pgfsetcolor{\ctikzvalof{color}}
+            \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+            \pgfusepath{draw}
+        \endpgfscope
+        \pgfsetlinewidth{\pgfstartlinewidth}
+
+    }
+}
+
+% Legacy TX antenna
+\pgfdeclareshape{txantenna}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \anchor{center}{\pgfpointorigin}
+    \savedanchor{\northeast}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at circ@res at step=\ctikzvalof{monopoles/antenna/width}\pgf at circ@scaled at Rlen
+        \pgf at x=\pgf at circ@res at step%-0.5\pgflinewidth
+        \pgf at y=4\pgf at circ@res at step
+    }
+    \anchor{north}{\northeast\pgf at circ@res at step=\pgf at x\pgf at x=0cm\pgf at circ@shift at antenna@xy{2}{2}}
+    \anchor{east}{\northeast\pgf at circ@res at step=\pgf at x\pgf at y=0cm\pgf at circ@shift at antenna@xy{4}{3}\relax}
+    \anchor{south}{\northeast\pgf at circ@res at step=\pgf at x\pgf at y=-\pgf at y \pgf at x=0cm\pgf at circ@shift at antenna@xy{2}{4}\relax}
+    \anchor{west}{\northeast\pgf at circ@res at step=\pgf at x\pgf at y=0cm\pgf at x=-\pgf at x\pgf at circ@shift at antenna@xy{1}{3}}
+    \anchor{north east}{\northeast\pgf at circ@res at step=\pgf at x\pgf at circ@shift at antenna@xy{4}{2}}
+    \anchor{north west}{\northeast\pgf at circ@res at step=\pgf at x\pgf at x=-\pgf at x\pgf at circ@shift at antenna@xy{1}{2}}
+    \anchor{south east}{\northeast\pgf at circ@res at step=\pgf at x\pgf at y=-\pgf at y\pgf at circ@shift at antenna@xy{4}{4}}
+    \anchor{south west}{\northeast\pgf at circ@res at step=\pgf at x\pgf at y=-\pgf at y\pgf at x=-\pgf at x\pgf at circ@shift at antenna@xy{1}{4}}
+    \anchor{text}{
+        \northeast
+        \pgf at x=\ctikzvalof{monopoles/txantenna/label/xanchor}\pgf at x
+        \pgf at y=\ctikzvalof{monopoles/txantenna/label/yanchor}\pgf at y
+    }
+    \behindforegroundpath{
+        \pgfstartlinewidth=\pgflinewidth
+        \pgf at circ@scaled at Rlen=\scaledRlen
+        \pgf at circ@res at step=\ctikzvalof{monopoles/txantenna/width}\pgf at circ@scaled at Rlen
+
+        \pgfpathmoveto{\pgfpointorigin}
+        \pgfpathlineto{\pgfpoint{4\pgf at circ@res at step}{0pt}}
+        \pgfpathmoveto{\pgfpoint{4\pgf at circ@res at step-0.5\pgflinewidth}{0pt}}
+        \pgfpathlineto{\pgfpoint{4\pgf at circ@res at step-0.5\pgflinewidth}{6\pgf at circ@res at step}}
+
+        \pgfusepath{draw}
+
+        \pgfscope
+            \pgfpathmoveto{\pgfpoint{4\pgf at circ@res at step-0.5\pgflinewidth}{6\pgf at circ@res at step}}
+            \pgfpathlineto{\pgfpoint{5\pgf at circ@res at step-0.5\pgflinewidth}{6\pgf at circ@res at step}}
+            \pgfpathlineto{\pgfpoint{4\pgf at circ@res at step-0.5\pgflinewidth}{4\pgf at circ@res at step}}
+            \pgfpathlineto{\pgfpoint{3\pgf at circ@res at step-0.5\pgflinewidth}{6\pgf at circ@res at step}}
+            \pgfpathlineto{\pgfpoint{4\pgf at circ@res at step-0.5\pgflinewidth}{6\pgf at circ@res at step}}
+            \pgfsetcolor{\ctikzvalof{color}}
+            \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+            \pgfusepath{draw}
+        \endpgfscope
+        \pgfpathmoveto{\pgfpoint{5.5\pgf at circ@res at step}{6\pgf at circ@res at step}}
+        %        \pgfpatharc{60}{-60}{\pgf at circ@res at step and \pgf at circ@res at step}
+        \pgfpatharc{30}{-30}{2\pgf at circ@res at step}         \pgfpathmoveto{\pgfpoint{6\pgf at circ@res at step}{6.25\pgf at circ@res at step}}
+        \pgfpatharc{30}{-30}{2.5\pgf at circ@res at step}
+        \pgfpathmoveto{\pgfpoint{6.5\pgf at circ@res at step}{6.5\pgf at circ@res at step}}
+        \pgfpatharc{30}{-30}{3\pgf at circ@res at step}
+        \pgfpathmoveto{\pgfpoint{7\pgf at circ@res at step}{6.75\pgf at circ@res at step}}
+        \pgfpatharc{30}{-30}{3.5\pgf at circ@res at step}
+        \pgfpathmoveto{\pgfpoint{7.5\pgf at circ@res at step}{7\pgf at circ@res at step}}
+        \pgfpatharc{30}{-30}{4\pgf at circ@res at step}
+        \pgfusepath{draw}
+        \pgfsetlinewidth{\pgfstartlinewidth}
+
+    }
+}
+
+% Legacy RX antenna
+\pgfdeclareshape{rxantenna}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \anchor{center}{\pgfpointorigin}
+    \savedanchor{\northeast}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at circ@res at step=\ctikzvalof{monopoles/antenna/width}\pgf at circ@scaled at Rlen
+        \pgf at x=\pgf at circ@res at step%-0.5\pgflinewidth
+        \pgf at y=4\pgf at circ@res at step
+    }
+    \anchor{north}{\northeast\pgf at circ@res at step=\pgf at x\pgf at x=0cm\pgf at circ@shift at antenna@xy{2}{2}}
+    \anchor{east}{\northeast\pgf at circ@res at step=\pgf at x\pgf at y=0cm\pgf at circ@shift at antenna@xy{4}{3}\relax}
+    \anchor{south}{\northeast\pgf at circ@res at step=\pgf at x\pgf at y=-\pgf at y \pgf at x=0cm\pgf at circ@shift at antenna@xy{2}{4}\relax}
+    \anchor{west}{\northeast\pgf at circ@res at step=\pgf at x\pgf at y=0cm\pgf at x=-\pgf at x\pgf at circ@shift at antenna@xy{1}{3}}
+    \anchor{north east}{\northeast\pgf at circ@res at step=\pgf at x\pgf at circ@shift at antenna@xy{4}{2}}
+    \anchor{north west}{\northeast\pgf at circ@res at step=\pgf at x\pgf at x=-\pgf at x\pgf at circ@shift at antenna@xy{1}{2}}
+    \anchor{south east}{\northeast\pgf at circ@res at step=\pgf at x\pgf at y=-\pgf at y\pgf at circ@shift at antenna@xy{4}{4}}
+    \anchor{south west}{\northeast\pgf at circ@res at step=\pgf at x\pgf at y=-\pgf at y\pgf at x=-\pgf at x\pgf at circ@shift at antenna@xy{1}{4}}
+    \anchor{text}{
+        \northeast
+        \pgf at x=\ctikzvalof{monopoles/rxantenna/label/xanchor}\pgf at x
+        \pgf at y=\ctikzvalof{monopoles/rxantenna/label/yanchor}\pgf at y
+    }
+    \behindforegroundpath{
+        \pgfstartlinewidth=\pgflinewidth
+        \pgf at circ@scaled at Rlen=\scaledRlen
+        \pgf at circ@res at step=\ctikzvalof{monopoles/rxantenna/width}\pgf at circ@scaled at Rlen
+
+        \pgfpathmoveto{\pgfpointorigin}
+        \pgfpathlineto{\pgfpoint{4\pgf at circ@res at step}{0pt}}
+        \pgfpathmoveto{\pgfpoint{4\pgf at circ@res at step-0.5\pgflinewidth}{0pt}}
+        \pgfpathlineto{\pgfpoint{4\pgf at circ@res at step-0.5\pgflinewidth}{6\pgf at circ@res at step}}
+
+        \pgfusepath{draw}
+
+        \pgfscope
+            \pgfpathmoveto{\pgfpoint{4\pgf at circ@res at step-0.5\pgflinewidth}{6\pgf at circ@res at step}}
+            \pgfpathlineto{\pgfpoint{5\pgf at circ@res at step-0.5\pgflinewidth}{6\pgf at circ@res at step}}
+            \pgfpathlineto{\pgfpoint{4\pgf at circ@res at step-0.5\pgflinewidth}{4\pgf at circ@res at step}}
+            \pgfpathlineto{\pgfpoint{3\pgf at circ@res at step-0.5\pgflinewidth}{6\pgf at circ@res at step}}
+            \pgfpathlineto{\pgfpoint{4\pgf at circ@res at step-0.5\pgflinewidth}{6\pgf at circ@res at step}}
+            \pgfsetcolor{\ctikzvalof{color}}
+            \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+            \pgfusepath{draw}
+        \endpgfscope
+
+        \pgfpathmoveto{\pgfpoint{6\pgf at circ@res at step}{7\pgf at circ@res at step}}
+        %             \pgfpatharc{60}{-60}{\pgf at circ@res at step and \pgf at circ@res at step}
+        \pgfpatharc{150}{210}{4\pgf at circ@res at step}              \pgfpathmoveto{\pgfpoint{6.5\pgf at circ@res at step}{6.75\pgf at circ@res at step}}
+        \pgfpatharc{150}{210}{3.5\pgf at circ@res at step}
+        \pgfpathmoveto{\pgfpoint{7\pgf at circ@res at step}{6.5\pgf at circ@res at step}}
+        \pgfpatharc{150}{210}{3\pgf at circ@res at step}
+        \pgfpathmoveto{\pgfpoint{7.5\pgf at circ@res at step}{6.25\pgf at circ@res at step}}
+        \pgfpatharc{150}{210}{2.5\pgf at circ@res at step}
+        \pgfpathmoveto{\pgfpoint{8\pgf at circ@res at step}{6\pgf at circ@res at step}}
+        \pgfpatharc{150}{210}{2\pgf at circ@res at step}
+        \pgfusepath{draw}
+        \pgfsetlinewidth{\pgfstartlinewidth}
+    }
+}
+
+% Legacy match
+\pgfdeclareshape{match}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \savedanchor{\northeast}{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at circ@res at step = \ctikzvalof{monopoles/match/width} \pgf at circ@scaled at Rlen
+        \pgf at x=2\pgf at circ@res at step
+        \pgf at circ@res at step = \ctikzvalof{monopoles/match/width} \pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at circ@res at step%
+    }
+    % the center is on the left side of the shape for facility of usage
+    \anchor{north}{\northeast\pgf at x=0.5\pgf at x\relax}
+    \anchor{east}{\northeast\pgf at y=0cm\relax}
+    \anchor{south}{\northeast\pgf at y=0pt\pgf at x=0.5\pgf at x\relax}
+    \anchor{west}{\pgfpointorigin}
+    \anchor{north east}{\northeast}
+    \anchor{north west}{\northeast\pgf at x=0cm\relax}
+    \anchor{south east}{\northeast\pgf at y=0pt\relax}
+    \anchor{south west}{\pgfpointorigin}
+    \anchor{center}{
+        \pgfpointorigin
+    }
+    \anchor{text}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at x=\ctikzvalof{monopoles/match/width}\pgf at circ@scaled at Rlen
+        \pgf at x=1.5\pgf at x
+        \advance \pgf at x by -.5\wd\pgfnodeparttextbox
+        \pgf at y=-1.5\ht\pgfnodeparttextbox
+    }
+    \behindforegroundpath{
+        \pgf at circ@scaled at Rlen=\scaledRlen
+        \pgf at circ@res at step=\ctikzvalof{monopoles/match/width}\pgf at circ@scaled at Rlen
+
+        \pgfscope
+            \pgfpathmoveto{\pgfpointorigin}
+            \pgfpathlineto{\pgfpoint{2\pgf at circ@res at step}{0pt}}
+            \pgfusepath{draw}
+
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{0pt}}
+            \pgfpathlineto{\pgfpoint{2\pgf at circ@res at step}{0.5\pgf at circ@res at step}}
+            \pgfpathlineto{\pgfpoint{2\pgf at circ@res at step}{0}}
+            \pgfusepath{fill}
+
+            \pgfsetlinewidth{\pgfstartlinewidth}
+        \endpgfscope
+    }
+}
+
+%%%---------- close: tex/pgfcircmonopoles
+%%%%%%%%%%% Springe nach tex/pgfcircbipoles
+%%%---------- open: tex/pgfcircbipoles.tex
+% Copyright 2018-2020 by Romano Giannetti
+% Copyright 2015-2020 by Stefan Lindner
+% Copyright 2013-2020 by Stefan Erhardt
+% Copyright 2007-2020 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%% Generic macro for defining a bipole shape
+% #1 - additional anchors
+% #2 - lower y-size of the bipole (from the center).
+% #3 - #shape is the name of the shape
+% #4 - upper y-size of the bipole (from the center)
+% #5 - width of the bipole
+% #6 - macros drawing the bipole
+%
+\long\def\pgfcircdeclarebipole{%
+    \pgfcircdeclarebipolescaled{default}}
+
+%% Generic macro for defining a bipole shape
+% #1 - scale factor
+% #2 - additional anchors
+% #3 - lower y-size of the bipole (from the center).
+% #4 - #shape is the name of the shape
+% #5 - upper y-size of the bipole (from the center)
+% #6 - width of the bipole
+% #7 - macros drawing the bipole
+%
+\long\def\pgfcircdeclarebipolescaled#1#2#3#4#5#6#7{
+    \pgfdeclareshape{#4shape}{
+        \savedmacro{\ctikzclass}{\edef\ctikzclass{#1}}
+        \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+        \savedanchor{\northeast}{
+            \pgf at circ@scaled at Rlen=\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen
+            \pgf at y=#5\pgf at circ@scaled at Rlen
+            \pgf at y=.5\pgf at y
+            \pgf at x=#6\pgf at circ@scaled at Rlen
+            \pgf at x=.5\pgf at x
+        }
+        \savedanchor{\northeastborder}{
+            \pgf at circ@scaled at Rlen=\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen
+            \pgf at y=#5\pgf at circ@scaled at Rlen
+            \pgf at y=.5\pgf at y
+            \pgf at y=\ctikzvalof{bipoles/border margin}\pgf at y
+            \pgf at x=#6\pgf at circ@scaled at Rlen
+            \pgf at x=.5\pgf at x
+            \pgf at x=\ctikzvalof{bipoles/border margin}\pgf at x
+        }
+        \savedanchor{\southwestborder}{
+            \pgf at circ@scaled at Rlen=\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen
+            \pgf at y=-#3\pgf at circ@scaled at Rlen
+            \pgf at y=.5\pgf at y
+            \pgf at y=\ctikzvalof{bipoles/border margin}\pgf at y
+            \pgf at x=-#6\pgf at circ@scaled at Rlen
+            \pgf at x=.5\pgf at x
+            \pgf at x=\ctikzvalof{bipoles/border margin}\pgf at x
+        }
+        \savedanchor{\southwest}{
+            \pgf at circ@scaled at Rlen=\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen
+            \pgf at y=-#3\pgf at circ@scaled at Rlen
+            \pgf at y=.5\pgf at y
+            \pgf at x=-#6\pgf at circ@scaled at Rlen
+            \pgf at x=.5\pgf at x
+        }
+        \savedanchor{\centerpoint}{
+            \pgf at circ@scaled at Rlen=\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen
+            \pgf at circ@res at down=-#3\pgf at circ@scaled at Rlen
+            \pgf at circ@res at up=#5\pgf at circ@scaled at Rlen
+            \pgfpointorigin
+            \pgf at y=\pgf at circ@res at up
+            \advance\pgf at y by\pgf at circ@res at down
+            \pgf at y=.5\pgf at y
+        }
+        \anchor{center}{\pgfpointorigin}
+        \anchor{n}{
+            \northeast
+            \pgf at x=0cm
+        }
+        \anchor{north east}{
+            \northeast
+        }
+        \anchor{north west}{
+            \northeast
+            \pgf at x=-\pgf at x
+        }
+        \anchor{ne}{
+            \northeast
+        }
+        \anchor{nw}{
+            \northeast
+            \pgf at x=-\pgf at x
+        }
+        \anchor{e}{
+            \northeast
+            \pgf at y=0cm
+        }
+        \anchor{s}{
+            \southwest
+            \pgf at x=0cm
+        }
+        \anchor{south east}{
+            \southwest
+            \pgf at x=-\pgf at x
+        }
+        \anchor{south west}{
+            \southwest
+        }
+        \anchor{se}{
+            \southwest
+            \pgf at x=-\pgf at x
+        }
+        \anchor{sw}{
+            \southwest
+        }
+        \anchor{w}{
+            \southwest
+            \pgf at y=0cm
+        }
+        \anchor{north}{
+            \northeast
+            \pgf at x=0cm
+        }
+        \anchor{east}{
+            \northeast
+            \pgf at y=0cm
+        }
+        \anchor{south}{
+            \southwest
+            \pgf at x=0cm
+        }
+        \anchor{west}{
+            \southwest
+            \pgf at y=0cm
+        }
+        \anchor{right}{
+            \northeast
+            \pgf at y=0cm
+        }
+        \anchor{above}{
+            \northeast
+            \pgf at x=0cm
+        }
+        \anchor{left}{
+            \southwest
+            \pgf at y=0cm
+        }
+        \anchor{below}{
+            \southwest
+            \pgf at x=0cm
+        }
+        \anchor{a}{
+            \northeast
+            \pgf at y=0cm
+        }
+        \anchor{b}{
+            \southwest
+            \pgf at y=0cm
+        }
+        \savedanchor{\textanchor}{%
+            \pgf at y=\ht\pgfnodeparttextbox
+            \pgf at x=-.5\wd\pgfnodeparttextbox
+        }
+        \anchor{text}{
+            \textanchor
+        }
+        \anchorborder{%
+            \ifpgf at circuit@bipole at inverted
+                \pgf at circ@res at left=-\pgf at x
+                \pgf at circ@res at up=-\pgf at y
+            \else
+                \pgf at circ@res at left=\pgf at x
+                \pgf at circ@res at up=\pgf at y
+            \fi
+            \ifdim\pgf at circ@res at up>0cm
+                \pgfpointborderrectangle{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\northeastborder}
+            \else
+                \southwestborder
+                \pgfpointborderrectangle{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\pgfpoint{-\pgf at x}{-\pgf at y}}
+            \fi
+        }
+
+        #2
+
+        \backgroundpath{
+            \pgfsetcolor{\ctikzvalof{color}}
+
+            \northeast
+            \pgf at circ@res at up = \pgf at y
+            \pgf at circ@res at zero = 0cm
+            \pgf at circ@res at left = -\pgf at x
+            \pgf at circ@res at right = \pgf at x
+            \southwest
+            \pgf at circ@res at down = \pgf at y
+            \pgf at circ@scaled at Rlen=\scaledRlen
+            \pgfstartlinewidth=\pgflinewidth
+            \pgfsetcornersarced{\pgfpointorigin}% do not use rounded corners!
+            #7
+
+            \pgfsetlinewidth{\pgfstartlinewidth}
+        }
+    }
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% anchor adjustment macros
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Extend the border anchor position by the specified factors on the right-top (north east corner)
+% and the left-down (southwest border). Argument must be number (possibly decimal) without sign
+
+\def\pgfcirc at border@extend at full#1#2#3#4{% right, top, left, down
+    \anchorborder{%
+        \ifpgf at circuit@bipole at inverted
+            \pgf at circ@res at left=-\pgf at x
+            \pgf at circ@res at up=-\pgf at y
+        \else
+            \pgf at circ@res at left=\pgf at x
+            \pgf at circ@res at up=\pgf at y
+        \fi
+        \ifdim\pgf at circ@res at up>0cm
+            \northeastborder
+            \pgfpointborderrectangle{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\pgfpoint{#1\pgf at x}{#2\pgf at y}}
+        \else
+            \southwestborder
+            \pgfpointborderrectangle{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\pgfpoint{-#3\pgf at x}{-#4\pgf at y}}
+        \fi
+    }
+}
+
+% Just up and down (very common)
+\def\pgfcirc at border@extend at updown#1#2{\pgfcirc at border@extend at full{1}{#1}{1}{#2}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Standard bipole shapes declarations
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%
+% Resistive components
+%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% Short circuit
+
+%%% NOTICE that the short is really NOT drawn; we trust the fact that its
+%%% natural length is zero.
+\pgfcircdeclarebipole
+{% fix the anchor border to add a bit of space for voltage and labels
+    % it uses the dummy width and height
+    \anchorborder{%
+        \ifpgf at circuit@bipole at inverted
+            \pgf at circ@res at left=-\pgf at x
+            \pgf at circ@res at up=-\pgf at y
+        \else
+            \pgf at circ@res at left=\pgf at x
+            \pgf at circ@res at up=\pgf at y
+        \fi
+        \ifdim\pgf at circ@res at up>0cm
+            \pgf at x=\ctikzvalof{bipoles/short/width}\pgf at circ@Rlen
+            \pgf at y=\ctikzvalof{bipoles/short/height}\pgf at circ@Rlen
+            \pgfpointborderrectangle{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+            {\pgfpoint{\pgf at x}{\pgf at y}}
+        \else
+            \pgf at x=-\ctikzvalof{bipoles/short/width}\pgf at circ@Rlen
+            \pgf at y=-\ctikzvalof{bipoles/short/height}\pgf at circ@Rlen
+            \pgfpointborderrectangle{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+            {\pgfpoint{-\pgf at x}{-\pgf at y}}
+        \fi
+    }
+}
+{0}
+{short}
+{0}
+{0}
+{}
+
+%% Open circuit
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/open/height}}
+{open}
+{\ctikzvalof{bipoles/open/height}}
+{\ctikzvalof{bipoles/open/width}}
+{}
+
+% multiwire(s)
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/multiwire/height}}
+{multiwire}
+{\ctikzvalof{bipoles/multiwire/height}}
+{\ctikzvalof{bipoles/multiwire/width}}
+{
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+    \pgfusepath{draw}
+}
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/multiwire/height}}
+{bmultiwire}
+{\ctikzvalof{bipoles/multiwire/height}}
+{\ctikzvalof{bipoles/multiwire/width}}
+{
+    \pgf at circ@res at other=\ctikzvalof{bipoles/multiwire/spacing}\pgf at circ@Rlen
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left+\pgf at circ@res at other}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{\pgf at circ@res at up}}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+    \pgfusepath{draw}
+}
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/multiwire/height}}
+{tmultiwire}
+{\ctikzvalof{bipoles/multiwire/height}}
+{\ctikzvalof{bipoles/multiwire/width}}
+{
+    \pgf at circ@res at other=\ctikzvalof{bipoles/multiwire/spacing}\pgf at circ@Rlen
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left+\pgf at circ@res at other}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{\pgf at circ@res at up}}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left+2\pgf at circ@res at other}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{2\pgf at circ@res at other}{\pgf at circ@res at up}}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+    \pgfusepath{draw}
+}
+
+%
+%
+%% Generic bipole - used as resistor by some (bleah)
+\pgfcircdeclarebipolescaled{resistors}
+{}
+{\ctikzvalof{bipoles/generic/height}}
+{generic}
+{\ctikzvalof{bipoles/generic/height}}
+{\ctikzvalof{bipoles/generic/width}}
+{
+    \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgf at circ@draworfill
+}
+
+%
+% generic crossed, suggested by Radványi Patrik Tamás <patrikradvanyi at gmail.com>
+% inherit "generic" properties
+%
+\pgfcircdeclarebipolescaled{resistors}
+{}
+{\ctikzvalof{bipoles/generic/height}}
+{xgeneric}
+{\ctikzvalof{bipoles/generic/height}}
+{\ctikzvalof{bipoles/generic/width}}
+{
+    \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgf at circ@draworfill
+    % cross it
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfusepath{draw}
+}
+%% Generic empty tunable
+\pgfcircdeclarebipolescaled{resistors}
+{}
+{\ctikzvalof{bipoles/tgeneric/height}}
+{tgeneric}
+{\ctikzvalof{bipoles/tgeneric/height}}
+{\ctikzvalof{bipoles/tgeneric/width}}
+{
+    \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{.4\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{.4\pgf at circ@res at down}}
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgf at circ@draworfill
+    \pgfscope
+        \pgfsetarrowsend{latexslim}
+        \pgfpathmoveto{\pgfpoint{.5\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{-.5\pgf at circ@res at left}{\pgf at circ@res at down}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+%% Generic asymmetric bipole
+\pgfcircdeclarebipolescaled{resistors}
+{}
+{\ctikzvalof{bipoles/ageneric/height}}
+{ageneric}
+{\ctikzvalof{bipoles/ageneric/height}}
+{\ctikzvalof{bipoles/ageneric/width}}
+{
+    \pgfscope
+        \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgf at circ@draworfill
+    \endpgfscope
+
+    \pgfpathrectanglecorners{\pgfpoint{.7\pgf at circ@res at right}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfusepath{stroke,fill}
+}
+
+%% Memristor
+\pgfcircdeclarebipolescaled{resistors}
+{}
+{\ctikzvalof{bipoles/memristor/height}}
+{memristor}
+{\ctikzvalof{bipoles/memristor/height}}
+{\ctikzvalof{bipoles/memristor/width}}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/resistor/width}\pgf at circ@scaled at Rlen
+    \divide \pgf at circ@res at step by 14
+
+    \pgfscope
+        \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgf at circ@draworfill
+    \endpgfscope
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+    \pgfpathlineto{\pgfpoint{.72*\pgf at circ@res at left}{0pt}}
+    \pgfpathlineto{\pgfpoint{.72*\pgf at circ@res at left}{\ctikzvalof{bipoles/memristor/wave height}\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{.35*\pgf at circ@res at left}{\ctikzvalof{bipoles/memristor/wave height}\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{.35*\pgf at circ@res at left}{-\ctikzvalof{bipoles/memristor/wave height}\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{-.05*\pgf at circ@res at left}{-\ctikzvalof{bipoles/memristor/wave height}\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{-.05*\pgf at circ@res at left}{\ctikzvalof{bipoles/memristor/wave height}\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{.42*\pgf at circ@res at right}{\ctikzvalof{bipoles/memristor/wave height}\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{.42*\pgf at circ@res at right}{0pt}}
+    \pgfpathlineto{\pgfpoint{.8*\pgf at circ@res at right}{0pt}}
+
+    \pgfusepath{draw}
+
+    \pgfpathrectanglecorners{\pgfpoint{.7\pgf at circ@res at right}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfusepath{stroke,fill}
+}
+
+%% Photoresistor
+\pgfcircdeclarebipolescaled{resistors}
+{}
+{\ctikzvalof{bipoles/photoresistor/height 2}}
+{photoresistor}
+{\ctikzvalof{bipoles/photoresistor/height}}
+{\ctikzvalof{bipoles/photoresistor/width}}
+{
+    \pgfscope
+        \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}{\pgfpoint{\pgf at circ@res at right}{-\pgf at circ@res at down}}
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgf at circ@draworfill
+    \endpgfscope
+
+    \pgfscope
+        \pgfsetarrowsend{latexslim}
+        \pgfpathmoveto{\pgfpoint{.7\pgf at circ@res at right}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{.3\pgf at circ@res at right}{-1.2\pgf at circ@res at down}}
+        \pgfusepath{draw}
+        \pgfpathmoveto{\pgfpoint{.45\pgf at circ@res at right}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{.05\pgf at circ@res at right}{-1.2\pgf at circ@res at down}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+%% Thermistor
+\pgfcircdeclarebipolescaled{resistors}
+{% anchor for labelling the type of dependency
+    \anchor{label}{%
+        \southwest
+        \pgf at x=0.4\pgf at x
+        \pgf at y=1.2\pgf at y
+    }%
+    \pgfcirc at border@extend at updown{1}{1.2}
+}
+{\ctikzvalof{bipoles/thermistor/height}}
+{thermistor}
+{\ctikzvalof{bipoles/thermistor/height}}
+{\ctikzvalof{bipoles/thermistor/width}}
+{
+    \pgfscope
+    \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\ctikzvalof{bipoles/thermistor/main}\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{-\ctikzvalof{bipoles/thermistor/main}\pgf at circ@res at up}}
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgf at circ@draworfill
+    \endpgfscope
+
+    %\pgfscope
+    \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at left}{-\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{.4\pgf at circ@res at left}{1.2\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{1.2\pgf at circ@res at down}}
+    \pgfusepath{draw}
+    %\endpgfscope
+}
+
+%% Thermistor PTC
+\pgfcircdeclarebipolescaled{resistors}
+{}
+{\ctikzvalof{bipoles/thermistorptc/height 2}}
+{thermistorptc}
+{\ctikzvalof{bipoles/thermistorptc/height}}
+{\ctikzvalof{bipoles/thermistorptc/width}}
+{
+    \pgfscope
+        \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\ctikzvalof{bipoles/thermistorptc/main}\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{-\ctikzvalof{bipoles/thermistorptc/main}\pgf at circ@res at up}}
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgf at circ@draworfill
+    \endpgfscope
+    \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at left}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{.4\pgf at circ@res at left}{-\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{-\pgf at circ@res at up}}
+    \pgfusepath{draw}
+
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgftext[top,x=.85\pgf at circ@res at left,y=.75\pgf at circ@res at down]{\pgf at circ@font at tiny$\vartheta$}
+    \pgfsetarrowsend{latexslim}
+    \pgfpathmoveto{\pgfpoint{.62\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{.62\pgf at circ@res at left}{.7\pgf at circ@res at down}}
+    \pgfusepath{draw}
+    \pgfpathmoveto{\pgfpoint{.45\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{.45\pgf at circ@res at left}{.7\pgf at circ@res at down}}
+    \pgfusepath{draw}
+}
+
+%% Thermistor NTC
+\pgfcircdeclarebipolescaled{resistors}
+{}
+{\ctikzvalof{bipoles/thermistorntc/height 2}}
+{thermistorntc}
+{\ctikzvalof{bipoles/thermistorntc/height}}
+{\ctikzvalof{bipoles/thermistorntc/width}}
+{
+    \pgfscope
+        \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\ctikzvalof{bipoles/thermistorntc/main}\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{-\ctikzvalof{bipoles/thermistorntc/main}\pgf at circ@res at up}}
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgf at circ@draworfill
+    \endpgfscope
+
+    \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at left}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{.4\pgf at circ@res at left}{-\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{-\pgf at circ@res at up}}
+    \pgfusepath{draw}
+
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgftext[top,x=.85\pgf at circ@res at left,y=.75\pgf at circ@res at down]{\pgf at circ@font at tiny$\vartheta$}
+    \pgfsetarrowsend{latexslim}
+    \pgfpathmoveto{\pgfpoint{.62\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{.62\pgf at circ@res at left}{.7\pgf at circ@res at down}}
+    \pgfusepath{draw}
+    \pgfpathmoveto{\pgfpoint{.45\pgf at circ@res at left}{.7\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{.45\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfusepath{draw}
+}
+
+%% Generic tunable
+\pgfcircdeclarebipolescaled{resistors}
+{
+    \savedanchor{\wiper}{
+            \pgf at circ@scaled at Rlen=\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen
+            \pgf at ya=\ctikzvalof{bipoles/generic potentiometer/height}\pgf at circ@scaled at Rlen
+            \pgf at y=.5\pgf at ya
+            \pgf at xa=\ctikzvalof{bipoles/generic potentiometer/width}\pgf at circ@scaled at Rlen
+            \pgfmathsetlength{\pgf at x}{(\ctikzvalof{bipoles/generic potentiometer/wiper pos}-0.5)*\pgf at xa}
+        }
+    \anchor{wiper}{\wiper}
+    \anchor{W}{\wiper}
+}
+{\ctikzvalof{bipoles/generic potentiometer/height 2}}
+{genericpotentiometer}
+{\ctikzvalof{bipoles/generic potentiometer/height}}
+{\ctikzvalof{bipoles/generic potentiometer/width}}
+{
+
+    \pgf at circ@res at step = \ctikzvalof{bipoles/resistor/width}\pgf at circ@scaled at Rlen
+    \divide \pgf at circ@res at step by 14
+
+    \pgfscope
+        \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{-\pgf at circ@res at down}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgf at circ@draworfill
+    \endpgfscope
+    \pgfscope
+        %\pgfsetlinewidth{\pgfstartlinewidth}
+        \pgfsetarrowsend{latexslim}
+        \pgfextractx{\pgf at circ@res at other}{\wiper}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at other}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{-\pgf at circ@res at down}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+%% Zig zag resistores
+\def\pgf at circ@zigzag#1{%
+    \divide \pgf at circ@res at step by \numexpr4*\zigs\relax
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf at circ@res at zero}}
+    \pgf at circ@res at other = \pgf at circ@res at left
+    \pgf at circ@count at a=\zigs\relax
+    % first half zig
+    \advance\pgf at circ@res at other by \pgf at circ@res at step
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{-#1\pgf at circ@res at down}}
+    \pgfmathloop%
+    \advance\pgf at circ@count at a by -1\relax% Loop zigs -1 times
+    \ifnum\pgf at circ@count at a>0
+        \advance\pgf at circ@res at other by 2\pgf at circ@res at step
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{#1\pgf at circ@res at down}}
+        \advance\pgf at circ@res at other by 2\pgf at circ@res at step
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{-#1\pgf at circ@res at down}}
+    \repeatpgfmathloop%
+    % last zig and a half
+    \advance\pgf at circ@res at other by 2\pgf at circ@res at step
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{#1\pgf at circ@res at down}}
+    \advance\pgf at circ@res at other by \pgf at circ@res at step
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{\pgf at circ@res at zero}}
+    \pgfsetbeveljoin
+    \pgfusepath{draw}
+}
+
+%% Resistor
+\pgfcircdeclarebipolescaled{resistors}
+{
+\savedmacro{\zigs}{\edef\zigs{\ctikzvalof{resistors/zigs}}}
+}
+{\ctikzvalof{bipoles/resistor/height}}
+{resistor}
+{\ctikzvalof{bipoles/resistor/height}}
+{\ctikzvalof{bipoles/resistor/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgftransformationadjustments
+    \pgfmathsetlength{\pgf at circ@res at step}{\ctikzvalof{bipoles/resistor/width}*\scaledRlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+    \pgf at circ@zigzag{1}
+}
+
+
+%% Variable resistor
+\pgfcircdeclarebipolescaled{resistors}
+{
+\savedmacro{\zigs}{\edef\zigs{\ctikzvalof{resistors/zigs}}}
+}
+{\ctikzvalof{bipoles/vresistor/height}}
+{vresistor}
+{\ctikzvalof{bipoles/vresistor/height}}
+{\ctikzvalof{bipoles/vresistor/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgftransformationadjustments
+    \pgfmathsetlength{\pgf at circ@res at step}{\ctikzvalof{bipoles/vresistor/width}*\scaledRlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+    \pgf at circ@zigzag{.5}
+
+    \pgfscope
+        \pgfsetarrowsend{latexslim}
+        \pgfpathmoveto{\pgfpoint{.4\pgf at circ@res at other}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{-.4\pgf at circ@res at other}{\pgf at circ@res at down}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+%% Potentiometer
+\pgfcircdeclarebipolescaled{resistors}
+{
+    \savedanchor{\wiper}{
+            \pgf at circ@scaled at Rlen=\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen
+            \pgf at ya=\ctikzvalof{bipoles/potentiometer/height}\pgf at circ@scaled at Rlen
+            \pgf at y=.5\pgf at ya
+            \pgf at xa=\ctikzvalof{bipoles/potentiometer/width}\pgf at circ@scaled at Rlen
+            \pgfmathsetlength{\pgf at x}{(\ctikzvalof{bipoles/potentiometer/wiper pos}-0.5)*\pgf at xa}
+        }
+    \anchor{wiper}{\wiper}
+    \anchor{W}{\wiper}
+    \savedmacro{\zigs}{\edef\zigs{\ctikzvalof{resistors/zigs}}}
+}
+{\ctikzvalof{bipoles/potentiometer/height 2}}
+{potentiometer}
+{\ctikzvalof{bipoles/potentiometer/height}}
+{\ctikzvalof{bipoles/potentiometer/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgftransformationadjustments
+    \pgfmathsetlength{\pgf at circ@res at step}{\ctikzvalof{bipoles/potentiometer/width}*\scaledRlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+    \pgf at circ@zigzag{1}
+
+    \pgfscope
+        %\pgfsetlinewidth{\pgfstartlinewidth}
+        \pgfsetarrowsend{latexslim}
+        \pgfextractx{\pgf at circ@res at other}{\wiper}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at other}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{-\pgf at circ@res at down}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+%% Resistive sensor
+\pgfcircdeclarebipolescaled{resistors}
+{% anchor for labelling the type of dependency
+    \anchor{label}{\southwest\pgf at x=0.4\pgf at x}%
+    \savedmacro{\zigs}{\edef\zigs{\ctikzvalof{resistors/zigs}}}
+}
+{\ctikzvalof{bipoles/resistivesens/height}}
+{resistivesens}
+{\ctikzvalof{bipoles/resistivesens/height}}
+{\ctikzvalof{bipoles/resistivesens/width}}
+{%
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgftransformationadjustments
+    \pgfmathsetlength{\pgf at circ@res at step}{\ctikzvalof{bipoles/resistivesens/width}*\scaledRlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+    \pgf at circ@zigzag{.5}
+
+    \pgfscope
+        \pgfpathmoveto{\pgfpoint{.4\pgf at circ@res at other}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{-.4\pgf at circ@res at other}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{-.9\pgf at circ@res at other}{\pgf at circ@res at down}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+%%%%%%%%%%%%%%
+%% Capacitors
+%%%%%%%%%%%%%
+
+%% Plain Capacitor
+\pgfcircdeclarebipolescaled{capacitors}
+{}
+{\ctikzvalof{bipoles/capacitor/height}}
+{capacitor}
+{\ctikzvalof{bipoles/capacitor/height}}
+{\ctikzvalof{bipoles/capacitor/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfusepath{draw}
+
+}
+
+%% Capacitive sensor
+\pgfcircdeclarebipolescaled{capacitors}
+{
+    \anchor{label}{\southwest\pgf at x=2.6\pgf at x\pgf at y=1.2\pgf at y}%
+    \pgfcirc at border@extend at full{2.6}{1}{4.4}{1.2}
+}
+{\ctikzvalof{bipoles/capacitor/height}}
+{capacitivesens}
+{\ctikzvalof{bipoles/capacitor/height}}
+{\ctikzvalof{bipoles/capacitor/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfusepath{draw}
+    \pgfscope
+        \pgfpathmoveto{\pgfpoint{2.6\pgf at circ@res at right}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{-2.6\pgf at circ@res at right}{1.2\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{-4.4\pgf at circ@res at right}{1.2\pgf at circ@res at down}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+%% Polar Capacitor (DEPRECATED)
+\pgfcircdeclarebipolescaled{capacitors}
+{}
+{\ctikzvalof{bipoles/pcapacitor/height}}
+{polarcapacitor}
+{\ctikzvalof{bipoles/pcapacitor/height}}
+{\ctikzvalof{bipoles/pcapacitor/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgfscope
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left+ \ctikzvalof{bipoles/pcapacitor/bend width}\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgftransformrotate{-90}
+        \pgfpathsine{\pgfpoint{\pgf at circ@res at up}{-\ctikzvalof{bipoles/pcapacitor/bend width}\pgf at circ@res at left}}
+        \pgfpathcosine{\pgfpoint{\pgf at circ@res at up}{\ctikzvalof{bipoles/pcapacitor/bend width}\pgf at circ@res at left}}
+        \pgfusepath{draw}
+    \endpgfscope
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfusepath{draw}
+}
+
+
+%% Curved capacitor
+% see https://tex.stackexchange.com/questions/509594/polar-capacitor-orientation-in-circuitikz-seems-wrong
+% for a rationale
+%
+\pgfcircdeclarebipolescaled{capacitors}
+{}
+{\ctikzvalof{bipoles/ccapacitor/height}}
+{ccapacitor}
+{\ctikzvalof{bipoles/ccapacitor/height}}
+{\ctikzvalof{bipoles/ccapacitor/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgfscope
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right+ \ctikzvalof{bipoles/ccapacitor/bend width}\pgf at circ@res at right}{\pgf at circ@res at up}}
+        \pgftransformrotate{-90}
+        \pgfpathsine{\pgfpoint{\pgf at circ@res at up}{-\ctikzvalof{bipoles/ccapacitor/bend width}\pgf at circ@res at right}}
+        \pgfpathcosine{\pgfpoint{\pgf at circ@res at up}{\ctikzvalof{bipoles/ccapacitor/bend width}\pgf at circ@res at right}}
+        \pgfusepath{draw}
+    \endpgfscope
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfusepath{draw}
+}
+
+
+
+
+%% Electrolytic Capacitor
+\pgfcircdeclarebipolescaled{capacitors}
+{}
+{\ctikzvalof{bipoles/ecapacitor/height}}
+{ecapacitor}
+{\ctikzvalof{bipoles/ecapacitor/height}}
+{\ctikzvalof{bipoles/ecapacitor/width}}
+{
+    \pgfsetrectcap
+    % % % Draw plus pole
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{.4\pgf at circ@res at left}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{.4\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+    \pgf at circ@draworfill
+    % % Draw minus pole
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{.4\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{.4\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfsetfillcolor{\ctikzvalof{color}}
+    \pgfusepath{draw,fill}
+    \pgfsetfillcolor{\ctikzvalof{color}}
+    % % plus pole annotation
+    \pgftext[right,at=\pgfpoint{1.2\pgf at circ@res at left}{.6\pgf at circ@res at up}]
+    {\ctikzvalof{bipoles/ecapacitor/font} $+$}
+}
+
+%% Variable Capacitor
+\pgfcircdeclarebipolescaled{capacitors}
+{}
+{\ctikzvalof{bipoles/vcapacitor/height}}
+{vcapacitor}
+{\ctikzvalof{bipoles/vcapacitor/height}}
+{\ctikzvalof{bipoles/vcapacitor/width}}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/vcapacitor/capacitor width} \pgf at circ@res at right
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at step}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{-\pgf at circ@res at step}{\pgf at circ@res at down}}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{\pgf at circ@res at down}}
+    \pgfusepath{draw}
+
+    \pgfscope
+        \pgfsetarrowsend{latexslim}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+        \pgfusepath{draw}
+    \endpgfscope
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+    \pgfpathlineto{\pgfpoint{-\pgf at circ@res at step}{0pt}}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{0pt}}
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfusepath{draw}
+}
+
+
+%% Piezoelectric Element
+
+\pgfcircdeclarebipolescaled{capacitors}
+{}
+{\ctikzvalof{bipoles/piezoelectric/height}}
+{piezoelectric}
+{\ctikzvalof{bipoles/piezoelectric/height}}
+{\ctikzvalof{bipoles/piezoelectric/width}}
+{
+    % \pgf at circ@res at step = \ctikzvalof{bipoles/piezoelectric/width}\pgf at circ@Rlen
+    % \divide \pgf at circ@res at step by 5
+
+    %% Outer markings
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfusepath{draw}
+
+    %% Inner Box
+    \pgf at circ@res at step = \pgf at circ@res at right \divide \pgf at circ@res at step by 10
+    \pgfscope
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgfpathrectanglecorners
+            {\pgfpoint{\pgf at circ@res at left+4*\pgf at circ@res at step}{\pgf at circ@res at up-\pgf at circ@res at step}}
+            {\pgfpoint{\pgf at circ@res at right-4*\pgf at circ@res at step}{\pgf at circ@res at down+\pgf at circ@res at step}}
+        \pgf at circ@draworfill
+    \endpgfscope
+}
+
+%%%%%%%%%%%%%%%
+%% Inductors
+%%%%%%%%%%%%%%%
+
+%% cute inductor
+\pgfcircdeclarebipolescaled{inductors}
+{
+    \savedanchor{\midtap}{%
+        \pgf at x=0pt\relax
+        \pgfmathsetlength{\pgf at y}{%
+            (mod(\ctikzvalof{bipoles/cuteinductor/coils},2) ?%
+            \ctikzvalof{bipoles/cuteinductor/height} :% even
+            -\ctikzvalof{bipoles/cuteinductor/lower coil height}) %odd
+            *\pgf at circ@scaled at Rlen/2
+        }
+    }
+    \anchor{midtap}{\midtap}
+}
+{\ctikzvalof{bipoles/cuteinductor/lower coil height}}
+{cuteinductor}
+{\ctikzvalof{bipoles/cuteinductor/height}}
+{\ctikzvalof{bipoles/cuteinductor/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgftransformationadjustments
+
+    \pgfmathsetlength{\pgf at circ@res at other}%width of small coil
+    {0.5*\ctikzvalof{bipoles/cuteinductor/coil aspect}*\ctikzvalof{bipoles/cuteinductor/width}*\scaledRlen/(\ctikzvalof{bipoles/cuteinductor/coils}-1)}
+
+
+    \pgfmathsetlength{\pgf at circ@res at step}
+    {(\ctikzvalof{bipoles/cuteinductor/width}*\scaledRlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/cuteinductor/coils}-1)*2*\pgf at circ@res at other)/\ctikzvalof{bipoles/cuteinductor/coils}/2}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+    \foreach \x in {2,...,\ctikzvalof{bipoles/cuteinductor/coils}}
+    {
+        \pgfpatharc{180}{0}{\pgf at circ@res at step and \pgf at circ@res at up}
+        \pgfpatharc{0}{-180}{\pgf at circ@res at other and -\pgf at circ@res at down}
+    }
+    \pgfpatharc{180}{0}{\pgf at circ@res at step and \pgf at circ@res at up}
+    \pgfsetbuttcap
+    \pgfsetbeveljoin
+    \pgfusepath{stroke}
+}
+
+%% cute inductive sensor
+\pgfcircdeclarebipolescaled{inductors}
+{% anchor for labelling the type of dependency
+    \anchor{label}{\southwest\pgf at x=0.8\pgf at x\pgf at y=2.6\pgf at y}%
+    \savedanchor{\midtap}{%
+        \pgf at x=0pt\relax
+        \pgfmathsetlength{\pgf at y}{%
+            (mod(\ctikzvalof{bipoles/cuteinductor/coils},2) ?%
+            \ctikzvalof{bipoles/cuteinductor/height} :% even
+            -\ctikzvalof{bipoles/cuteinductor/lower coil height}) %odd
+            *\pgf at circ@scaled at Rlen/2
+        }
+    }
+    \anchor{midtap}{\midtap}
+    \pgfcirc at border@extend at full{1}{2}{1.6}{2.6}
+}
+{\ctikzvalof{bipoles/cuteinductor/lower coil height}}
+{scuteinductor}
+{\ctikzvalof{bipoles/cuteinductor/height}}
+{\ctikzvalof{bipoles/cuteinductor/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgftransformationadjustments
+
+    \pgfmathsetlength{\pgf at circ@res at other}%width of small coil
+    {0.5*\ctikzvalof{bipoles/cuteinductor/coil aspect}*\ctikzvalof{bipoles/cuteinductor/width}*\scaledRlen/(\ctikzvalof{bipoles/cuteinductor/coils}-1)}
+
+
+    \pgfmathsetlength{\pgf at circ@res at step}
+    {(\ctikzvalof{bipoles/cuteinductor/width}*\scaledRlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/cuteinductor/coils}-1)*2*\pgf at circ@res at other)/\ctikzvalof{bipoles/cuteinductor/coils}/2}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+    \foreach \x in {2,...,\ctikzvalof{bipoles/cuteinductor/coils}}
+    {
+        \pgfpatharc{180}{0}{\pgf at circ@res at step and \pgf at circ@res at up}
+        \pgfpatharc{0}{-180}{\pgf at circ@res at other and -\pgf at circ@res at down}
+    }
+    \pgfpatharc{180}{0}{\pgf at circ@res at step and \pgf at circ@res at up}
+    \pgfsetbuttcap
+    \pgfsetbeveljoin
+    \pgfusepath{stroke}
+    \pgfscope
+        \pgfpathmoveto{\pgfpoint{.8\pgf at circ@res at right}{2\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{-.8\pgf at circ@res at right}{2.6\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{-1.6\pgf at circ@res at right}{2.6\pgf at circ@res at down}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+%% cute choke
+\pgfcircdeclarebipolescaled{inductors}
+{
+    \savedanchor{\midtap}{%
+        \pgf at x=0pt\relax
+        \pgfmathsetlength{\pgf at y}{%
+            (mod(\ctikzvalof{bipoles/cuteinductor/coils},2) ?%
+            \ctikzvalof{bipoles/cuteinductor/height} :% even
+            -\ctikzvalof{bipoles/cuteinductor/lower coil height}) %odd
+            *\pgf at circ@scaled at Rlen/2
+        }
+    }
+    \anchor{midtap}{\midtap}
+}
+{\ctikzvalof{bipoles/cutechoke/lower coil height}}
+{cutechoke}
+{\ctikzvalof{bipoles/cutechoke/height}}
+{\ctikzvalof{bipoles/cutechoke/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgftransformationadjustments
+
+    \pgfmathsetlength{\pgf at circ@res at other}%width of small coil
+    {0.5*\ctikzvalof{bipoles/cutechoke/coil aspect}*\ctikzvalof{bipoles/cutechoke/width}*\scaledRlen/(\ctikzvalof{bipoles/cutechoke/coils}-1)}
+
+
+    \pgfmathsetlength{\pgf at circ@res at step}
+    {(\ctikzvalof{bipoles/cutechoke/width}*\scaledRlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/cutechoke/coils}-1)*2*\pgf at circ@res at other)/\ctikzvalof{bipoles/cutechoke/coils}/2}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+    \foreach \x in {2,...,\ctikzvalof{bipoles/cutechoke/coils}}
+    {
+        \pgfpatharc{180}{0}{\pgf at circ@res at step and \pgf at circ@res at up}
+        \pgfpatharc{0}{-180}{\pgf at circ@res at other and -\pgf at circ@res at down}
+    }
+    \pgfpatharc{180}{0}{\pgf at circ@res at step and \pgf at circ@res at up}
+    \pgfsetbuttcap
+    \pgfsetbeveljoin
+    \pgfusepath{stroke}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth+\ctikzvalof{bipoles/cutechoke/cdist}\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth+\ctikzvalof{bipoles/cutechoke/cdist}\pgf at circ@res at up}}
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfsetlinewidth{\ctikzvalof{bipoles/cutechoke/cthick}\pgflinewidth}
+    \pgfusepath{stroke}
+
+    \ifpgf at circuit@bipole at twolineschoke
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth+\ctikzvalof{bipoles/cutechoke/cdist}\pgf at circ@res at up+\ctikzvalof{bipoles/cutechoke/cstep}\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth+\ctikzvalof{bipoles/cutechoke/cdist}\pgf at circ@res at up+\ctikzvalof{bipoles/cutechoke/cstep}\pgf at circ@res at up}}
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgfsetlinewidth{\ctikzvalof{bipoles/cutechoke/cthick}\pgflinewidth}
+        \pgfusepath{stroke}
+    \fi
+}
+
+%% variable cute inductor
+\pgfcircdeclarebipolescaled{inductors}
+{
+    \savedanchor{\midtap}{%
+        \pgf at x=0pt\relax
+        \pgfmathsetlength{\pgf at y}{%
+            (mod(\ctikzvalof{bipoles/cuteinductor/coils},2) ?%
+            \ctikzvalof{bipoles/cuteinductor/height} :% even
+            -\ctikzvalof{bipoles/cuteinductor/lower coil height}) %odd
+            *\pgf at circ@scaled at Rlen/2
+        }
+    }
+    \anchor{midtap}{\midtap}
+}
+{\ctikzvalof{bipoles/vcuteinductor/lower coil height}}
+{vcuteinductor}
+{\ctikzvalof{bipoles/vcuteinductor/height}}
+{\ctikzvalof{bipoles/vcuteinductor/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgftransformationadjustments
+
+    \pgfmathsetlength{\pgf at circ@res at other}%width of small coil
+    {0.5*\ctikzvalof{bipoles/vcuteinductor/coil aspect}*\ctikzvalof{bipoles/vcuteinductor/width}*\scaledRlen/(\ctikzvalof{bipoles/vcuteinductor/coils}-1)}
+
+
+    \pgfmathsetlength{\pgf at circ@res at step}
+    {(\ctikzvalof{bipoles/vcuteinductor/width}*\scaledRlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/vcuteinductor/coils}-1)*2*\pgf at circ@res at other)/\ctikzvalof{bipoles/vcuteinductor/coils}/2}
+
+    \pgfscope
+        \pgfsetarrowsend{latexslim}
+        \pgfpathmoveto{\pgfpoint{.4\pgf at circ@res at left}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{.4\pgf at circ@res at right}{\pgf at circ@res at up}}
+        \pgfusepath{draw}
+    \endpgfscope
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+    \foreach \x in {2,...,\ctikzvalof{bipoles/vcuteinductor/coils}}
+    {
+        \pgfpatharc{180}{0}{\pgf at circ@res at step and .5\pgf at circ@res at up}
+        \pgfpatharc{0}{-180}{\pgf at circ@res at other and -.5\pgf at circ@res at down}
+    }
+    \pgfpatharc{180}{0}{\pgf at circ@res at step and .5\pgf at circ@res at up}
+    \pgfsetbuttcap
+    \pgfsetbeveljoin
+    \pgfusepath{stroke}
+}
+
+%% american inductor
+\pgfcircdeclarebipolescaled{inductors}
+{
+    \savedanchor{\midtap}{%
+        \pgf at x=0pt\relax
+        \pgfmathsetlength{\pgf at y}{%
+            (mod(\ctikzvalof{bipoles/americaninductor/coils},2) ?%
+            2*\ctikzvalof{bipoles/americaninductor/coil height} :% even
+            0) %odd
+            *\pgf at circ@scaled at Rlen/2
+        }
+    }
+    \anchor{midtap}{\midtap}
+}
+{\ctikzvalof{bipoles/americaninductor/height 2}}
+{americaninductor}
+{\ctikzvalof{bipoles/americaninductor/height}}
+{\ctikzvalof{bipoles/americaninductor/width}}
+{
+    \pgf at circ@res at step=\ctikzvalof{bipoles/americaninductor/width}\pgf at circ@scaled at Rlen
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgftransformationadjustments
+    \advance \pgf at circ@res at step by \pgfhorizontaltransformationadjustment\pgflinewidth
+    \divide \pgf at circ@res at step by \ctikzvalof{bipoles/americaninductor/coils}
+    \divide \pgf at circ@res at step by 2
+    \pgf at circ@res at other = \ctikzvalof{bipoles/americaninductor/coil height}\pgf at circ@scaled at Rlen
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+    \foreach \x in {1,...,\ctikzvalof{bipoles/americaninductor/coils}}
+    {
+        \pgfpatharc{180}{0}{\pgf at circ@res at step and  \pgf at circ@res at other}
+    }
+    \pgfsetbuttcap
+    \pgfsetbeveljoin
+    \pgfusepath{stroke}
+}
+
+
+%% american inductive sensor
+\pgfcircdeclarebipolescaled{inductors}
+{% anchor for labelling the type of dependency
+    \anchor{label}{\southwest\pgf at x=0.8\pgf at x\pgf at y=2.6\pgf at y}%
+    \savedanchor{\midtap}{%
+        \pgf at x=0pt\relax
+        \pgfmathsetlength{\pgf at y}{%
+            (mod(\ctikzvalof{bipoles/americaninductor/coils},2) ?%
+            2*\ctikzvalof{bipoles/americaninductor/coil height} :% even
+            0) %odd
+            *\pgf at circ@scaled at Rlen/2
+        }
+    }
+    \anchor{midtap}{\midtap}
+    \pgfcirc at border@extend at full{1}{2}{1.6}{2.6}
+}
+{\ctikzvalof{bipoles/americaninductor/height 2}}
+{samericaninductor}
+{\ctikzvalof{bipoles/americaninductor/height}}
+{\ctikzvalof{bipoles/americaninductor/width}}
+{
+    \pgf at circ@res at step=\ctikzvalof{bipoles/americaninductor/width}\pgf at circ@scaled at Rlen
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgftransformationadjustments
+    \advance \pgf at circ@res at step by \pgfhorizontaltransformationadjustment\pgflinewidth
+    \divide \pgf at circ@res at step by \ctikzvalof{bipoles/americaninductor/coils}
+    \divide \pgf at circ@res at step by 2
+    \pgf at circ@res at other = \ctikzvalof{bipoles/americaninductor/coil height}\pgf at circ@scaled at Rlen
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+    \foreach \x in {1,...,\ctikzvalof{bipoles/americaninductor/coils}}
+    {
+        \pgfpatharc{180}{0}{\pgf at circ@res at step and  \pgf at circ@res at other}
+    }
+    \pgfsetbuttcap
+    \pgfsetbeveljoin
+    \pgfusepath{stroke}
+    \pgfscope
+        \pgfpathmoveto{\pgfpoint{.8\pgf at circ@res at right}{2\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{-.8\pgf at circ@res at right}{2.6\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{-1.6\pgf at circ@res at right}{2.6\pgf at circ@res at down}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+%% variable american inductor
+\pgfcircdeclarebipolescaled{inductors}
+{
+    \savedanchor{\midtap}{%
+        \pgf at x=0pt\relax
+        \pgfmathsetlength{\pgf at y}{%
+            (mod(\ctikzvalof{bipoles/vamericaninductor/coils},2) ?%
+            2*\ctikzvalof{bipoles/vamericaninductor/coil height} :% even
+            0) %odd
+            *\pgf at circ@scaled at Rlen/2
+        }
+    }
+    \anchor{midtap}{\midtap}
+}
+{\ctikzvalof{bipoles/vamericaninductor/height 2}}
+{vamericaninductor}
+{\ctikzvalof{bipoles/vamericaninductor/height}}
+{\ctikzvalof{bipoles/vamericaninductor/width}}
+{
+    \pgf at circ@res at step=\ctikzvalof{bipoles/vamericaninductor/width}\pgf at circ@scaled at Rlen
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgftransformationadjustments
+    \advance \pgf at circ@res at step by \pgfhorizontaltransformationadjustment\pgflinewidth
+    \divide \pgf at circ@res at step by \ctikzvalof{bipoles/vamericaninductor/coils}
+    \divide \pgf at circ@res at step by 2
+    \pgf at circ@res at other = \ctikzvalof{bipoles/vamericaninductor/coil height}\pgf at circ@scaled at Rlen
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+    \foreach \x in {1,...,\ctikzvalof{bipoles/vamericaninductor/coils}}
+    {
+        \pgfpatharc{180}{0}{\pgf at circ@res at step and  \pgf at circ@res at other}
+    }
+    \pgfsetbuttcap
+    \pgfsetbeveljoin
+    \pgfusepath{stroke}
+
+    \pgfscope
+        \pgfsetarrowsend{latexslim}
+        \pgfpathmoveto{\pgfpoint{.4\pgf at circ@res at left}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{-.4\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+%% Generic bipole, filled - used as inductor by some
+\pgfcircdeclarebipolescaled{inductors}
+{
+    \anchor{midtap}{\northeast\pgf at x=0pt\relax}
+}
+{\ctikzvalof{bipoles/fullgeneric/height}}
+{fullgeneric}
+{\ctikzvalof{bipoles/fullgeneric/height}}
+{\ctikzvalof{bipoles/fullgeneric/width}}
+{
+    \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgfusepath{draw,fill}
+}
+
+%% Generic sensor, filled - used as inductive sensor by some
+\pgfcircdeclarebipolescaled{inductors}
+{% anchor for labelling the type of dependency
+    \anchor{label}{\southwest\pgf at x=0.4\pgf at x\pgf at y=2\pgf at y}%
+    \anchor{midtap}{\northeast\pgf at x=0pt\relax}
+    \pgfcirc at border@extend at full{1}{2}{1}{2}
+}
+{\ctikzvalof{bipoles/fullgeneric/height}}
+{sfullgeneric}
+{\ctikzvalof{bipoles/fullgeneric/height}}
+{\ctikzvalof{bipoles/fullgeneric/width}}
+{
+
+    \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfusepath{draw,fill}
+    %\pgfscope
+    \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at left}{-2\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{.4\pgf at circ@res at left}{2\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{2\pgf at circ@res at down}}
+    \pgfusepath{draw}
+    %\endpgfscope
+}
+
+%% Generic full tunable
+\pgfcircdeclarebipolescaled{inductors}
+{
+    \anchor{midtap}{\northeast\pgf at x=0pt\relax}
+}
+{\ctikzvalof{bipoles/tfullgeneric/height}}
+{tfullgeneric}
+{\ctikzvalof{bipoles/tfullgeneric/height}}
+{\ctikzvalof{bipoles/tfullgeneric/width}}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/resistor/width}\pgf at circ@Rlen
+    \divide \pgf at circ@res at step by 14
+
+    \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{.4\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{.4\pgf at circ@res at down}}
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfusepath{draw,fill}
+
+    \pgfscope
+        \pgfsetarrowsend{latexslim}
+        \pgfpathmoveto{\pgfpoint{.5\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{-.5\pgf at circ@res at left}{\pgf at circ@res at down}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+%%%%%%%%%%%
+%% Battery
+%%%%%%%%%%%
+
+%% Battery
+\pgfcircdeclarebipolescaled{batteries}
+{}
+{\ctikzvalof{bipoles/battery/height}}
+{battery}
+{\ctikzvalof{bipoles/battery/height}}
+{\ctikzvalof{bipoles/battery/width}}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/battery/width}\pgf at circ@scaled at Rlen
+    \divide \pgf at circ@res at step by 6
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \ifpgf at circ@fixbatteries
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{.5\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{.5\pgf at circ@res at down}}
+
+        \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at step}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{-\pgf at circ@res at step}{\pgf at circ@res at down}}
+
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{.5\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{.5\pgf at circ@res at down}}
+
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \else
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+
+        \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at step}{.5\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{-\pgf at circ@res at step}{.5\pgf at circ@res at down}}
+
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{\pgf at circ@res at down}}
+
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{.5\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{.5\pgf at circ@res at down}}
+    \fi
+    \pgfusepath{draw}
+}
+
+
+%% Battery 1 % poles with equl thickness
+
+\pgfcircdeclarebipolescaled{batteries}
+{}
+{\ctikzvalof{bipoles/battery1/height}}
+{battery1}
+{\ctikzvalof{bipoles/battery1/height}}
+{\ctikzvalof{bipoles/battery1/width}}
+{
+    \pgfpathmoveto{\pgfpoint{.33\pgf at circ@res at right}{0}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0}}
+    \pgfpathmoveto{\pgfpoint{.33\pgf at circ@res at left}{0}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{0}}
+    \pgfusepath{draw}
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \ifpgf at circ@fixbatteries
+        \pgfpathmoveto{\pgfpoint{.33\pgf at circ@res at right}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{.33\pgf at circ@res at right}{\pgf at circ@res at down}}
+
+        \pgfpathmoveto{\pgfpoint{.33\pgf at circ@res at left}{.5\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{.33\pgf at circ@res at left}{.5\pgf at circ@res at down}}
+    \else
+        \pgfpathmoveto{\pgfpoint{.33\pgf at circ@res at right}{.5\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{.33\pgf at circ@res at right}{.5\pgf at circ@res at down}}
+
+        \pgfpathmoveto{\pgfpoint{.33\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{.33\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \fi
+    \pgfusepath{draw}
+}
+
+%% Battery 2 % negative pole thicker
+
+\pgfcircdeclarebipolescaled{batteries}
+{}
+{\ctikzvalof{bipoles/battery2/height}}
+{battery2}
+{\ctikzvalof{bipoles/battery2/height}}
+{\ctikzvalof{bipoles/battery2/width}}
+{
+    \pgfpathmoveto{\pgfpoint{.33\pgf at circ@res at right}{0}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0}}
+    \pgfpathmoveto{\pgfpoint{.33\pgf at circ@res at left}{0}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{0}}
+    \pgfusepath{draw}
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \ifpgf at circ@fixbatteries
+        \pgfpathmoveto{\pgfpoint{.33\pgf at circ@res at right}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{.33\pgf at circ@res at right}{\pgf at circ@res at down}}
+        \pgfusepath{draw}
+        \pgfsetlinewidth{3\pgflinewidth}
+        \pgfpathmoveto{\pgfpoint{.33\pgf at circ@res at left}{.5\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{.33\pgf at circ@res at left}{.5\pgf at circ@res at down}}
+    \else
+        \pgfpathmoveto{\pgfpoint{.33\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{.33\pgf at circ@res at left}{\pgf at circ@res at down}}
+        \pgfusepath{draw}
+        \pgfsetlinewidth{3\pgflinewidth}
+        \pgfpathmoveto{\pgfpoint{.33\pgf at circ@res at right}{.5\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{.33\pgf at circ@res at right}{.5\pgf at circ@res at down}}
+    \fi
+    \pgfusepath{draw}
+}
+
+%%%%%%%%%%%
+%% Round and diamond sources
+%%%%%%%%%%%
+
+%% Independent voltage source
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/vsource/height}}
+{vsource}
+{\ctikzvalof{bipoles/vsource/height}}
+{\ctikzvalof{bipoles/vsource/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
+    \pgf at circ@draworfill
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at zero}}
+    \pgfusepath{draw}
+}
+
+%% To change the internal symbols of the voltage source american style
+\ctikzset{bipoles/vsourceam/inner plus/.initial={$+$}}
+\ctikzset{bipoles/vsourceam/inner minus/.initial={$-$}}
+%% Independent voltage source - American style
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/vsourceam/height}}
+{vsourceAM}
+{\ctikzvalof{bipoles/vsourceam/height}}
+{\ctikzvalof{bipoles/vsourceam/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
+    \pgf at circ@draworfill
+    \pgfsetcolor{\ctikzvalof{color}}
+    \ifpgf at circ@oldvoltagedirection
+    \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf at circ@res at down]{\ctikzvalof{bipoles/vsourceam/inner plus}}
+        \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf at circ@res at up]{\ctikzvalof{bipoles/vsourceam/inner minus}}
+    \else
+        \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf at circ@res at down]{\ctikzvalof{bipoles/vsourceam/inner minus}}
+        \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf at circ@res at up]{\ctikzvalof{bipoles/vsourceam/inner plus}}
+    \fi
+}
+
+%% Independent sinusoidal voltage source
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/vsourcesin/height}}
+{vsourcesin}
+{\ctikzvalof{bipoles/vsourcesin/height}}
+{\ctikzvalof{bipoles/vsourcesin/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
+    \pgf at circ@draworfill
+
+    \pgf at circ@res at up = .5\pgf at circ@res at up
+    \pgfscope
+        \pgftransformrotate{90}
+        \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at up}{0cm}}
+        \pgfpathsine{\pgfpoint{.5\pgf at circ@res at up}{.5\pgf at circ@res at up}}
+        \pgfpathcosine{\pgfpoint{.5\pgf at circ@res at up}{-.5\pgf at circ@res at up}}
+        \pgfpathsine{\pgfpoint{.5\pgf at circ@res at up}{-.5\pgf at circ@res at up}}
+        \pgfpathcosine{\pgfpoint{.5\pgf at circ@res at up}{.5\pgf at circ@res at up}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+% Square Voltage source -  contributed by Alistair Kwan
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/vsourcesquare/height}}
+{vsourcesquare}
+{\ctikzvalof{bipoles/vsourcesquare/height}}
+{\ctikzvalof{bipoles/vsourcesquare/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
+    \pgf at circ@draworfill
+    \pgf at circ@res at up = .5\pgf at circ@res at up
+    \pgfscope
+        \pgftransformrotate{90}
+        \pgfpathmoveto{\pgfpoint{-1\pgf at circ@res at up}{0cm}}
+        \pgfpathlineto{\pgfpoint{-1\pgf at circ@res at up}{1\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0\pgf at circ@res at up}{1\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0\pgf at circ@res at up}{-1\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{1\pgf at circ@res at up}{-1\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{1\pgf at circ@res at up}{0\pgf at circ@res at up}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+% Triangle Voltage source - contributed by Ralf Farkas
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/vsourcetri/height}}
+{vsourcetri}
+{\ctikzvalof{bipoles/vsourcetri/height}}
+{\ctikzvalof{bipoles/vsourcetri/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
+    \pgf at circ@draworfill
+
+    \pgf at circ@res at up = .5\pgf at circ@res at up
+    \pgfscope
+        \pgftransformrotate{90}
+        \pgfpathmoveto{\pgfpoint{-1\pgf at circ@res at up}{0cm}}
+        \pgfpathlineto{\pgfpoint{-0.5\pgf at circ@res at up}{0.75\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0.5\pgf at circ@res at up}{-0.75\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{1\pgf at circ@res at up}{0\pgf at circ@res at up}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+
+%% PV Source
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/pvsource/height}}
+{pvsource}
+{\ctikzvalof{bipoles/pvsource/height}}
+{\ctikzvalof{bipoles/pvsource/width}}
+{
+    \pgfpointorigin
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{\pgf at circ@res at up}}
+    \pgf at circ@draworfill
+
+    \pgfpathmoveto{\pgfpoint{.15\pgf at circ@res at right}{0}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0}}
+    \pgfpathmoveto{\pgfpoint{.15\pgf at circ@res at left}{0}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{0}}
+    \pgfusepath{draw}
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{.15\pgf at circ@res at left}{.4\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{.15\pgf at circ@res at left}{.4\pgf at circ@res at down}}
+
+    \pgfpathmoveto{\pgfpoint{.15\pgf at circ@res at right}{.6\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{.15\pgf at circ@res at right}{.6\pgf at circ@res at down}}
+    \pgfusepath{draw}
+
+    %Arrow Part
+    \pgfscope
+        \pgfsetarrowsend{latex}
+        \pgfpathmoveto{\pgfpointadd{\pgfpoint{.3\pgf at circ@res at left}{0}}{\pgfpointpolar{-45}{2.2\pgf at circ@res at up}}}
+        \pgfpathlineto{\pgfpointadd{\pgfpoint{.3\pgf at circ@res at left}{0}}{\pgfpointpolar{-45}{1.3\pgf at circ@res at up}}}
+        \pgfusepath{draw}
+        \pgfpathmoveto{\pgfpointadd{\pgfpoint{0}{0.3\pgf at circ@res at up}}{\pgfpointpolar{-45}{2.2\pgf at circ@res at up}}}
+        \pgfpathlineto{\pgfpointadd{\pgfpoint{0}{0.3\pgf at circ@res at up}}{\pgfpointpolar{-45}{1.3\pgf at circ@res at up}}}
+        \pgfusepath{draw}
+    \endpgfscope
+
+}
+
+%% Empty Source
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/esource/height}}
+{esource}
+{\ctikzvalof{bipoles/esource/height}}
+{\ctikzvalof{bipoles/esource/width}}
+{
+    \pgfpointorigin
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
+    \pgf at circ@draworfill
+}
+
+%% DC Current Source with open shape
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/dcisource/height}}
+{dcisource}
+{\ctikzvalof{bipoles/dcisource/height}}
+{\ctikzvalof{bipoles/dcisource/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpointorigin}
+    \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
+    \pgf at circ@maybefill
+    \edef\@@angle{\ctikzvalof{bipoles/dcisource/angle}}
+    \pgfpathmoveto{\pgfpointpolar{\@@angle}{\pgf at circ@res at up}}
+    \pgfpatharc{\@@angle}{-\@@angle}{\pgf at circ@res at up}
+    \pgfpathmoveto{\pgfpointpolar{180-\@@angle}{\pgf at circ@res at up}}
+    \pgfpatharc{180-\@@angle}{180+\@@angle}{\pgf at circ@res at up}
+    \pgfusepath{draw}
+
+    \pgfpathmoveto{\pgfpoint{.7\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgfpathlineto{\pgfpoint{.6\pgf at circ@res at right}{\pgf at circ@res at zero}}
+    \pgfusepath{draw}
+    \pgfscope
+        \pgftransformshift{\pgfpoint{.5\pgf at circ@res at right}{\pgf at circ@res at zero}}
+        \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+    \endpgfscope
+}
+
+%% DC-Voltage source
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/dcvsource/height}}
+{dcvsource}
+{\ctikzvalof{bipoles/dcvsource/height}}
+{\ctikzvalof{bipoles/dcvsource/width}}
+{
+    \pgfpointorigin
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
+    \pgf at circ@draworfill
+    \pgfpathmoveto{\pgfpoint{.2\pgf at circ@res at up}{.5\pgf at circ@res at left}}
+    \pgfpathlineto{\pgfpoint{.2\pgf at circ@res at up}{.5\pgf at circ@res at right}}
+    \pgfpathmoveto{\pgfpoint{.2\pgf at circ@res at down}{.5\pgf at circ@res at left}}
+    \pgfpathlineto{\pgfpoint{.2\pgf at circ@res at down}{.5\pgf at circ@res at right}}
+    \pgfusepath{draw}
+}
+
+%% Independent current source
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/isource/height}}
+{isource}
+{\ctikzvalof{bipoles/isource/height}}
+{\ctikzvalof{bipoles/isource/width}}
+{
+    \pgfpointorigin
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{\pgf at circ@res at down}}
+    \pgf at circ@draworfill
+}
+
+%% Independent double oo source
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/oosource/height}}
+{oosource}
+{\ctikzvalof{bipoles/oosource/height}}
+{\ctikzvalof{bipoles/oosource/width}}
+{
+    \pgfpointorigin
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosource/circleoffset}\pgf at circ@res at left}{0}}
+        {\ctikzvalof{bipoles/oosource/circlesize}\pgf at circ@res at left}
+    \pgf at circ@maybefill
+    \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosource/circleoffset}\pgf at circ@res at right}{0}}
+        {\ctikzvalof{bipoles/oosource/circlesize}\pgf at circ@res at right}
+    \pgf at circ@draworfill
+    \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosource/circleoffset}\pgf at circ@res at left}{0}}
+        {\ctikzvalof{bipoles/oosource/circlesize}\pgf at circ@res at left}
+    \pgfusepath{draw}
+}
+
+% % % winding symbols
+% triangle
+\def\pgf at circ@delta#1{
+    \pgfscope
+        \pgftransformscale{-.01\pgf at circ@res at left*#1}
+        \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
+            \pgftransformrotate{-\pgfcircmathresult}
+
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{0}{.866\pgf at circ@res at up}}
+        \pgfpathclose
+        \pgfusepath{stroke}
+    \endpgfscope
+}
+
+% star
+\def\pgf at circ@wye#1{
+    \pgfscope
+        \pgftransformscale{-.015\pgf at circ@res at left*#1}
+        \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
+            \pgftransformrotate{-\pgfcircmathresult}
+
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgfpathmoveto{\pgfpoint{0}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpointorigin}
+        \pgfpathlineto{\pgfpointpolar{-30}{\pgf at circ@res at down}}
+        \pgfpathmoveto{\pgfpointorigin}
+        \pgfpathlineto{\pgfpointpolar{-150}{\pgf at circ@res at down}}
+        \pgfusepath{stroke}
+    \endpgfscope
+}
+
+% zigzag
+\def\pgf at circ@zig#1{
+    \pgfscope
+        \pgftransformscale{-.015\pgf at circ@res at left*#1}
+        \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
+            \pgftransformrotate{-\pgfcircmathresult}
+
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgfpathmoveto{\pgfpointorigin}
+        \pgfpathlineto{\pgfpointpolar{90}{.5\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpointpolar{60}{\pgf at circ@res at up}}
+
+        \pgfpathmoveto{\pgfpointorigin}
+        \pgfpathlineto{\pgfpointpolar{210}{.5\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpointpolar{0}{\pgf at circ@res at down}}
+
+        \pgfpathmoveto{\pgfpointorigin}
+        \pgfpathlineto{\pgfpointpolar{330}{.5\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpointpolar{-60}{\pgf at circ@res at up}}
+        \pgfusepath{stroke}
+    \endpgfscope
+}
+
+% % % % round three-phase transformer
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/oosourcetrans/height}}
+{oosourcetrans}
+{\ctikzvalof{bipoles/oosourcetrans/height}}
+{\ctikzvalof{bipoles/oosourcetrans/width}}
+{
+
+    \pgfpointorigin
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosourcetrans/circleoffset}\pgf at circ@res at left}{0}}
+        {\ctikzvalof{bipoles/oosourcetrans/circlesize}\pgf at circ@res at left}
+    \pgf at circ@maybefill
+    \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosourcetrans/circleoffset}\pgf at circ@res at right}{0}}
+        {\ctikzvalof{bipoles/oosourcetrans/circlesize}\pgf at circ@res at right}
+    \pgf at circ@draworfill
+    \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosourcetrans/circleoffset}\pgf at circ@res at left}{0}}
+        {\ctikzvalof{bipoles/oosourcetrans/circlesize}\pgf at circ@res at left}
+    \pgfusepath{draw}
+
+
+% % %     % draw inner symbols
+
+    %%primary winding
+    \ifpgf at circ@prim at delta
+        \pgfscope
+            \pgftransformxshift{\ctikzvalof{bipoles/oosourcetrans/circlesize}\pgf at circ@res at left}
+            \pgf at circ@delta{\ctikzvalof{bipoles/oosourcetrans/vectorgroupscale}}
+        \endpgfscope
+
+    \else\ifpgf at circ@prim at wye
+        \pgfscope
+            \pgftransformxshift{\ctikzvalof{bipoles/oosourcetrans/circlesize}\pgf at circ@res at left}
+            \pgf at circ@wye{\ctikzvalof{bipoles/oosourcetrans/vectorgroupscale}}
+        \endpgfscope
+
+    \else\ifpgf at circ@prim at zig
+        \pgfscope
+            \pgftransformxshift{\ctikzvalof{bipoles/oosourcetrans/circlesize}\pgf at circ@res at left}
+            \pgf at circ@zig{\ctikzvalof{bipoles/oosourcetrans/vectorgroupscale}}
+        \endpgfscope
+    \fi\fi\fi
+
+    %%secondary winding
+    \ifpgf at circ@sec at delta
+        \pgfscope
+            \pgftransformxshift{\ctikzvalof{bipoles/oosourcetrans/circlesize}\pgf at circ@res at right}
+            \pgf at circ@delta{\ctikzvalof{bipoles/oosourcetrans/vectorgroupscale}}
+        \endpgfscope
+
+    \else\ifpgf at circ@sec at wye
+        \pgfscope
+            \pgftransformxshift{\ctikzvalof{bipoles/oosourcetrans/circlesize}\pgf at circ@res at right}
+            \pgf at circ@wye{\ctikzvalof{bipoles/oosourcetrans/vectorgroupscale}}
+        \endpgfscope
+
+    \else\ifpgf at circ@sec at zig
+        \pgfscope
+            \pgftransformxshift{\ctikzvalof{bipoles/oosourcetrans/circlesize}\pgf at circ@res at right}
+            \pgf at circ@zig{\ctikzvalof{bipoles/oosourcetrans/vectorgroupscale}}
+        \endpgfscope
+    \fi\fi\fi
+}
+
+
+% % % % ooosource for three phase transformer
+\pgfcircdeclarebipolescaled{sources}
+{
+    \anchor{right}{
+            \northeast
+            \pgf at y=0pt
+            \pgfmathparse{
+                \ctikzvalof{bipoles/ooosource/circleoffset}* sin(30) +
+    %%the sqrt must be > 0, the circles have to intersect
+                sqrt(
+                    pow(\ctikzvalof{bipoles/ooosource/circlesize},2) -
+                    pow(\ctikzvalof{bipoles/ooosource/circleoffset}*cos(30),2)
+                )
+            }
+            \pgf at x=\pgfmathresult\pgf at x
+    }
+    \anchor{east}{
+            \northeast
+            \pgf at y=0pt
+    }
+    \savedanchor{\centerprim}{
+            \pgf at circ@scaled at Rlen=\ctikzvalof{bipoles/ooosource/height}\pgf at circ@Rlen
+            \pgf at circ@scaled at Rlen=-\ctikzvalof{bipoles/ooosource/circleoffset}\pgf at circ@scaled at Rlen
+            \pgf at y=0pt
+            \pgf at x=.5\pgf at circ@scaled at Rlen
+    }
+    \anchor{centerprim}{
+            \centerprim
+    }
+    \savedanchor{\centersec}{
+            \pgf at circ@scaled at Rlen=\ctikzvalof{bipoles/ooosource/height}\pgf at circ@Rlen
+            \pgf at circ@scaled at Rlen=-\ctikzvalof{bipoles/ooosource/circleoffset}\pgf at circ@scaled at Rlen
+            \pgfpointpolar{60}{.5\pgf at circ@scaled at Rlen}
+            \pgf at y=-\pgf at y
+            \pgf at x=-\pgf at x
+    }
+    \anchor{centersec}{
+            \centersec
+    }
+    \savedanchor{\centertert}{
+            \pgf at circ@scaled at Rlen=\ctikzvalof{bipoles/ooosource/height}\pgf at circ@Rlen
+            \pgf at circ@scaled at Rlen=-\ctikzvalof{bipoles/ooosource/circleoffset}\pgf at circ@scaled at Rlen
+            \pgfpointpolar{60}{.5\pgf at circ@scaled at Rlen}
+            \pgf at y=\pgf at y
+            \pgf at x=-\pgf at x
+    }
+    \anchor{centertert}{
+            \centertert
+    }
+
+    % add some anchors in case the are needed :)
+    \anchor{prim1}{
+            \pgf at circ@scaled at Rlen=\ctikzvalof{bipoles/ooosource/height}\pgf at circ@Rlen
+            \pgf at circ@scaled at Rlen=\ctikzvalof{bipoles/ooosource/circlesize}\pgf at circ@scaled at Rlen
+            \pgfpointadd{\centerprim}{\pgfpointpolar{135}{.5\pgf at circ@scaled at Rlen}}
+    }
+    \anchor{prim2}{
+            \pgf at circ@scaled at Rlen=\ctikzvalof{bipoles/ooosource/height}\pgf at circ@Rlen
+            \pgf at circ@scaled at Rlen=\ctikzvalof{bipoles/ooosource/circlesize}\pgf at circ@scaled at Rlen
+            \pgfpointadd{\centerprim}{\pgfpointpolar{-135}{.5\pgf at circ@scaled at Rlen}}
+    }
+    \anchor{sec1}{
+            \pgf at circ@scaled at Rlen=\ctikzvalof{bipoles/ooosource/height}\pgf at circ@Rlen
+            \pgf at circ@scaled at Rlen=\ctikzvalof{bipoles/ooosource/circlesize}\pgf at circ@scaled at Rlen
+            \pgfpointadd{\centersec}{\pgfpointpolar{0}{.5\pgf at circ@scaled at Rlen}}
+    }
+    \anchor{sec2}{
+            \pgf at circ@scaled at Rlen=\ctikzvalof{bipoles/ooosource/height}\pgf at circ@Rlen
+            \pgf at circ@scaled at Rlen=\ctikzvalof{bipoles/ooosource/circlesize}\pgf at circ@scaled at Rlen
+            \pgfpointadd{\centersec}{\pgfpointpolar{45}{.5\pgf at circ@scaled at Rlen}}
+    }
+    \anchor{sec3}{
+            \pgf at circ@scaled at Rlen=\ctikzvalof{bipoles/ooosource/height}\pgf at circ@Rlen
+            \pgf at circ@scaled at Rlen=\ctikzvalof{bipoles/ooosource/circlesize}\pgf at circ@scaled at Rlen
+            \pgfpointadd{\centersec}{\pgfpointpolar{90}{.5\pgf at circ@scaled at Rlen}}
+    }
+    \anchor{tert1}{
+            \pgf at circ@scaled at Rlen=\ctikzvalof{bipoles/ooosource/height}\pgf at circ@Rlen
+            \pgf at circ@scaled at Rlen=\ctikzvalof{bipoles/ooosource/circlesize}\pgf at circ@scaled at Rlen
+            \pgfpointadd{\centertert}{\pgfpointpolar{0}{.5\pgf at circ@scaled at Rlen}}
+    }
+    \anchor{tert2}{
+            \pgf at circ@scaled at Rlen=\ctikzvalof{bipoles/ooosource/height}\pgf at circ@Rlen
+            \pgf at circ@scaled at Rlen=\ctikzvalof{bipoles/ooosource/circlesize}\pgf at circ@scaled at Rlen
+            \pgfpointadd{\centertert}{\pgfpointpolar{-45}{.5\pgf at circ@scaled at Rlen}}
+    }
+    \anchor{tert3}{
+            \pgf at circ@scaled at Rlen=\ctikzvalof{bipoles/ooosource/height}\pgf at circ@Rlen
+            \pgf at circ@scaled at Rlen=\ctikzvalof{bipoles/ooosource/circlesize}\pgf at circ@scaled at Rlen
+            \pgfpointadd{\centertert}{\pgfpointpolar{-90}{.5\pgf at circ@scaled at Rlen}}
+    }
+}
+{\ctikzvalof{bipoles/ooosource/height}}
+{ooosource}
+{\ctikzvalof{bipoles/ooosource/height}}
+{\ctikzvalof{bipoles/ooosource/height}}
+{
+%     \pgf at circ@res at other = \ctikzvalof{bipoles/ooosource/vectorgroup} \pgf at circ@scaled at Rlen
+
+%     % filling
+%     left
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/ooosource/circleoffset}\pgf at circ@res at left}{0}}{\ctikzvalof{bipoles/ooosource/circlesize}\pgf at circ@res at left}
+    \pgf at circ@maybefill
+
+    % up
+    \pgfscope
+        \pgfpointorigin
+        \pgfpathcircle{\pgfpointpolar{60}{\ctikzvalof{bipoles/ooosource/circleoffset}\pgf at circ@res at right}}{\ctikzvalof{bipoles/ooosource/circlesize}\pgf at circ@res at right}
+        \pgf at circ@maybefill
+    \endpgfscope
+%     down
+    \pgfscope
+        \pgfpointorigin
+        \pgfpathcircle{\pgfpointpolar{-60}{\ctikzvalof{bipoles/ooosource/circleoffset}\pgf at circ@res at right}}{\ctikzvalof{bipoles/ooosource/circlesize}\pgf at circ@res at right}
+        \pgf at circ@draworfill
+    \endpgfscope
+
+%     drawing
+    % left
+    \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/ooosource/circleoffset}\pgf at circ@res at left}{0}}{\ctikzvalof{bipoles/ooosource/circlesize}\pgf at circ@res at left}
+    \pgfusepath{draw}
+
+    % up
+    \pgfscope
+        \pgfpointorigin
+        \pgfpathcircle{\pgfpointpolar{60}{\ctikzvalof{bipoles/ooosource/circleoffset}\pgf at circ@res at right}}{\ctikzvalof{bipoles/ooosource/circlesize}\pgf at circ@res at right}
+        \pgfusepath{draw}
+    \endpgfscope
+
+% % %     draw inner symbols
+
+% %     primary winding
+    \ifpgf at circ@prim at delta
+        \pgfscope
+            \pgftransformxshift{\ctikzvalof{bipoles/ooosource/circlesize}\pgf at circ@res at left}
+            \pgf at circ@delta{\ctikzvalof{bipoles/ooosource/vectorgroupscale}}
+        \endpgfscope
+
+    \else\ifpgf at circ@prim at wye
+        \pgfscope
+            \pgftransformxshift{.6\pgf at circ@res at left}
+            \pgf at circ@wye{\ctikzvalof{bipoles/ooosource/vectorgroupscale}}
+        \endpgfscope
+
+    \else\ifpgf at circ@prim at zig
+        \pgfscope
+            \pgftransformxshift{.6\pgf at circ@res at left}
+            \pgf at circ@zig{\ctikzvalof{bipoles/ooosource/vectorgroupscale}}
+        \endpgfscope
+    \fi\fi\fi
+
+% %     secondary winding
+    \ifpgf at circ@sec at delta
+        \pgfscope
+            \pgfpointorigin
+            \pgftransformshift{\pgfpointpolar{60}{\ctikzvalof{bipoles/ooosource/circlesize}\pgf at circ@res at right}}
+            \pgf at circ@delta{\ctikzvalof{bipoles/ooosource/vectorgroupscale}}
+        \endpgfscope
+
+    \else\ifpgf at circ@sec at wye
+        \pgfscope
+            \pgftransformshift{\pgfpointpolar{60}{\ctikzvalof{bipoles/ooosource/circlesize}\pgf at circ@res at right}}
+            \pgf at circ@wye{\ctikzvalof{bipoles/ooosource/vectorgroupscale}}
+        \endpgfscope
+
+    \else\ifpgf at circ@sec at zig
+        \pgfscope
+            \pgftransformshift{\pgfpointpolar{60}{\ctikzvalof{bipoles/ooosource/circlesize}\pgf at circ@res at right}}
+            \pgf at circ@zig{\ctikzvalof{bipoles/ooosource/vectorgroupscale}}
+        \endpgfscope
+    \fi\fi\fi
+
+% %     tertiary winding
+    \ifpgf at circ@tert at delta
+        \pgfscope
+            \pgftransformshift{\pgfpointpolar{-60}{\ctikzvalof{bipoles/ooosource/circlesize}\pgf at circ@res at right}}
+            \pgf at circ@delta{\ctikzvalof{bipoles/ooosource/vectorgroupscale}}
+        \endpgfscope
+
+    \else\ifpgf at circ@tert at wye
+        \pgfscope
+            \pgftransformshift{\pgfpointpolar{-60}{\ctikzvalof{bipoles/ooosource/circlesize}\pgf at circ@res at right}}
+            \pgf at circ@wye{\ctikzvalof{bipoles/ooosource/vectorgroupscale}}
+        \endpgfscope
+
+    \else\ifpgf at circ@tert at zig
+        \pgfscope
+            \pgftransformshift{\pgfpointpolar{-60}{\ctikzvalof{bipoles/ooosource/circlesize}\pgf at circ@res at right}}
+            \pgf at circ@zig{\ctikzvalof{bipoles/ooosource/vectorgroupscale}}
+        \endpgfscope
+    \fi\fi\fi
+}
+
+%% Independent current source - American
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/isourceam/height}}
+{isourceAM}
+{\ctikzvalof{bipoles/isourceam/height}}
+{\ctikzvalof{bipoles/isourceam/width}}
+{
+    \pgfpointorigin
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
+    \pgf at circ@draworfill
+
+    \pgfpathmoveto{\pgfpoint{.7\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgfpathlineto{\pgfpoint{.7\pgf at circ@res at right}{\pgf at circ@res at zero}}
+    \pgfusepath{draw}
+    \pgfscope
+        \pgftransformshift{\pgfpoint{.5\pgf at circ@res at right}{\pgf at circ@res at zero}}
+        \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+    \endpgfscope
+}
+
+%% Independent sinusoidal current source
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/isource/height}}
+{isourcesin}
+{\ctikzvalof{bipoles/isource/height}}
+{\ctikzvalof{bipoles/isource/width}}
+{
+    \pgfpointorigin
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
+    \pgf at circ@draworfill
+
+    \pgf at circ@res at up = .5\pgf at circ@res at up
+    \pgfscope
+        \pgftransformrotate{90}
+        \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at up}{0cm}}
+        \pgfpathsine{\pgfpoint{.5\pgf at circ@res at up}{.5\pgf at circ@res at up}}
+        \pgfpathcosine{\pgfpoint{.5\pgf at circ@res at up}{-.5\pgf at circ@res at up}}
+        \pgfpathsine{\pgfpoint{.5\pgf at circ@res at up}{-.5\pgf at circ@res at up}}
+        \pgfpathcosine{\pgfpoint{.5\pgf at circ@res at up}{.5\pgf at circ@res at up}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+%% Empty controlled source
+\pgfcircdeclarebipolescaled{csources}
+{}
+{\ctikzvalof{bipoles/ecsource/height}}
+{ecsource}
+{\ctikzvalof{bipoles/ecsource/height}}
+{\ctikzvalof{bipoles/ecsource/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at zero}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at zero}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at zero}{\pgf at circ@res at down}}
+    \pgfpathclose
+    \pgf at circ@draworfill
+}
+
+%% Controlled voltage source
+\pgfcircdeclarebipolescaled{csources}
+{}
+{\ctikzvalof{bipoles/cvsource/height}}
+{cvsource}
+{\ctikzvalof{bipoles/cvsource/height}}
+{\ctikzvalof{bipoles/cvsource/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at zero}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at zero}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at zero}{\pgf at circ@res at down}}
+    \pgfpathclose
+    \pgf at circ@draworfill
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at zero}}
+    \pgfusepath{draw}
+}
+
+%% To change the internal symbols of the controlled voltage source american style
+\ctikzset{bipoles/cvsourceam/inner plus/.initial={$+$}}
+\ctikzset{bipoles/cvsourceam/inner minus/.initial={$-$}}
+%% Controlled voltage source - American
+\pgfcircdeclarebipolescaled{csources}
+{}
+{\ctikzvalof{bipoles/cvsourceam/height}}
+{cvsourceAM}
+{\ctikzvalof{bipoles/cvsourceam/height}}
+{\ctikzvalof{bipoles/cvsourceam/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at zero}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at zero}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at zero}{\pgf at circ@res at down}}
+    \pgfpathclose
+    \pgf at circ@draworfill
+
+    \pgfsetcolor{\ctikzvalof{color}}
+    \ifpgf at circ@oldvoltagedirection
+        \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf at circ@res at left]{\ctikzvalof{bipoles/cvsourceam/inner plus}}
+        \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf at circ@res at right]{\ctikzvalof{bipoles/cvsourceam/inner minus}}
+    \else
+        \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf at circ@res at left]{\ctikzvalof{bipoles/cvsourceam/inner minus}}
+        \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf at circ@res at right]{\ctikzvalof{bipoles/cvsourceam/inner plus}}
+    \fi
+}
+
+%% Controlled sinusoidal voltage source
+\pgfcircdeclarebipolescaled{csources}
+{}
+{\ctikzvalof{bipoles/cvsourcesin/height}}
+{cvsourcesin}
+{\ctikzvalof{bipoles/cvsourcesin/height}}
+{\ctikzvalof{bipoles/cvsourcesin/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgfscope
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at zero}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at zero}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at zero}{\pgf at circ@res at down}}
+        \pgfpathclose
+        \pgf at circ@draworfill
+    \endpgfscope
+
+    \pgf at circ@res at up = .5\pgf at circ@res at up
+    \pgfscope
+        \pgftransformrotate{90}
+        \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at up}{0cm}}
+        \pgfpathsine{\pgfpoint{.5\pgf at circ@res at up}{.5\pgf at circ@res at up}}
+        \pgfpathcosine{\pgfpoint{.5\pgf at circ@res at up}{-.5\pgf at circ@res at up}}
+        \pgfpathsine{\pgfpoint{.5\pgf at circ@res at up}{-.5\pgf at circ@res at up}}
+        \pgfpathcosine{\pgfpoint{.5\pgf at circ@res at up}{.5\pgf at circ@res at up}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+%% Controlled sinusoidal current source
+\pgfcircdeclarebipolescaled{csources}
+{}
+{\ctikzvalof{bipoles/cvsourcesin/height}}
+{cisourcesin}
+{\ctikzvalof{bipoles/cvsourcesin/height}}
+{\ctikzvalof{bipoles/cvsourcesin/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgfscope
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at zero}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at zero}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at zero}{\pgf at circ@res at down}}
+        \pgfpathclose
+        \pgf at circ@draworfill
+    \endpgfscope
+
+    \pgf at circ@res at up = .5\pgf at circ@res at up
+    \pgfscope
+        \pgftransformrotate{90}
+        \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at up}{0cm}}
+        \pgfpathsine{\pgfpoint{.5\pgf at circ@res at up}{.5\pgf at circ@res at up}}
+        \pgfpathcosine{\pgfpoint{.5\pgf at circ@res at up}{-.5\pgf at circ@res at up}}
+        \pgfpathsine{\pgfpoint{.5\pgf at circ@res at up}{-.5\pgf at circ@res at up}}
+        \pgfpathcosine{\pgfpoint{.5\pgf at circ@res at up}{.5\pgf at circ@res at up}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+%% Controlled current source
+\pgfcircdeclarebipolescaled{csources}
+{}
+{\ctikzvalof{bipoles/cisource/height}}
+{cisource}
+{\ctikzvalof{bipoles/cisource/height}}
+{\ctikzvalof{bipoles/cisource/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at zero}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at zero}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at zero}{\pgf at circ@res at down}}
+    \pgfpathclose
+    \pgf at circ@draworfill
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at zero}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at zero}{\pgf at circ@res at down}}
+    \pgfusepath{draw}
+}
+
+%% Controlled current source - American
+\pgfcircdeclarebipolescaled{csources}
+{}
+{\ctikzvalof{bipoles/cisourceam/height}}
+{cisourceAM}
+{\ctikzvalof{bipoles/cisourceam/height}}
+{\ctikzvalof{bipoles/cisourceam/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at zero}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at zero}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at zero}{\pgf at circ@res at down}}
+    \pgfpathclose
+    \pgf at circ@draworfill
+    \pgfpathmoveto{\pgfpoint{.7\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgfpathlineto{\pgfpoint{.7\pgf at circ@res at right}{\pgf at circ@res at zero}}
+    \pgfusepath{draw}
+    \pgfscope
+        \pgftransformshift{\pgfpoint{.5\pgf at circ@res at right}{\pgf at circ@res at zero}}
+        \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+    \endpgfscope
+}
+
+%% Cute Independent voltage source
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/vsource/height}}
+{vsourceC}
+{\ctikzvalof{bipoles/vsource/height}}
+{\ctikzvalof{bipoles/vsource/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
+    \pgf at circ@draworfill
+    \pgfmathsetmacro{\@@thicker}{3*\ctikzvalof{bipoles/thickness}}
+    \pgfsetlinewidth{\@@thicker\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{.6\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgfpathlineto{\pgfpoint{.6\pgf at circ@res at right}{\pgf at circ@res at zero}}
+    \pgfsetroundcap\pgfusepath{draw}
+}
+
+%% Cute Independent current source
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/isource/height}}
+{isourceC}
+{\ctikzvalof{bipoles/isource/height}}
+{\ctikzvalof{bipoles/isource/width}}
+{
+    \pgfpointorigin
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
+    \pgf at circ@draworfill
+    \pgfmathsetmacro{\@@thicker}{3*\ctikzvalof{bipoles/thickness}}
+    \pgfsetlinewidth{\@@thicker\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{.6\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{.6\pgf at circ@res at down}}
+    \pgfsetroundcap\pgfusepath{draw}
+}
+
+%% Cute Controlled voltage source
+\pgfcircdeclarebipolescaled{csources}
+{}
+{\ctikzvalof{bipoles/cvsource/height}}
+{cvsourceC}
+{\ctikzvalof{bipoles/cvsource/height}}
+{\ctikzvalof{bipoles/cvsource/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at zero}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at zero}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at zero}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgf at circ@draworfill
+    \pgfmathsetmacro{\@@thicker}{3*\ctikzvalof{bipoles/thickness}}
+    \pgfsetlinewidth{\@@thicker\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{.6\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgfpathlineto{\pgfpoint{.6\pgf at circ@res at right}{\pgf at circ@res at zero}}
+    \pgfsetroundcap\pgfusepath{draw}
+}
+
+%% Cute Controlled current source
+\pgfcircdeclarebipolescaled{csources}
+{}
+{\ctikzvalof{bipoles/cisource/height}}
+{cisourceC}
+{\ctikzvalof{bipoles/cisource/height}}
+{\ctikzvalof{bipoles/cisource/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at zero}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at zero}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at zero}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgf at circ@draworfill
+    \pgfmathsetmacro{\@@thicker}{3*\ctikzvalof{bipoles/thickness}}
+    \pgfsetlinewidth{\@@thicker\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at zero}{.6\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at zero}{.6\pgf at circ@res at down}}
+    \pgfsetroundcap\pgfusepath{draw}
+}
+
+%%  Noise voltage source
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/vsource/height}}
+{vsourceN}
+{\ctikzvalof{bipoles/vsource/height}}
+{\ctikzvalof{bipoles/vsource/width}}
+{
+    \pgfscope
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
+        %
+        \pgf at circ@scaled at Rlen=\scaledRlen
+        \pgf at circ@res at step=0.125\pgf at circ@scaled at Rlen\relax
+        \edef\pgf at noise@temp{dashed}
+        \edef\pgf at noise@fill{\ctikzvalof{bipoles/noise sources/fillcolor}}
+        \ifx\pgf at noise@temp\pgf at noise@fill
+            % fillable in this case
+            \pgf at circ@draworfillandclip
+            \pgfmathsetmacro{\@@thinner}{.5*\ctikzvalof{bipoles/thickness}}
+            \pgfsetlinewidth{\@@thinner\pgfstartlinewidth}
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+            \advance\pgf at circ@res at up by \pgf at circ@res at step\advance\pgf at circ@res at down by \pgf at circ@res at step
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+            \advance\pgf at circ@res at up by \pgf at circ@res at step\advance\pgf at circ@res at down by \pgf at circ@res at step
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+            \advance\pgf at circ@res at up by \pgf at circ@res at step\advance\pgf at circ@res at down by \pgf at circ@res at step
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+            %
+            \advance\pgf at circ@res at up by -4\pgf at circ@res at step \advance\pgf at circ@res at down by -4\pgf at circ@res at step
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+            \advance\pgf at circ@res at up by -\pgf at circ@res at step\advance\pgf at circ@res at down by -\pgf at circ@res at step
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+            \advance\pgf at circ@res at up by -\pgf at circ@res at step\advance\pgf at circ@res at down by -\pgf at circ@res at step
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+            \pgfusepath{draw}
+        \else
+            \pgfsetfillcolor{\pgf at noise@fill}
+            \pgfusepath{draw,fill}
+        \fi
+    \endpgfscope
+    \pgfmathsetmacro{\@@thicker}{3*\ctikzvalof{bipoles/thickness}}
+    \pgfsetlinewidth{\@@thicker\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{.6\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgfpathlineto{\pgfpoint{.6\pgf at circ@res at right}{\pgf at circ@res at zero}}
+    \pgfsetroundcap\pgfusepath{draw}
+}
+%% Noise current source
+
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/isource/height}}
+{isourceN}
+{\ctikzvalof{bipoles/isource/height}}
+{\ctikzvalof{bipoles/isource/width}}
+{
+    \pgfpointorigin
+    \pgfscope
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
+        %
+        \pgf at circ@scaled at Rlen=\scaledRlen
+        \pgf at circ@res at step=0.125\pgf at circ@scaled at Rlen\relax
+        \edef\pgf at noise@temp{dashed}
+        \edef\pgf at noise@fill{\ctikzvalof{bipoles/noise sources/fillcolor}}
+        \ifx\pgf at noise@temp\pgf at noise@fill
+            % fillable in this case
+            \pgf at circ@draworfillandclip
+            \pgfmathsetmacro{\@@thinner}{.5*\ctikzvalof{bipoles/thickness}}
+            \pgfsetlinewidth{\@@thinner\pgfstartlinewidth}
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+            \advance\pgf at circ@res at up by \pgf at circ@res at step\advance\pgf at circ@res at down by \pgf at circ@res at step
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+            \advance\pgf at circ@res at up by \pgf at circ@res at step\advance\pgf at circ@res at down by \pgf at circ@res at step
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+            \advance\pgf at circ@res at up by \pgf at circ@res at step\advance\pgf at circ@res at down by \pgf at circ@res at step
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+            %
+            \advance\pgf at circ@res at up by -4\pgf at circ@res at step \advance\pgf at circ@res at down by -4\pgf at circ@res at step
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+            \advance\pgf at circ@res at up by -\pgf at circ@res at step\advance\pgf at circ@res at down by -\pgf at circ@res at step
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+            \advance\pgf at circ@res at up by -\pgf at circ@res at step\advance\pgf at circ@res at down by -\pgf at circ@res at step
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+            \pgfusepath{draw}
+        \else
+            \pgfsetfillcolor{\pgf at noise@fill}
+            \pgfusepath{draw,fill}
+        \fi
+    \endpgfscope
+    \pgfmathsetmacro{\@@thicker}{3*\ctikzvalof{bipoles/thickness}}
+    \pgfsetlinewidth{\@@thicker\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{.6\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{.6\pgf at circ@res at down}}
+    \pgfsetroundcap\pgfusepath{draw}
+}
+
+%%%%%%%%%%%%%%
+%% Diodes
+%%%%%%%%%%%%%%
+
+%% Black generic diode
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{fulldiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgfscope
+        \pgftransformxshift{\pgf at circ@res at left}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{0pt}}
+        \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{0pt}}
+        \pgfusepath{draw,fill}
+    \endpgfscope
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfusepath{draw}
+}
+
+%% Black Zener diode
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{fullzdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgfscope
+        \pgftransformxshift{\pgf at circ@res at left}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{0pt}}
+        \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{0pt}}
+        \pgfusepath{draw,fill}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-.6\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+%% Black alternative zigzag Zener diode
+\pgfcircdeclarebipolescaled{diodes}
+{% fix the anchor border
+    \pgfcirc at border@extend at updown{1.3}{1.3}
+}
+{\ctikzvalof{bipoles/diode/height}}
+{fullzzdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgfscope
+        \pgftransformxshift{\pgf at circ@res at left}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{0pt}}
+        \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{0pt}}
+        \pgfusepath{draw,fill}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-1.8\pgf at circ@res at left}{\pgf at circ@res at down-0.5\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-0.2\pgf at circ@res at left}{\pgf at circ@res at up-0.5\pgf at circ@res at down}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+%% Black Schottky diode
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{fullsdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfscope
+        \pgftransformxshift{\pgf at circ@res at left}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{0pt}}
+        \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{0pt}}
+        \pgfusepath{draw,fill}
+
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-.6\pgf at circ@res at left}{.6\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-.6\pgf at circ@res at left}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-1.4\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-1.4\pgf at circ@res at left}{.6\pgf at circ@res at up}}
+        \pgfusepath{draw}
+    \endpgfscope
+
+}
+
+%% Black tunnel diode
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{fulltdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfscope
+        \pgftransformxshift{\pgf at circ@res at left}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{0pt}}
+        \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{0pt}}
+        \pgfusepath{draw,fill}
+
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-.6\pgf at circ@res at left}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-.6\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+%
+% draw LED arrows
+%
+\def\pgf at circ@draw at ledarrows{%
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfsetarrowsend{latexslim}
+    \ifpgf at led@fliparrows
+        \pgfpathmoveto{\pgfpoint{0pt}{0.8\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{-0.6\pgf at circ@res at right}{1.8\pgf at circ@res at up}}
+        \pgfusepath{draw}
+        \pgfpathmoveto{\pgfpoint{0.6\pgf at circ@res at right}{0.6\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0pt}{1.6\pgf at circ@res at up}}
+        \pgfusepath{draw}
+    \else
+        \pgfpathmoveto{\pgfpoint{-0.4\pgf at circ@res at right}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0.6\pgf at circ@res at right}{2\pgf at circ@res at up}}
+        \pgfusepath{draw}
+        \pgfpathmoveto{\pgfpoint{0.2\pgf at circ@res at right}{0.8\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{1.2\pgf at circ@res at right}{1.8\pgf at circ@res at up}}
+        \pgfusepath{draw}
+    \fi
+}
+%
+% ---and photodiode arrows
+%
+\def\pgf at circ@draw at pdarrows{%
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfsetarrowsstart{latexslim}
+    \ifpgf at pd@fliparrows
+        \pgfpathmoveto{\pgfpoint{0pt}{0.8\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{-0.6\pgf at circ@res at right}{1.8\pgf at circ@res at up}}
+        \pgfusepath{draw}
+        \pgfpathmoveto{\pgfpoint{0.6\pgf at circ@res at right}{0.6\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0pt}{1.6\pgf at circ@res at up}}
+        \pgfusepath{draw}
+    \else
+        \pgfpathmoveto{\pgfpoint{-0.4\pgf at circ@res at right}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0.6\pgf at circ@res at right}{2\pgf at circ@res at up}}
+        \pgfusepath{draw}
+        \pgfpathmoveto{\pgfpoint{0.2\pgf at circ@res at right}{0.8\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{1.2\pgf at circ@res at right}{1.8\pgf at circ@res at up}}
+        \pgfusepath{draw}
+    \fi
+}
+%% Black light emitting diode
+\pgfcircdeclarebipolescaled{diodes}
+{% fix the anchor border
+    \pgfcirc at border@extend at updown{1.8}{1}
+}
+{\ctikzvalof{bipoles/diode/height}}
+{fulllediode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfscope
+        \pgftransformxshift{\pgf at circ@res at left}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{0pt}}
+        \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{0pt}}
+        \pgfusepath{draw,fill}
+    \endpgfscope
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfusepath{draw}
+
+    \pgf at circ@draw at ledarrows
+}
+
+%% Black photodiode
+\pgfcircdeclarebipolescaled{diodes}
+{% fix the anchor border
+    \pgfcirc at border@extend at updown{1.8}{1}
+}
+{\ctikzvalof{bipoles/diode/height}}
+{fullpdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfscope
+        \pgftransformxshift{\pgf at circ@res at left}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{0pt}}
+        \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{0pt}}
+        \pgfusepath{draw,fill}
+    \endpgfscope
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfusepath{draw}
+
+    \pgf at circ@draw at pdarrows
+}
+
+%% Black varcap
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/varcap/height}}
+{fullvarcap}
+{\ctikzvalof{bipoles/varcap/height}}
+{\ctikzvalof{bipoles/varcap/width}}
+{
+    \pgf at circ@res at temp=\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+    \pgfsetlinewidth{\pgf at circ@res at temp}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-2\pgf at circ@res at temp}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-2\pgf at circ@res at temp}{0pt}}
+    \pgfusepath{draw,fill}
+    %
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-2\pgf at circ@res at temp}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-2\pgf at circ@res at temp}{\pgf at circ@res at up}}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfusepath{draw}
+}
+
+%% Code for the diode triangle
+\def\pgf at circ@basicdiodeshape{
+    % \pgfscope
+        \pgftransformxshift{\pgf at circ@res at left}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{0pt}}
+        \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down}}
+        \pgfpathclose
+        \pgf at circ@draworfill
+        \pgfscope
+            % to allow filling, we need to draw explicitly the stroke here.
+            \pgfsetlinewidth{\pgfstartlinewidth}
+            \ifpgf at circuit@bipole at strokedsymbol
+                \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{0pt}}
+                \pgfpathlineto{\pgfpoint{0pt}{0pt}}
+                \pgfusepath{draw}
+            \fi
+        \endpgfscope
+    % \endpgfscope
+}
+
+%% Empty generic diode
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{emptydiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfscope
+        \pgf at circ@basicdiodeshape
+    \endpgfscope
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfusepath{draw}
+}
+
+%% Empty Zener diode
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{emptyzdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgfscope
+        \pgf at circ@basicdiodeshape
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-0.6\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+%% Empty alternative zigzag Zener diode
+\pgfcircdeclarebipolescaled{diodes}
+{% fix the anchor border
+    \pgfcirc at border@extend at updown{1.3}{1.3}
+}
+{\ctikzvalof{bipoles/diode/height}}
+{emptyzzdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgfscope
+        \pgf at circ@basicdiodeshape
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-1.8\pgf at circ@res at left}{\pgf at circ@res at down-0.5\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-0.2\pgf at circ@res at left}{\pgf at circ@res at up-0.5\pgf at circ@res at down}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+%% Empty Schottky diode
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{emptysdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfscope
+        \pgf at circ@basicdiodeshape
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-.6\pgf at circ@res at left}{.6\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-.6\pgf at circ@res at left}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-1.4\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-1.4\pgf at circ@res at left}{.6\pgf at circ@res at up}}
+        \pgfusepath{draw}
+    \endpgfscope
+
+}
+
+%% Empty tunnel diode
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{emptytdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfscope
+        \pgf at circ@basicdiodeshape
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-.6\pgf at circ@res at left}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-.6\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+%% Empty light emitting diode
+\pgfcircdeclarebipolescaled{diodes}
+{% fix the anchor border
+    \pgfcirc at border@extend at updown{1.8}{1}
+}
+{\ctikzvalof{bipoles/diode/height}}
+{emptylediode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfscope
+        \pgf at circ@basicdiodeshape
+    \endpgfscope
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfusepath{draw}
+
+    \pgf at circ@draw at ledarrows
+}
+
+%% Empty photodiode
+\pgfcircdeclarebipolescaled{diodes}
+{% fix the anchor border
+    \pgfcirc at border@extend at updown{1.8}{1}
+}
+{\ctikzvalof{bipoles/diode/height}}
+{emptypdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfscope
+        \pgf at circ@basicdiodeshape
+    \endpgfscope
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfusepath{draw}
+
+    \pgf at circ@draw at pdarrows
+}
+
+%% Empty varcap
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/varcap/height}}
+{emptyvarcap}
+{\ctikzvalof{bipoles/varcap/height}}
+{\ctikzvalof{bipoles/varcap/width}}
+{
+    \pgf at circ@res at temp=\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+    \pgfsetlinewidth{\pgf at circ@res at temp}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-2\pgf at circ@res at temp}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+    % \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-2\pgf at circ@res at temp}{0pt}}
+    \pgfpathclose
+    \pgf at circ@draworfill
+    \pgfscope
+        % to allow filling, we need to draw explicitily the stroke here.
+        \pgfsetlinewidth{\pgfstartlinewidth}
+        \ifpgf at circuit@bipole at strokedsymbol
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-2\pgf at circ@res at temp}{0pt}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfusepath{draw}
+        \fi
+    \endpgfscope
+    %
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-2\pgf at circ@res at temp}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-2\pgf at circ@res at temp}{\pgf at circ@res at up}}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfusepath{draw}
+}
+
+%% Empty bidirectionaldiode
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/bidirectionaldiode/height}}
+{emptybidirectionaldiode}
+{\ctikzvalof{bipoles/bidirectionaldiode/height}}
+{\ctikzvalof{bipoles/bidirectionaldiode/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgf at circ@res at other = \ctikzvalof{bipoles/bidirectionaldiode/diode width left}\pgf at circ@res at left
+    \pgf at circ@res at step = \ctikzvalof{bipoles/bidirectionaldiode/diode width right}\pgf at circ@res at right
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at other}{0pt}}
+    \pgfpathlineto{\pgfpoint{0.95\pgf at circ@res at step}{0.707*(\pgf at circ@res at other-\pgf at circ@res at step)}} % sqrt(1/2)
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{1.414*(\pgf at circ@res at other-\pgf at circ@res at step)}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{-1.414*(\pgf at circ@res at other-\pgf at circ@res at step)}}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{0pt}}
+    \pgfpathlineto{\pgfpoint{0.95\pgf at circ@res at other}{-0.707*(\pgf at circ@res at other-\pgf at circ@res at step)}} % sqrt(1/2)
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{-1.414*(\pgf at circ@res at other-\pgf at circ@res at step)}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{1.414*(\pgf at circ@res at other-\pgf at circ@res at step)}}
+
+    \pgf at circ@draworfill
+
+    \pgfsetlinewidth{\pgfstartlinewidth}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at other}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+
+    \pgfusepath{draw}
+}
+
+%% Full bidirectionaldiode
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/bidirectionaldiode/height}}
+{fullbidirectionaldiode}
+{\ctikzvalof{bipoles/bidirectionaldiode/height}}
+{\ctikzvalof{bipoles/bidirectionaldiode/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgf at circ@res at other = \ctikzvalof{bipoles/bidirectionaldiode/diode width left}\pgf at circ@res at left
+    \pgf at circ@res at step = \ctikzvalof{bipoles/bidirectionaldiode/diode width right}\pgf at circ@res at right
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at other}{0pt}}
+    \pgfpathlineto{\pgfpoint{0.95\pgf at circ@res at step}{0.707*(\pgf at circ@res at other-\pgf at circ@res at step)}} % sqrt(1/2)
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{1.414*(\pgf at circ@res at other-\pgf at circ@res at step)}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{-1.414*(\pgf at circ@res at other-\pgf at circ@res at step)}}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{0pt}}
+    \pgfpathlineto{\pgfpoint{0.95\pgf at circ@res at other}{-0.707*(\pgf at circ@res at other-\pgf at circ@res at step)}} % sqrt(1/2)
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{-1.414*(\pgf at circ@res at other-\pgf at circ@res at step)}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{1.414*(\pgf at circ@res at other-\pgf at circ@res at step)}}
+
+    \pgfusepath{draw, fill}
+
+    \pgfsetlinewidth{\pgfstartlinewidth}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at other}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+
+    \pgfusepath{draw}
+}
+
+%% Black thyristor
+\pgfcircdeclarebipolescaled{diodes}
+{
+    \anchor{gate}{\northeast}
+    \anchor{anode}{\southwest\pgf at y=0cm}
+    \anchor{G}{\northeast}
+    \anchor{cathode}{\northeast\pgf at y=0cm }
+}
+{\ctikzvalof{tripoles/thyristor/height 2}}
+{fullthyristor}
+{\ctikzvalof{tripoles/thyristor/height}}
+{\ctikzvalof{tripoles/thyristor/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgf at circ@res at other = \ctikzvalof{tripoles/thyristor/diode width left}\pgf at circ@res at left
+    \pgf at circ@res at step = \ctikzvalof{tripoles/thyristor/diode width right}\pgf at circ@res at right
+
+    \pgfscope
+        \pgftransformxshift{\pgf at circ@res at other}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step-\pgf at circ@res at other}{0pt}}
+
+        \pgfpathlineto{\pgfpoint{0pt}{-\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at step-\pgf at circ@res at other}{0pt}}
+        \pgfusepath{draw,fill}
+
+        \pgfsetlinewidth{\pgfstartlinewidth}
+
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step-\pgf at circ@res at other}{0pt}}
+        \pgfpathlineto{\pgfpoint{2*\pgf at circ@res at step-2*\pgf at circ@res at other}{\ctikzvalof{tripoles/thyristor/diode height}\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{2*\pgf at circ@res at step-2*\pgf at circ@res at other}{\pgf at circ@res at up}}
+        \pgfusepath{draw}
+    \endpgfscope
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{-\pgf at circ@res at down}}
+
+    \pgfusepath{draw}
+
+    \pgfsetlinewidth{\pgfstartlinewidth}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at other}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+
+    \pgfusepath{draw}
+
+}
+
+%% Empty thyristor
+
+\pgfcircdeclarebipolescaled{diodes}
+{
+    \anchor{gate}{\northeast}
+    \anchor{anode}{\southwest\pgf at y=0cm}
+    \anchor{G}{\northeast}
+    \anchor{cathode}{\northeast\pgf at y=0cm }
+}
+{\ctikzvalof{tripoles/thyristor/height 2}}
+{emptythyristor}
+{\ctikzvalof{tripoles/thyristor/height}}
+{\ctikzvalof{tripoles/thyristor/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgf at circ@res at other = \ctikzvalof{tripoles/thyristor/diode width left}\pgf at circ@res at left
+    \pgf at circ@res at step = \ctikzvalof{tripoles/thyristor/diode width right}\pgf at circ@res at right
+
+    \pgfscope
+        \pgftransformxshift{\pgf at circ@res at other}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step-\pgf at circ@res at other}{0pt}}
+
+        \pgfpathlineto{\pgfpoint{0pt}{-\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down}}
+        \pgfpathclose
+        \pgf at circ@draworfill
+        \pgfscope
+            % to allow filling, we need to draw explicitily the stroke here.
+            \pgfsetlinewidth{\pgfstartlinewidth}
+            \ifpgf at circuit@bipole at strokedsymbol
+                \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step-\pgf at circ@res at other}{0pt}}
+                \pgfpathlineto{\pgfpoint{0pt}{0pt}}
+                \pgfusepath{draw}
+            \fi
+        \endpgfscope
+
+        \pgfsetlinewidth{\pgfstartlinewidth}
+
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step-\pgf at circ@res at other}{0pt}}
+        \pgfpathlineto{\pgfpoint{2*\pgf at circ@res at step-2*\pgf at circ@res at other}{\ctikzvalof{tripoles/thyristor/diode height}\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{2*\pgf at circ@res at step-2*\pgf at circ@res at other}{\pgf at circ@res at up}}
+        \pgfusepath{draw}
+    \endpgfscope
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{-\pgf at circ@res at down}}
+
+    \pgfusepath{draw}
+
+    \pgfsetlinewidth{\pgfstartlinewidth}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at other}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+
+    \pgfusepath{draw}
+}
+
+%% Empty triac
+\pgfcircdeclarebipolescaled{diodes}
+{
+    \anchor{gate}{\northeast}
+    \anchor{anode}{\southwest\pgf at y=0cm}
+    \anchor{G}{\northeast}
+    \anchor{cathode}{\northeast\pgf at y=0cm }
+}
+{\ctikzvalof{tripoles/triac/height}}
+{emptytriac}
+{\ctikzvalof{tripoles/triac/height}}
+{\ctikzvalof{tripoles/triac/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgf at circ@res at other = \ctikzvalof{tripoles/triac/diode width left}\pgf at circ@res at left
+    \pgf at circ@res at step = \ctikzvalof{tripoles/triac/diode width right}\pgf at circ@res at right
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at other}{0pt}}
+    \pgfpathlineto{\pgfpoint{0.95\pgf at circ@res at step}{0.707*(\pgf at circ@res at other-\pgf at circ@res at step)}} % sqrt(1/2)
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{1.414*(\pgf at circ@res at other-\pgf at circ@res at step)}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{-1.414*(\pgf at circ@res at other-\pgf at circ@res at step)}}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{0pt}}
+    \pgfpathlineto{\pgfpoint{0.95\pgf at circ@res at other}{-0.707*(\pgf at circ@res at other-\pgf at circ@res at step)}} % sqrt(1/2)
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{-1.414*(\pgf at circ@res at other-\pgf at circ@res at step)}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{1.414*(\pgf at circ@res at other-\pgf at circ@res at step)}}
+
+    \pgf at circ@draworfill
+
+    \pgfsetlinewidth{\pgfstartlinewidth}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{-0.707*(\pgf at circ@res at other-\pgf at circ@res at step)}} % sqrt(1/2)
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{-1.414*(\pgf at circ@res at other-\pgf at circ@res at step)}} % sqrt(1/2)
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}} % sqrt(1/2)
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at other}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+
+    \pgfusepath{draw}
+}
+
+%% Full triac
+\pgfcircdeclarebipolescaled{diodes}
+{
+    \anchor{gate}{\northeast}
+    \anchor{anode}{\southwest\pgf at y=0cm}
+    \anchor{G}{\northeast}
+    \anchor{cathode}{\northeast\pgf at y=0cm }
+}
+{\ctikzvalof{tripoles/triac/height}}
+{fulltriac}
+{\ctikzvalof{tripoles/triac/height}}
+{\ctikzvalof{tripoles/triac/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgf at circ@res at other = \ctikzvalof{tripoles/triac/diode width left}\pgf at circ@res at left
+    \pgf at circ@res at step = \ctikzvalof{tripoles/triac/diode width right}\pgf at circ@res at right
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at other}{0pt}}
+    \pgfpathlineto{\pgfpoint{0.95\pgf at circ@res at step}{0.707*(\pgf at circ@res at other-\pgf at circ@res at step)}} % sqrt(1/2)
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{1.414*(\pgf at circ@res at other-\pgf at circ@res at step)}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{-1.414*(\pgf at circ@res at other-\pgf at circ@res at step)}}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{0pt}}
+    \pgfpathlineto{\pgfpoint{0.95\pgf at circ@res at other}{-0.707*(\pgf at circ@res at other-\pgf at circ@res at step)}} % sqrt(1/2)
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{-1.414*(\pgf at circ@res at other-\pgf at circ@res at step)}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{1.414*(\pgf at circ@res at other-\pgf at circ@res at step)}}
+
+    \pgfusepath{draw,fill}
+
+    \pgfsetlinewidth{\pgfstartlinewidth}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{-0.707*(\pgf at circ@res at other-\pgf at circ@res at step)}} % sqrt(1/2)
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{-1.414*(\pgf at circ@res at other-\pgf at circ@res at step)}} % sqrt(1/2)
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}} % sqrt(1/2)
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at other}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+
+    \pgfusepath{draw}
+}
+
+%%%%%%%%%%%%%
+%% switches
+%%%%%%%%%%%%%
+
+%% (Closing) SPST
+\pgfcircdeclarebipolescaled{switches}
+{}
+{\ctikzvalof{bipoles/spst/depth}}
+{cspst}
+{\ctikzvalof{bipoles/spst/height}}
+{\ctikzvalof{bipoles/spst/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+    \pgfpathlineto{\pgfpoint{.6\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfusepath{draw}
+
+    \pgfscope
+        \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+        \pgfpathmoveto{\pgfpointpolar{90}{1.2\pgf at circ@res at right}}
+        \pgfpatharc{90}{-20}{1.2\pgf at circ@res at right}
+        \pgfsetarrowsend{latexslim}
+        \pgfsetbeveljoin
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+%% Opening SPST
+\pgfcircdeclarebipolescaled{switches}
+{}
+{\ctikzvalof{bipoles/spst/depth}}
+{ospst}
+{\ctikzvalof{bipoles/spst/height}}
+{\ctikzvalof{bipoles/spst/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+    \pgfpathlineto{\pgfpoint{.6\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfusepath{draw}
+
+    \pgfscope
+        \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+        \pgfpathmoveto{\pgfpointpolar{-10}{1.2\pgf at circ@res at right}}
+        \pgfpatharc{-10}{90}{1.2\pgf at circ@res at right}
+        \pgfsetarrowsend{latexslim}
+        \pgfsetbeveljoin
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+%% Normal open Switch
+\pgfcircdeclarebipolescaled{switches}
+{}
+{\ctikzvalof{bipoles/nos/depth}}
+{nos}
+{\ctikzvalof{bipoles/nos/height}}
+{\ctikzvalof{bipoles/nos/width}}
+{
+
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+    \pgfpathlineto{\pgfpoint{.9\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfsetbuttcap
+    \pgfusepath{draw}
+}
+
+%% Normal closed Switch
+\pgfcircdeclarebipolescaled{switches}
+{}
+{\ctikzvalof{bipoles/ncs/depth}}
+{ncs}
+{\ctikzvalof{bipoles/ncs/height}}
+{\ctikzvalof{bipoles/ncs/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+    \pgfpathlineto{\pgfpoint{.9\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfusepath{draw}
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+    \pgfpathlineto{\pgfpoint{.2\pgf at circ@res at right}{0pt}}
+    \pgfpathlineto{\pgfpoint{.2\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfusepath{draw}
+}
+
+%% Push Button
+\pgfcircdeclarebipolescaled{switches}
+{
+    \anchor{tip}{\northeast\pgf at x=0pt\relax}
+}
+{\ctikzvalof{bipoles/pushbutton/height 2}}
+{pushbutton}
+{\ctikzvalof{bipoles/pushbutton/height}}
+{\ctikzvalof{bipoles/pushbutton/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{.5\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{.5\pgf at circ@res at up}}
+    \pgfpathmoveto{\pgfpoint{0}{.5\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{0}{\pgf at circ@res at up}}
+    \pgfusepath{draw}
+
+    \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+    \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+    \pgftransformshift{\pgfpoint{2\pgf at circ@res at right}{0pt}}
+    \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+}
+
+%% Normally closed Push Button
+\pgfcircdeclarebipolescaled{switches}
+{
+    \anchor{tip}{\northeast\pgf at x=0pt\relax}
+}
+{\ctikzvalof{bipoles/pushbutton/height 2}}
+{ncpushbutton}
+{\ctikzvalof{bipoles/pushbutton/height}}
+{\ctikzvalof{bipoles/pushbutton/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+    % Warning, if the nodes will have a class, we have to touch this.
+    \pgf at circ@res at temp=\ctikzvalof{nodes width}\pgf at circ@Rlen
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{-\pgf at circ@res at temp}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{-\pgf at circ@res at temp}}
+    \pgfpathmoveto{\pgfpoint{0}{-\pgf at circ@res at temp}}
+    \pgfpathlineto{\pgfpoint{0}{\pgf at circ@res at up}}
+    \pgfusepath{draw}
+    %
+    \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+    \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+    \pgftransformshift{\pgfpoint{2\pgf at circ@res at right}{0pt}}
+    \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+}
+%% Push Button (normally closed but now open :-) see
+%% https://github.com/circuitikz/circuitikz/issues/128#issuecomment-731771299
+\pgfcircdeclarebipolescaled{switches}
+{
+    \anchor{tip}{
+        \pgf at circ@res at temp=\ctikzvalof{nodes width}\pgf at circ@Rlen
+        \northeast\divide\pgf at y by 2\advance\pgf at y by \pgf at circ@res at temp
+        \pgf at x=0pt\relax
+    }
+}
+{\ctikzvalof{bipoles/pushbutton/height 2}}
+{pushbuttonc}
+{\ctikzvalof{bipoles/pushbutton/height}}
+{\ctikzvalof{bipoles/pushbutton/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgf at circ@res at temp=\ctikzvalof{nodes width}\pgf at circ@Rlen
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at temp}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at temp}}
+    \pgfpathmoveto{\pgfpoint{0}{\pgf at circ@res at temp}}
+    \pgfpathlineto{\pgfpoint{0}{\pgf at circ@res at up/2+\pgf at circ@res at temp}}
+    \pgfusepath{draw}
+
+    \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+    \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+    \pgftransformshift{\pgfpoint{2\pgf at circ@res at right}{0pt}}
+    \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+}
+
+%% Normally closed Push Button now open
+\pgfcircdeclarebipolescaled{switches}
+{
+    \anchor{tip}{
+        \pgf at circ@res at temp=\ctikzvalof{nodes width}\pgf at circ@Rlen
+        \northeast\divide\pgf at y by 2\advance\pgf at y by \pgf at circ@res at temp
+        \pgf at x=0pt\relax
+    }
+}
+{\ctikzvalof{bipoles/pushbutton/height 2}}
+{ncpushbuttono}
+{\ctikzvalof{bipoles/pushbutton/height}}
+{\ctikzvalof{bipoles/pushbutton/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+    % Warning, if the nodes will have a class, we have to touch this.
+    \pgf at circ@res at temp=\ctikzvalof{nodes width}\pgf at circ@Rlen
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{-\pgf at circ@res at up/2}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{-\pgf at circ@res at up/2}}
+    \pgfpathmoveto{\pgfpoint{0}{-\pgf at circ@res at up/2}}
+    \pgfpathlineto{\pgfpoint{0}{\pgf at circ@res at up/2+\pgf at circ@res at temp}}
+    \pgfusepath{draw}
+    %
+    \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+    \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+    \pgftransformshift{\pgfpoint{2\pgf at circ@res at right}{0pt}}
+    \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+}
+%%% reed switches
+\pgfcircdeclarebipolescaled{switches}
+{}
+{\ctikzvalof{bipoles/reed/depth}}
+{reed}
+{\ctikzvalof{bipoles/reed/height}}
+{\ctikzvalof{bipoles/reed/width}}
+{
+    % this is designed to be the same as a "nos".
+    \pgfmathsetmacro{\@@tmpx}{0.9*\ctikzvalof{bipoles/nos/width}/\ctikzvalof{bipoles/reed/width}}
+    \pgfmathsetmacro{\@@tmpy}{\ctikzvalof{bipoles/nos/height}/\ctikzvalof{bipoles/reed/height}}
+    \pgfscope
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        % eclosure
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at up}{\pgf at circ@res at up}}
+        \pgfpatharc{90}{-90}{\pgf at circ@res at up}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left+\pgf at circ@res at up}{-\pgf at circ@res at up}}
+        \pgfpatharc{270}{90}{\pgf at circ@res at up}
+        \pgfpathclose
+        \pgf at circ@draworfill
+        % switch
+        \pgfpathmoveto{\pgfpoint{\@@tmpx\pgf at circ@res at left}{0pt}}
+        \pgfpathlineto{\pgfpoint{\@@tmpx\pgf at circ@res at right}{\@@tmpy\pgf at circ@res at up}}
+        % connection lines
+        \pgfsetbuttcap
+        \pgfusepath{draw}
+    \endpgfscope
+    % connection lines
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+    \pgfpathlineto{\pgfpoint{\@@tmpx\pgf at circ@res at left}{0pt}}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+    \pgfpathlineto{\pgfpoint{\@@tmpx\pgf at circ@res at right}{0pt}}
+    \pgfusepath{draw}
+}
+
+% cute switch "to" shapes help function
+% #1 -> name
+% #2 -> barposition
+% #3 -> arrowcode
+\long\def\pgfcircdeclarecutesw#1#2#3{
+    \pgfcircdeclarebipolescaled{switches}
+    {
+        \savedanchor\midlever{
+            % these values are calculated when we create the definition of the shape.
+            \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            \pgf at y=\ctikzvalof{bipoles/cuteswitch/height}\pgf at circ@scaled at Rlen
+            \pgf at circ@res at temp=\ctikzvalof{nodes width}\pgf at circ@scaled at Rlen
+            \pgf at circ@res at temp=\ctikzvalof{bipoles/cuteswitch/thickness}\pgf at circ@res at temp
+            \pgf at circ@res at down = -.5\pgf at y
+            \pgf at circ@res at up = .5\pgf at y
+            \pgfextracty{\pgf at circ@res at other}{#2}
+            \pgf at x=0pt
+            \pgf at y=.5\pgf at circ@res at other
+        }
+        % radius of the connector
+        % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+        % If cnnecting nodes are scaled, we have to modify this
+        \saveddimen{\radius}{\pgfmathsetlength\pgf at x{\pgf at circ@Rlen*\ctikzvalof{nodes width}}}
+        % shapename
+        \savedmacro{\thisshape}{\def\thisshape{\tikz at fig@name}}
+        % shape type
+        \savedmacro{\cshape}{\def\cshape{\ctikzvalof{bipoles/cuteswitch/shape}}}
+        % mid of the lever, to stack switches
+        \anchor{mid}{\midlever}
+        \anchor{cout}{\northeast \pgf at y=0cm}
+        \anchor{cin}{\southwest\pgf at y=0cm}
+        \anchor{out}{\northeast \pgf at y=0cm\advance\pgf at x by \radius}
+        \anchor{in}{\southwest\pgf at y=0cm\advance\pgf at x by -\radius}
+    }
+    {\ctikzvalof{bipoles/cuteswitch/height 2}}
+    {#1}
+    {\ctikzvalof{bipoles/cuteswitch/height}}
+    {\ctikzvalof{bipoles/cuteswitch/width}}{
+        \pgfscope
+        % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+        % If cnnecting nodes are scaled, we have to modify this
+        \pgf at circ@res at temp=\ctikzvalof{nodes width}\pgf at circ@Rlen
+        \pgf at circ@res at temp=\ctikzvalof{bipoles/cuteswitch/thickness}\pgf at circ@res at temp
+        \pgfsetlinewidth{2\pgf at circ@res at temp}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+        \pgfpathlineto{#2}
+        \pgfsetroundcap\pgfusepath{draw}
+        \endpgfscope
+        \pgfscope % arrow
+        #3
+        \endpgfscope
+        \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+        \pgfnode{\cshape}{center}{}{\thisshape-in}{\pgfusepath{draw}}
+        \pgftransformshift{\pgfpoint{2\pgf at circ@res at right}{0pt}}
+        \pgfnode{\cshape}{center}{}{\thisshape-out}{\pgfusepath{draw}}
+    }
+}
+
+%% closed cute switch
+\pgfcircdeclarecutesw{cuteclosedswitch}
+    {\pgfpoint{\pgf at circ@res at right}{1.5\pgf at circ@res at temp}}
+    {}
+
+%% open cute switch
+\pgfcircdeclarecutesw{cuteopenswitch}
+    {\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    {}
+
+%% closing cute switch
+\pgfcircdeclarecutesw{cuteclosingswitch}
+    {\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    {
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}} % in node
+    \pgfpathmoveto{\pgfpointpolar{70}{1.2\pgf at circ@res at right}}
+    \pgfpatharc{70}{-10}{1.2\pgf at circ@res at right}
+    \pgfsetarrowsend{latexslim}
+    \pgfusepath{draw}
+    }
+
+%% opening cute switch
+\pgfcircdeclarecutesw{cuteopeningswitch}
+    {\pgfpoint{\pgf at circ@res at right}{1.5\pgf at circ@res at temp}}
+    {
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}} % in node
+    \pgfpathmoveto{\pgfpointpolar{-10}{1.2\pgf at circ@res at right}}
+    \pgfpatharc{-10}{60}{1.2\pgf at circ@res at right}
+    \pgfsetarrowsend{latexslim}
+    \pgfusepath{draw}
+    }
+
+%%%%%%%%%%%%%%%%%
+%% Instruments
+%%%%%%%%%%%%%%%%%
+
+% % METERINGSHAPE
+\long\def\drawmeteringcircle{
+    \def\pgf at circ@temp{right}
+    \ifx\tikz at res@label at pos\pgf at circ@temp
+        \pgf at circ@res at step=-1.2\pgf at circ@res at up
+    \else
+        \def\pgf at circ@temp{below}
+        \ifx\tikz at res@label at pos\pgf at circ@temp
+            \pgf at circ@res at step=-1.2\pgf at circ@res at up
+        \else
+            \pgf at circ@res at step=1.2\pgf at circ@res at up
+        \fi
+    \fi
+    %draw connections to circle
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgfpathlineto{\pgfpoint{.9\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgfpathmoveto{\pgfpoint{.9\pgf at circ@res at right}{\pgf at circ@res at zero}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at zero}}
+    \pgfusepath{draw}
+    %draw circle
+    \pgfscope
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgfpathcircle{\pgfpointorigin}{.9\pgf at circ@res at up}
+        \pgf at circ@draworfill
+    \endpgfscope
+    %draw arrow
+    \pgfscope
+        \pgfsetarrowsend{latex}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{-\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+%AMPEREMETER
+\pgfcircdeclarebipolescaled{instruments}
+{}
+{\ctikzvalof{bipoles/ammeter/height}}
+{ammeter}
+{\ctikzvalof{bipoles/ammeter/height}}
+{\ctikzvalof{bipoles/ammeter/width}}
+{
+    \drawmeteringcircle
+    \pgfnode{circle}{center}{\pgf at circ@font at bold{A}}{}{}
+}
+%OHMMETER
+\pgfcircdeclarebipolescaled{instruments}
+{}
+{\ctikzvalof{bipoles/ohmmeter/height}}
+{ohmmeter}
+{\ctikzvalof{bipoles/ohmmeter/height}}
+{\ctikzvalof{bipoles/ohmmeter/width}}
+{
+    \drawmeteringcircle
+    \pgfnode{circle}{center}{\boldmath$\Omega$}{}{}
+}
+%VOLTMETER
+\pgfcircdeclarebipolescaled{instruments}
+{}
+{\ctikzvalof{bipoles/voltmeter/height}}
+{voltmeter}
+{\ctikzvalof{bipoles/voltmeter/height}}
+{\ctikzvalof{bipoles/voltmeter/width}}
+{
+    \drawmeteringcircle
+    \pgfnode{circle}{center}{\pgf at circ@font at bold{V}}{}{}
+
+}
+
+% oscilloscope, suggested by @nobrl https://github.com/circuitikz/circuitikz/issues/176
+\pgfcircdeclarebipolescaled{instruments}
+{
+    \anchor{in 1}{\southwest\pgf at y=0.75\pgf at y\pgf at x=0.4\pgf at x}
+    \anchor{in 2}{\southwest\pgf at y=0.75\pgf at y\pgf at x=-0.4\pgf at x}
+    % put the node text above and centered
+    \anchor{text}{\pgfextracty{\pgf at circ@res at up}{\northeast}
+        \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+            \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf at circ@res at up\relax
+        }
+    }
+}
+{\ctikzvalof{bipoles/oscope/height}}
+{oscope}
+{\ctikzvalof{bipoles/oscope/height}}
+{\ctikzvalof{bipoles/oscope/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfextracty{\pgf at circ@res at up}{\northeast}
+    \pgfextractx{\pgf at circ@res at right}{\northeast}
+    \pgfextractx{\pgf at circ@res at left}{\southwest}
+    \pgfextracty{\pgf at circ@res at down}{\southwest}
+    \pgfmathsetlength{\pgf at circ@res at step}{0.25*\pgf at circ@res at up}
+    \pgfscope
+        \pgfsetcornersarced{\pgfpoint{\pgf at circ@res at step}{\pgf at circ@res at step}}
+        \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+        % this would create a round (analog?) scope...
+        % \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
+        \pgf at circ@draworfill
+    \endpgfscope
+    % get the rotation
+    \ifpgf at circuit@straightinstruments
+        \pgfgettransformentries\a\b\temp\temp\temp\temp
+        \pgfmathsetmacro{\rot}{-atan2(\b,\a)}
+    \else
+        \edef\rot{0}
+    \fi
+    % and unrotate the scope
+    \pgfscope
+        \pgftransformrotate{\rot}
+        % grid
+        \pgfscope
+            \pgfsetlinewidth{0.5\pgfstartlinewidth}
+            \pgfpathmoveto{\pgfpoint{0.75\pgf at circ@res at left}{0.25\pgf at circ@res at down}}
+            \pgfpathgrid[stepx=\pgf at circ@res at step, stepy=\pgf at circ@res at step]%
+            {\pgfpoint{0.75\pgf at circ@res at left}{0.5\pgf at circ@res at down}}
+            {\pgfpoint{0.75\pgf at circ@res at right}{0.5\pgf at circ@res at up}}
+            \pgfsetstrokeopacity{0.5}
+            \pgfusepath{draw}
+        \endpgfscope
+        % function displayed, thanks to
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgfpathmoveto{\pgfpoint{0.75\pgf at circ@res at left}{0.25\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{0.05\pgf at circ@res at left}{0.25\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0.05\pgf at circ@res at left}{0.25\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{0.65\pgf at circ@res at right}{0.25\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0.65\pgf at circ@res at right}{0.25\pgf at circ@res at down}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+% generic round meter with always horizontal text, no arrow
+\pgfcircdeclarebipolescaled{instruments}
+{}
+{\ctikzvalof{bipoles/esource/height}}
+{rmeter}
+{\ctikzvalof{bipoles/esource/height}}
+{\ctikzvalof{bipoles/esource/width}}
+{
+    \pgfpointorigin
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
+    \pgf at circ@draworfill
+    % draw the text label
+    % get the rotation
+    \ifpgf at circuit@straightinstruments
+        \pgfgettransformentries\a\b\temp\temp\temp\temp
+        \pgfmathsetmacro{\rot}{-atan2(\b,\a)}
+    \else
+        \edef\rot{0}
+    \fi
+    % and unrotate the scope
+    \pgfscope
+        \pgfsetcolor{\ctikzvalof{color}}
+        \pgftransformrotate{\rot}
+        \pgftext[center,x=0,y=0]{\ctikzvalof{bipoles/twoport/text}}
+    \endpgfscope
+}
+
+% generic round meter with always horizontal text, with arrow
+\pgfcircdeclarebipolescaled{instruments}
+{}
+{\ctikzvalof{bipoles/esource/height}}
+{rmeterwa}
+{\ctikzvalof{bipoles/esource/height}}
+{\ctikzvalof{bipoles/esource/width}}
+{
+    \pgfpointorigin
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
+    \pgf at circ@draworfill
+    % draw the text label
+    % get the rotation
+    \ifpgf at circuit@straightinstruments
+        \pgfgettransformentries\a\b\temp\temp\temp\temp
+        \pgfmathsetmacro{\rot}{-atan2(\b,\a)}
+    \else
+        \edef\rot{0}
+    \fi
+    % and unrotate the scope
+    \pgfscope
+        \pgftransformrotate{\rot}
+        \pgfsetcolor{\ctikzvalof{color}}
+        \pgfsetlinewidth{\pgfstartlinewidth}
+        % arrow: create  a center hole to have better visual
+        \pgfscope
+            % clipping path: first a rectangle bigger then the shape
+            % to avoid problems with the line thickness
+            \pgfpathrectanglecorners{\pgfpoint{2\pgf at circ@res at left}{2\pgf at circ@res at down}}
+            {\pgfpoint{2\pgf at circ@res at right}{2\pgf at circ@res at up}}
+            % next open a circle into it
+            \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{.6\pgf at circ@res at up}}{\pgfpoint{.6\pgf at circ@res at left}{0}}
+            % do the difference and clip before drawing
+            \pgfseteorule
+            \pgfusepath{clip}
+            \pgfsetarrowsend{latexslim}
+            % the arrow is better if it has a bit of breath and it's not 45º
+            \pgfpathmoveto{\pgfpoint{.8\pgf at circ@res at left}{1.2\pgf at circ@res at down}}
+            \pgfpathlineto{\pgfpoint{.8\pgf at circ@res at right}{1.2\pgf at circ@res at up}}
+            \pgfusepath{draw}
+        \endpgfscope
+        \pgftext[center]{\ctikzvalof{bipoles/twoport/text}}
+    \endpgfscope
+}
+
+% generic square meter with always horizontal text
+\pgfcircdeclarebipolescaled{instruments}
+{
+    \anchor{in 1}{\southwest\pgf at y=0.75\pgf at y\pgf at x=0.4\pgf at x}
+    \anchor{in 2}{\southwest\pgf at y=0.75\pgf at y\pgf at x=-0.4\pgf at x}
+    % put the node text above and centered
+    \anchor{text}{\pgfextracty{\pgf at circ@res at up}{\northeast}
+        \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+            \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf at circ@res at up\relax
+        }
+    }
+}
+{\ctikzvalof{bipoles/smeter/height}}
+{smeter}
+{\ctikzvalof{bipoles/smeter/height}}
+{\ctikzvalof{bipoles/smeter/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfextracty{\pgf at circ@res at up}{\northeast}
+    \pgfextractx{\pgf at circ@res at right}{\northeast}
+    \pgfextractx{\pgf at circ@res at left}{\southwest}
+    \pgfextracty{\pgf at circ@res at down}{\southwest}
+    \pgfmathsetlength{\pgf at circ@res at step}{0.25*\pgf at circ@res at up}
+    \pgfscope
+        \pgfsetcornersarced{\pgfpoint{\pgf at circ@res at step}{\pgf at circ@res at step}}
+        \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+        \pgf at circ@draworfill
+    \endpgfscope
+    % get the rotation
+    \ifpgf at circuit@straightinstruments
+        \pgfgettransformentries\a\b\temp\temp\temp\temp
+        \pgfmathsetmacro{\rot}{-atan2(\b,\a)}
+    \else
+        \edef\rot{0}
+    \fi
+    % and unrotate the scope
+    \pgfscope
+        \pgftransformrotate{\rot}
+        % the metering window
+        \pgfscope
+            \def\@starta{105}\def\@stopa{75}
+            \pgfsetlinewidth{\pgfstartlinewidth}
+            \pgftransformshift{\pgfpoint{0pt}{-1.8\pgf at circ@res at up}}
+            \pgfpathmoveto{\pgfpointpolar{\@starta}{2\pgf at circ@res at up}}
+            \pgfpatharc{\@starta}{\@stopa}{2\pgf at circ@res at up}
+            \pgfpathlineto{\pgfpointpolar{\@stopa}{2.5\pgf at circ@res at up}}
+            \pgfpatharc{\@stopa}{\@starta}{2.5\pgf at circ@res at up}
+            \pgfclosepath
+            \pgfpathmoveto{\pgfpointpolar{80}{2\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpointpolar{80}{2.4\pgf at circ@res at up}}
+            \pgfusepath{draw}
+        \endpgfscope
+        \pgftext[center, y=0.5\pgf at circ@res at down]{\ctikzvalof{bipoles/twoport/text}}
+    \endpgfscope
+}
+
+% probes qucs style:
+% #1 : name
+% #2 : extra code
+\long\def\pgfcirc at qucsprobe#1#2{
+    \pgfcircdeclarebipolescaled{instruments}
+    {
+        \anchor{v+}{\southwest\pgf at x=0.6\pgf at x}
+        \anchor{v-}{\southwest\pgf at x=-0.6\pgf at x}
+        % put the node text above and centered
+        \anchor{text}{\pgfextracty{\pgf at circ@res at up}{\northeast}
+            \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+                \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf at circ@res at up\relax
+            }
+        }
+    }
+    {\ctikzvalof{bipoles/qmeter/depth}}
+    {#1}
+    {\ctikzvalof{bipoles/qmeter/height}}
+    {\ctikzvalof{bipoles/qmeter/width}}
+    {
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgfextracty{\pgf at circ@res at up}{\northeast}
+        \pgfextractx{\pgf at circ@res at right}{\northeast}
+        \pgfextractx{\pgf at circ@res at left}{\southwest}
+        \pgfextracty{\pgf at circ@res at down}{\southwest}
+        \pgfmathsetlength{\pgf at circ@res at step}{0.25*\pgf at circ@res at up}
+        \pgfscope
+            \pgfscope
+                \pgfsetcornersarced{\pgfpoint{\pgf at circ@res at step}{\pgf at circ@res at step}}
+                \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+            \pgf at circ@draworfill
+            \endpgfscope
+            \def\@starta{103}\def\@stopa{77}
+            \pgfsetlinewidth{\pgfstartlinewidth}
+            \pgfscope
+                \pgftransformshift{\pgfpoint{0pt}{-1.7\pgf at circ@res at up}}
+                \pgfpathmoveto{\pgfpointpolar{\@starta}{2.1\pgf at circ@res at up}}
+                \pgfpatharc{\@starta}{\@stopa}{2.1\pgf at circ@res at up}
+                \pgfpathlineto{\pgfpointpolar{\@stopa}{2.5\pgf at circ@res at up}}
+                \pgfpatharc{\@stopa}{\@starta}{2.5\pgf at circ@res at up}
+                \pgfclosepath
+                \pgfpathmoveto{\pgfpointpolar{83}{2.1\pgf at circ@res at up}}
+                \pgfpathlineto{\pgfpointpolar{83}{2.4\pgf at circ@res at up}}
+                \pgfusepath{draw}
+                \pgf at circ@draworfill
+            \endpgfscope
+            #2
+        \endpgfscope
+    }
+}
+
+\pgfcirc at qucsprobe{qiprobe}{
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+    \pgfusepath{draw}
+    \pgfnode{currarrow}{center}{}{}{}
+}
+
+\pgfcirc at qucsprobe{qvprobe}{
+    \pgfmathsetlength{\pgf at circ@res at other}{\ctikzvalof{nodes width}*\pgf at circ@scaled at Rlen}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+    \pgfpathlineto{\pgfpoint{.6\pgf at circ@res at left}{0pt}}
+    \pgfpathcircle{\pgfpoint{.6\pgf at circ@res at left+\pgf at circ@res at other}{0pt}}{\pgf at circ@res at other}
+    \pgfpathmoveto{\pgfpoint{.6\pgf at circ@res at right}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+    \pgfpathcircle{\pgfpoint{.6\pgf at circ@res at right-\pgf at circ@res at other}{0pt}}{\pgf at circ@res at other}
+    \pgfusepath{draw}
+    \pgfscope
+        % "+" and "-", drawn so that they scale correctly
+        \pgfsetlinewidth{2\pgfstartlinewidth}
+        \pgfpathmoveto{\pgfpoint{.6\pgf at circ@res at left+\pgf at circ@res at other}{-1.5\pgf at circ@res at other}}
+        \pgfpathlineto{\pgfpoint{.6\pgf at circ@res at left+\pgf at circ@res at other}{-3.5\pgf at circ@res at other}}
+        \pgfpathmoveto{\pgfpoint{.6\pgf at circ@res at left+0\pgf at circ@res at other}{-2.5\pgf at circ@res at other}}
+        \pgfpathlineto{\pgfpoint{.6\pgf at circ@res at left+2\pgf at circ@res at other}{-2.5\pgf at circ@res at other}}
+        \pgfpathmoveto{\pgfpoint{.6\pgf at circ@res at right+0\pgf at circ@res at other}{-2.5\pgf at circ@res at other}}
+        \pgfpathlineto{\pgfpoint{.6\pgf at circ@res at right-2\pgf at circ@res at other}{-2.5\pgf at circ@res at other}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+\pgfcirc at qucsprobe{qpprobe}{
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+    \pgfusepath{draw}
+    \pgfnode{currarrow}{center}{}{}{}
+    \pgfmathsetlength{\pgf at circ@res at other}{\ctikzvalof{nodes width}*\pgf at circ@scaled at Rlen}
+    \pgfpathcircle{\pgfpoint{.6\pgf at circ@res at left}{-3\pgf at circ@res at other}}{\pgf at circ@res at other}
+    \pgfpathmoveto{\pgfpoint{.6\pgf at circ@res at left}{-4\pgf at circ@res at other}}
+    \pgfpathlineto{\pgfpoint{.6\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfpathcircle{\pgfpoint{.6\pgf at circ@res at right}{-3\pgf at circ@res at other}}{\pgf at circ@res at other}
+    \pgfpathmoveto{\pgfpoint{.6\pgf at circ@res at right}{-4\pgf at circ@res at other}}
+    \pgfpathlineto{\pgfpoint{.6\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfusepath{draw}
+    \pgfscope
+        % "+" and "-", drawn so that they scale correctly
+        \pgfsetlinewidth{2\pgfstartlinewidth}
+        \pgfpathmoveto{\pgfpoint{.6\pgf at circ@res at left+3\pgf at circ@res at other}{-2\pgf at circ@res at other}}
+        \pgfpathlineto{\pgfpoint{.6\pgf at circ@res at left+3\pgf at circ@res at other}{-4\pgf at circ@res at other}}
+        \pgfpathmoveto{\pgfpoint{.6\pgf at circ@res at left+2\pgf at circ@res at other}{-3\pgf at circ@res at other}}
+        \pgfpathlineto{\pgfpoint{.6\pgf at circ@res at left+4\pgf at circ@res at other}{-3\pgf at circ@res at other}}
+        \pgfpathmoveto{\pgfpoint{.6\pgf at circ@res at right-4\pgf at circ@res at other}{-3\pgf at circ@res at other}}
+        \pgfpathlineto{\pgfpoint{.6\pgf at circ@res at right-2\pgf at circ@res at other}{-3\pgf at circ@res at other}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+% current loop for oscope and similar: stylized
+\pgfcircdeclarebipolescaled{instruments}
+{
+    \anchor{i}{\northeast\pgf at x=0pt\relax}
+    \anchor{text}{
+        \pgfextracty{\pgf at circ@res at up}{\northeast}
+        \pgfextractx{\pgf at circ@res at left}{\northeast}
+        \pgfpoint{-.5\wd\pgfnodeparttextbox+\pgf at circ@res at left}{
+            \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf at circ@res at up\relax
+        }
+    }
+}
+{\ctikzvalof{bipoles/iloop/height}}
+{iloop}
+{\ctikzvalof{bipoles/iloop/height}}
+{\ctikzvalof{bipoles/iloop/width}}
+{
+    \pgfextracty{\pgf at circ@res at up}{\northeast}
+    \pgfextractx{\pgf at circ@res at right}{\northeast}
+    \pgf at circ@res at down=-\pgf at circ@res at up
+    \pgf at circ@res at left=-\pgf at circ@res at right
+    \pgfscope
+        \pgfstartlinewidth=\pgflinewidth
+        \pgfsetcolor{\ctikzvalof{color}}
+        % external ellipse
+        \pgfscope
+            \pgf at circ@setlinewidth{bipoles}{\pgflinewidth}
+            % clipping path: first a rectangle bigger then the shape
+            % to avoid problems with the line thickness
+            \pgfpathrectanglecorners{\pgfpoint{2\pgf at circ@res at left}{2\pgf at circ@res at down}}
+            {\pgfpoint{2\pgf at circ@res at right}{2\pgf at circ@res at up}}
+            % next the opening to the left
+            \pgfpathrectanglecorners{\pgfpoint{2\pgf at circ@res at left}{.1\pgf at circ@res at down}}
+            {\pgfpoint{0pt}{.1\pgf at circ@res at up}}
+            % do the difference and clip before drawing
+            \pgfseteorule
+            \pgfusepath{clip}
+            \pgfpathellipse{\pgfpointorigin}{
+                \pgfpoint{0pt}{0.8\pgf at circ@res at up}}{
+            \pgfpoint{0.4\pgf at circ@res at right}{0pt}}
+            \pgfusepath{draw}
+        \endpgfscope
+        % internal wire
+        \pgfsetlinewidth{\pgfstartlinewidth}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+        \pgfpathlineto{\pgfpoint{0.3\pgf at circ@res at right}{0pt}}
+        \pgfpathmoveto{\pgfpoint{0.5\pgf at circ@res at right}{0pt}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+        % and the contact line up
+        \pgfpathmoveto{\pgfpoint{0pt}{0.8\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+% current loop for oscope and similar: real (double connection)
+\pgfcircdeclarebipolescaled{instruments}
+{
+    \anchor{i+}{
+        \pgfextracty{\pgf at circ@res at up}{\northeast}
+        \pgfextractx{\pgf at circ@res at right}{\northeast}
+        \pgf at circ@res at step=0.4\pgf at circ@res at right
+        \pgf at circ@res at other=0.8\pgf at circ@res at up
+        \pgfpointpolar{105}{\pgf at circ@res at step and \pgf at circ@res at other}
+        \pgf at y=\pgf at circ@res at up
+    }
+    \anchor{i-}{
+        \pgfextracty{\pgf at circ@res at up}{\northeast}
+        \pgfextractx{\pgf at circ@res at right}{\northeast}
+        \pgf at circ@res at step=0.4\pgf at circ@res at right
+        \pgf at circ@res at other=0.8\pgf at circ@res at up
+        \pgfpointpolar{75}{\pgf at circ@res at step and \pgf at circ@res at other}
+        \pgf at y=\pgf at circ@res at up
+    }
+    \anchor{text}{
+        \pgfextracty{\pgf at circ@res at up}{\northeast}
+        \pgfextractx{\pgf at circ@res at left}{\northeast}
+        \pgfpoint{-.5\wd\pgfnodeparttextbox+\pgf at circ@res at left}{
+            \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf at circ@res at up\relax
+        }
+    }
+}
+{\ctikzvalof{bipoles/iloop/height}}
+{iloop2}
+{\ctikzvalof{bipoles/iloop/height}}
+{\ctikzvalof{bipoles/iloop/width}}
+{
+    \pgfextracty{\pgf at circ@res at up}{\northeast}
+    \pgfextractx{\pgf at circ@res at right}{\northeast}
+    \pgf at circ@res at down=-\pgf at circ@res at up
+    \pgf at circ@res at left=-\pgf at circ@res at right
+    % must be the same than internal i+ and i- anchors definition
+    \pgf at circ@res at step=0.4\pgf at circ@res at right
+    \pgf at circ@res at other=0.8\pgf at circ@res at up
+    \def\@plus{\pgfpointpolar{105}{\pgf at circ@res at step and \pgf at circ@res at other}}
+    \def\@minus{\pgfpointpolar{75}{\pgf at circ@res at step and \pgf at circ@res at other}}
+    \pgfscope
+        \pgfstartlinewidth=\pgflinewidth
+        \pgfsetcolor{\ctikzvalof{color}}
+        % external ellipse
+        \pgfscope
+            \pgf at circ@setlinewidth{bipoles}{\pgflinewidth}
+            % clipping path: first a rectangle bigger then the shape
+            % to avoid problems with the line thickness
+            \pgfpathrectanglecorners{\pgfpoint{2\pgf at circ@res at left}{2\pgf at circ@res at down}}
+            {\pgfpoint{2\pgf at circ@res at right}{2\pgf at circ@res at up}}
+            % next the opening to the left
+            \pgfpathrectanglecorners{\pgfpoint{2\pgf at circ@res at left}{.1\pgf at circ@res at down}}
+            {\pgfpoint{0pt}{.1\pgf at circ@res at up}}
+            % do the difference and clip before drawing
+            \pgfseteorule
+            \pgfusepath{clip}
+            \pgfpathmoveto{\@plus}
+            \pgfpatharc{105}{435}{\pgf at circ@res at step and \pgf at circ@res at other}
+            \pgfusepath{draw}
+        \endpgfscope
+        % internal wire
+        \pgfsetlinewidth{\pgfstartlinewidth}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+        \pgfpathlineto{\pgfpoint{0.3\pgf at circ@res at right}{0pt}}
+        \pgfpathmoveto{\pgfpoint{0.5\pgf at circ@res at right}{0pt}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+        % and the contact line up
+        % I use ...left and ---right as temporal lengths here to avoid defining more
+        \pgfextractx{\pgf at circ@res at left}{\@plus}
+        \pgfextractx{\pgf at circ@res at right}{\@minus}
+        \pgfpathmoveto{\@plus}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgfpathmoveto{\@minus}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+
+%% Varistor
+\pgfcircdeclarebipolescaled{resistors}
+{
+    \pgfcirc at border@extend at updown{1}{1.4}
+}
+{\ctikzvalof{bipoles/varistor/height}}
+{varistor}
+{\ctikzvalof{bipoles/varistor/height}}
+{\ctikzvalof{bipoles/varistor/width}}
+{
+    \pgfscope
+        \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\ctikzvalof{bipoles/varistor/main}\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{-\ctikzvalof{bipoles/varistor/main}\pgf at circ@res at up}}
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgf at circ@draworfill
+    \endpgfscope
+
+    \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at left}{-\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{.4\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfusepath{draw}
+
+    \pgftext[top,x=.65\pgf at circ@res at left,y=1.2\pgf at circ@res at down]{{\pgf at circ@font at tiny\textsf{U}}}
+}
+
+%%%%%%%%%%%%%%
+%% RF bipoles
+%%%%%%%%%%%%%%
+
+% transmission line
+\pgfcircdeclarebipolescaled{RF}
+{}
+{\ctikzvalof{bipoles/tline/height}}
+{tline}
+{\ctikzvalof{bipoles/tline/height}}
+{\ctikzvalof{bipoles/tline/width}}
+{
+    \pgf at circ@res at step=.2\pgf at circ@res at right % half x axis
+    \begin{pgftransparencygroup}
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at step}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left+\pgf at circ@res at step}{\pgf at circ@res at up}}
+        \pgfpatharc{-90}{90}{-\pgf at circ@res at step and -\pgf at circ@res at up}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at step}{\pgf at circ@res at down}}
+        \pgf at circ@draworfill
+        \pgfpathellipse{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at step}{0pt}}
+        {\pgfpoint{\pgf at circ@res at step}{0pt}}{\pgfpoint{0pt}{-\pgf at circ@res at up}}
+        \pgf at circ@draworfill
+    \end{pgftransparencygroup}
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at step}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+    \pgfusepath{stroke}
+}
+
+% microstrip transmission line
+\pgfcircdeclarebipolescaled{RF}
+{}
+{\ctikzvalof{bipoles/mstline/height}}
+{mstline}
+{\ctikzvalof{bipoles/mstline/height}}
+{\ctikzvalof{bipoles/mstline/width}}
+{
+    \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgf at circ@draworfill
+}
+
+%%%%%%%%%%%%%%%%%%%
+%% Block diagrams
+%%%%%%%%%%%%%%%%%%%
+
+%% Draw the two-port fillable box
+\def\pgf at circ@twoportbox{
+    \pgfscope
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+        \pgf at circ@draworfill
+    \endpgfscope
+}
+
+%% Generic two port box
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/twoport/height}}
+{twoport}
+{\ctikzvalof{bipoles/twoport/height}}
+{\ctikzvalof{bipoles/twoport/width}}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/twoport/width}\pgf at circ@scaled at Rlen
+    \divide \pgf at circ@res at step by 2
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgf at circ@res at other = \pgf at circ@res at left
+    \advance\pgf at circ@res at other by \pgf at circ@res at step
+    \ifpgf at circuit@dashed
+        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+    \fi
+    % draw outer box
+    \pgf at circ@twoportbox
+    \ifpgf at circuit@inputarrow
+        {
+            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
+        }
+    \fi
+
+    % rotate inner symbol
+    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
+    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+        \pgftransformrotate{270}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+        \pgftransformrotate{180}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+        \pgftransformrotate{90}
+    \fi\fi
+
+    % draw inner symbol
+    \pgftext[center,x=0,y=0]{\ctikzvalof{bipoles/twoport/text}}
+
+}
+
+%% twoport split
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/twoportsplit/width}}
+{twoportsplit}
+{\ctikzvalof{bipoles/twoportsplit/width}}
+{\ctikzvalof{bipoles/twoportsplit/width}}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/twoportsplit/width}\pgf at circ@scaled at Rlen
+    \divide \pgf at circ@res at step by 2
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgf at circ@res at other = \pgf at circ@res at left
+    \advance\pgf at circ@res at other by \pgf at circ@res at step
+
+    \ifpgf at circuit@dashed
+        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+    \fi
+
+    % draw outer box
+    \pgf at circ@twoportbox
+
+    \ifpgf at circuit@inputarrow
+        {
+            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
+        }
+    \fi
+
+    %get texts
+    \def\pgfcirc at tin{\ctikzvalof{bipoles/twoport/text in}}
+    \def\pgfcirc at tout{\ctikzvalof{bipoles/twoport/text out}}
+
+    % rotate inner symbol
+    \def\texti{\pgfcirc at tin}
+    \def\textii{\pgfcirc at tout}
+    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
+    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+        \def\texti{\pgfcirc at tout}
+        \def\textii{\pgfcirc at tin}
+        \pgftransformrotate{270}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225  % 134 degree, because >= 135 is not possible
+        \def\texti{\pgfcirc at tout}
+        \def\textii{\pgfcirc at tin}
+        \pgftransformrotate{180}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+        \pgftransformrotate{90}
+        \def\texti{\pgfcirc at tin}
+        \def\textii{\pgfcirc at tout}
+    \fi\fi
+
+    % draw inner symbol
+    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+    \pgfsetarrows{-} %never draw arrows
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfusepath{draw}
+
+    \pgftext[center,x=0.45\pgf at circ@res at left,y=0.45\pgf at circ@res at up]{\texti}
+    \pgftext[center,x=0.45\pgf at circ@res at right,y=0.45\pgf at circ@res at down]{\textii}
+}
+
+%% voltage controled oscillator
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/vco/width}}
+{vco}
+{\ctikzvalof{bipoles/twoport/width}}
+{\ctikzvalof{bipoles/vco/width}}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/vco/width}\pgf at circ@scaled at Rlen
+    \divide \pgf at circ@res at step by 2
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgf at circ@res at other = \pgf at circ@res at left
+    \advance\pgf at circ@res at other by \pgf at circ@res at step
+
+    \ifpgf at circuit@dashed
+        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+    \fi
+    % draw circle
+    \pgfscope
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgfpathcircle{\pgfpoint{0}{0}} {\pgf at circ@res at step}
+        \pgf at circ@draworfill
+    \endpgfscope
+    \ifpgf at circuit@inputarrow
+        {
+            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
+        }
+    \fi
+
+    % rotate inner symbol
+    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
+    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+        \pgftransformrotate{270}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225  % 134 degree, because >= 135 is not possible
+        \pgftransformrotate{180}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+        \pgftransformrotate{90}
+    \fi\fi
+
+    % draw inner sine waves
+    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{-.5\pgf at circ@res at step}{0\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfusepath{draw}
+}
+
+%% bandpass filter
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/bandpass/width}}
+{bandpass}
+{\ctikzvalof{bipoles/bandpass/width}}
+{\ctikzvalof{bipoles/bandpass/width}}
+{
+
+    \pgf at circ@res at step = \ctikzvalof{bipoles/bandpass/width}\pgf at circ@scaled at Rlen
+    \divide \pgf at circ@res at step by 2
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgf at circ@res at other = \pgf at circ@res at left
+    \advance\pgf at circ@res at other by \pgf at circ@res at step
+
+    \ifpgf at circuit@dashed
+        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+    \fi
+
+    % draw outer box
+    \pgf at circ@twoportbox
+
+    \ifpgf at circuit@inputarrow
+        {
+            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
+        }
+    \fi
+
+    % rotate inner symbol
+    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
+    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+        \pgftransformrotate{270}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225  % 134 degree, because >= 135 is not possible
+        \pgftransformrotate{180}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+        \pgftransformrotate{90}
+    \fi\fi
+
+    % draw inner symbol
+    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+    \pgfsetarrows{-} %never draw arrows
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{0.5\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfusepath{draw}
+    \pgfpathmoveto{\pgfpoint{-0.15\pgf at circ@res at step}{0.35\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{0.15\pgf at circ@res at step}{0.65\pgf at circ@res at step}}
+    \pgfusepath{draw}
+
+    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{0}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfusepath{draw}
+
+    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{-0.5\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfusepath{draw}
+    \pgfpathmoveto{\pgfpoint{-0.15\pgf at circ@res at step}{-0.65\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{0.15\pgf at circ@res at step}{-0.35\pgf at circ@res at step}}
+    \pgfusepath{draw}
+}
+
+%% bandstop filter
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/bandstop/width}}
+{bandstop}
+{\ctikzvalof{bipoles/bandstop/width}}
+{\ctikzvalof{bipoles/bandstop/width}}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/bandstop/width}\pgf at circ@scaled at Rlen
+    \divide \pgf at circ@res at step by 2
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgf at circ@res at other = \pgf at circ@res at left
+    \advance\pgf at circ@res at other by \pgf at circ@res at step
+
+    \ifpgf at circuit@dashed
+        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+    \fi
+
+    % draw outer box
+    \pgf at circ@twoportbox
+
+    \ifpgf at circuit@inputarrow
+        {
+            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
+        }
+    \fi
+
+    % rotate inner symbol
+    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
+    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+        \pgftransformrotate{270}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225% 134 degree, because >= 135 is not possible
+        \pgftransformrotate{180}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+        \pgftransformrotate{90}
+    \fi\fi
+
+    % draw inner symbol
+    \pgfsetdash{}{0pt}% always draw solid line for inner symbol
+    \pgfsetarrows{-}%never draw arrows
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{0.5\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfusepath{draw}
+
+    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{0}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfusepath{draw}
+    \pgfpathmoveto{\pgfpoint{-0.15\pgf at circ@res at step}{-0.15\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{0.15\pgf at circ@res at step}{0.15\pgf at circ@res at step}}
+    \pgfusepath{draw}
+
+    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{-0.5\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfusepath{draw}
+}
+
+%% highpass filter
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/highpass/width}}
+{highpass}
+{\ctikzvalof{bipoles/highpass/width}}
+{\ctikzvalof{bipoles/highpass/width}}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/highpass/width}\pgf at circ@scaled at Rlen
+    \divide \pgf at circ@res at step by 2
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgf at circ@res at other = \pgf at circ@res at left
+    \advance\pgf at circ@res at other by \pgf at circ@res at step
+
+    \ifpgf at circuit@dashed
+        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+    \fi
+
+    % draw outer box
+    \pgf at circ@twoportbox
+
+    \ifpgf at circuit@inputarrow
+        {
+            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
+        }
+    \fi
+
+    % rotate inner symbol
+    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
+    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+        \pgftransformrotate{270}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225  % 134 degree, because >= 135 is not possible
+        \pgftransformrotate{180}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+        \pgftransformrotate{90}
+    \fi\fi
+
+    % draw inner symbol
+    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+    \pgfsetarrows{-} %never draw arrows
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{0.5\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfusepath{draw}
+
+    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{0}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfusepath{draw}
+    \pgfpathmoveto{\pgfpoint{-0.15\pgf at circ@res at step}{-0.15\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{0.15\pgf at circ@res at step}{0.15\pgf at circ@res at step}}
+    \pgfusepath{draw}
+
+    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{-0.5\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfusepath{draw}
+    \pgfpathmoveto{\pgfpoint{-0.15\pgf at circ@res at step}{-0.65\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{0.15\pgf at circ@res at step}{-0.35\pgf at circ@res at step}}
+    \pgfusepath{draw}
+}
+
+%% lowpass filter
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/lowpass/width}}
+{lowpass}
+{\ctikzvalof{bipoles/lowpass/width}}
+{\ctikzvalof{bipoles/lowpass/width}}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/lowpass/width}\pgf at circ@scaled at Rlen
+    \divide \pgf at circ@res at step by 2
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgf at circ@res at other = \pgf at circ@res at left
+    \advance\pgf at circ@res at other by \pgf at circ@res at step
+
+    \ifpgf at circuit@dashed
+        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+    \fi
+
+    % draw outer box
+    \pgf at circ@twoportbox
+
+    \ifpgf at circuit@inputarrow
+        {
+            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
+        }
+    \fi
+
+    % rotate inner symbol
+    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
+    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+        \pgftransformrotate{270}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225  % 134 degree, because >= 135 is not possible
+        \pgftransformrotate{180}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+        \pgftransformrotate{90}
+    \fi\fi
+
+    % draw inner symbol
+    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+    \pgfsetarrows{-} %never draw arrows
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{0.5\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfusepath{draw}
+    \pgfpathmoveto{\pgfpoint{-0.15\pgf at circ@res at step}{0.35\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{0.15\pgf at circ@res at step}{0.65\pgf at circ@res at step}}
+    \pgfusepath{draw}
+
+    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{0}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfusepath{draw}
+    \pgfpathmoveto{\pgfpoint{-0.15\pgf at circ@res at step}{-0.15\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{0.15\pgf at circ@res at step}{0.15\pgf at circ@res at step}}
+    \pgfusepath{draw}
+
+    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{-0.5\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfusepath{draw}
+}
+
+%% allpass filter
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/allpass/width}}
+{allpass}
+{\ctikzvalof{bipoles/allpass/width}}
+{\ctikzvalof{bipoles/allpass/width}}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/allpass/width}\pgf at circ@scaled at Rlen
+    \divide \pgf at circ@res at step by 2
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgf at circ@res at other = \pgf at circ@res at left
+    \advance\pgf at circ@res at other by \pgf at circ@res at step
+
+    \ifpgf at circuit@dashed
+        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+    \fi
+
+    % draw outer box
+    \pgf at circ@twoportbox
+
+    \ifpgf at circuit@inputarrow
+        {
+            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
+        }
+    \fi
+
+    % rotate inner symbol
+    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
+    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+        \pgftransformrotate{270}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225  % 134 degree, because >= 135 is not possible
+        \pgftransformrotate{180}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+        \pgftransformrotate{90}
+    \fi\fi
+
+    % draw inner symbol
+    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+    \pgfsetarrows{-} %never draw arrows
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{0.5\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfusepath{draw}
+
+    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{0}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfusepath{draw}
+
+    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{-0.5\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
+    \pgfusepath{draw}
+}
+
+%% ADC
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/adc/width}}
+{adc}
+{\ctikzvalof{bipoles/adc/width}}
+{\ctikzvalof{bipoles/adc/width}}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/adc/width}\pgf at circ@scaled at Rlen
+    \divide \pgf at circ@res at step by 2
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgf at circ@res at other = \pgf at circ@res at left
+    \advance\pgf at circ@res at other by \pgf at circ@res at step
+
+    \ifpgf at circuit@dashed
+        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+    \fi
+
+    % draw outer box
+    \pgf at circ@twoportbox
+
+    \ifpgf at circuit@inputarrow
+        {
+            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
+        }
+    \fi
+
+    % rotate inner symbol
+    \def\texti{A}
+    \def\textii{D}
+    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
+    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+        \def\texti{D}
+        \def\textii{A}
+        \pgftransformrotate{270}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225  % 134 degree, because >= 135 is not possible
+        \def\texti{D}
+        \def\textii{A}
+        \pgftransformrotate{180}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+        \pgftransformrotate{90}
+        \def\texti{A}
+        \def\textii{D}
+    \fi\fi
+
+    % draw inner symbol
+    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+    \pgfsetarrows{-} %never draw arrows
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfusepath{draw}
+
+    \pgftext[center,x=0.45\pgf at circ@res at left,y=0.45\pgf at circ@res at up]{\textsf{\texti}}
+    \pgftext[center,x=0.45\pgf at circ@res at right,y=0.45\pgf at circ@res at down]{\textsf{\textii}}
+}
+
+%% DAC
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/dac/width}}
+{dac}
+{\ctikzvalof{bipoles/dac/width}}
+{\ctikzvalof{bipoles/dac/width}}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/dac/width}\pgf at circ@scaled at Rlen
+    \divide \pgf at circ@res at step by 2
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgf at circ@res at other = \pgf at circ@res at left
+    \advance\pgf at circ@res at other by \pgf at circ@res at step
+
+    \ifpgf at circuit@dashed
+        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+    \fi
+
+    % draw outer box
+    \pgf at circ@twoportbox
+
+    \ifpgf at circuit@inputarrow
+        {
+            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
+        }
+    \fi
+
+    % rotate inner symbol
+    \def\texti{D}
+    \def\textii{A}
+    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
+    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+        \def\texti{A}
+        \def\textii{D}
+        \pgftransformrotate{270}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225  % 134 degree, because >= 135 is not possible
+        \def\texti{A}
+        \def\textii{D}
+        \pgftransformrotate{180}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+        \pgftransformrotate{90}
+        \def\texti{D}
+        \def\textii{A}
+    \fi\fi
+
+    % draw inner symbol
+    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+    \pgfsetarrows{-} %never draw arrows
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfusepath{draw}
+
+    \pgftext[center,x=0.45\pgf at circ@res at left,y=0.45\pgf at circ@res at up]{\textsf{\texti}}
+    \pgftext[center,x=0.45\pgf at circ@res at right,y=0.45\pgf at circ@res at down]{\textsf{\textii}}
+}
+
+%% DSP
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/dsp/width}}
+{dsp}
+{\ctikzvalof{bipoles/dsp/width}}
+{\ctikzvalof{bipoles/dsp/width}}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/dsp/width}\pgf at circ@scaled at Rlen
+    \divide \pgf at circ@res at step by 2
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgf at circ@res at other = \pgf at circ@res at left
+    \advance\pgf at circ@res at other by \pgf at circ@res at step
+
+    \ifpgf at circuit@dashed
+        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+    \fi
+
+    % draw outer box
+    \pgf at circ@twoportbox
+
+    \ifpgf at circuit@inputarrow
+        {
+            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
+        }
+    \fi
+
+    % rotate inner symbol
+    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
+    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+        \pgftransformrotate{270}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+        \pgftransformrotate{180}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+        \pgftransformrotate{90}
+    \fi\fi
+
+    % draw inner symbol
+    \pgftext[center,x=0,y=0]{\textsf{DSP}}
+}
+
+%% FFT
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/fft/width}}
+{fft}
+{\ctikzvalof{bipoles/fft/width}}
+{\ctikzvalof{bipoles/fft/width}}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/fft/width}\pgf at circ@scaled at Rlen
+    \divide \pgf at circ@res at step by 2
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgf at circ@res at other = \pgf at circ@res at left
+    \advance\pgf at circ@res at other by \pgf at circ@res at step
+
+    \ifpgf at circuit@dashed
+        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+    \fi
+
+    % draw outer box
+    \pgf at circ@twoportbox
+
+    \ifpgf at circuit@inputarrow
+        {
+            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
+        }
+    \fi
+
+    % rotate inner symbol
+    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
+    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+        \pgftransformrotate{270}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+        \pgftransformrotate{180}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+        \pgftransformrotate{90}
+    \fi\fi
+
+    % draw inner symbol
+    \pgftext[center,x=0,y=0]{\textsf{FFT}}
+}
+
+%% Amplifier
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{
+    \ifpgf at circuit@boxed
+        \ctikzvalof{bipoles/twoport/width}
+    \else
+        \ctikzvalof{bipoles/amp/width}
+    \fi
+}
+{amp}
+{
+    \ifpgf at circuit@boxed
+        \ctikzvalof{bipoles/twoport/width}
+    \else
+        \ctikzvalof{bipoles/amp/width}
+    \fi
+}
+{
+    \ifpgf at circuit@boxed
+        \ctikzvalof{bipoles/twoport/width}
+    \else
+        \ctikzvalof{bipoles/amp/width}
+    \fi
+}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/amp/width}\pgf at circ@scaled at Rlen
+
+    \ifpgf at circuit@dashed
+        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+    \fi
+
+    % draw outer box
+    \ifpgf at circuit@boxed
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgfnode{blockbox}{center}{}{pgf at box}{\pgfusepath{draw}}
+        \pgf at circ@draworfill
+    \fi
+
+    % draw input arrow
+    \ifpgf at circuit@inputarrow
+        {
+            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
+        }
+    \fi
+
+    \ifpgf at circuit@boxed
+        \pgfsetlinewidth{\pgfstartlinewidth}
+        \pgfsetdash{}{0pt}	% draw solid line for inner symbol if no box is drawn
+        \pgf at circ@res at step=.7\pgf at circ@res at step % scale amp symbol when inside a box
+    \else
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \fi
+
+    \pgfsetarrows{-} %never draw arrows
+
+    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{0.55\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{0.5\pgf at circ@res at step}{0}}
+    \pgfpathlineto{\pgfpoint{-0.5\pgf at circ@res at step}{-0.55\pgf at circ@res at step}}
+
+    \pgfpathclose
+    \pgf at circ@draworfill
+
+    % draw inner text
+    \pgftext[center,x=-0.12\pgf at circ@res at step,y=0]{\ctikzvalof{bipoles/twoport/text}}
+}
+
+
+%% variable amplifier
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{
+    \ifpgf at circuit@boxed
+        \ctikzvalof{bipoles/twoport/width}
+    \else
+        \ctikzvalof{bipoles/amp/width}
+    \fi
+}
+{vamp}
+{
+    \ifpgf at circuit@boxed
+        \ctikzvalof{bipoles/twoport/width}
+    \else
+        \ctikzvalof{bipoles/amp/width}
+    \fi
+}
+{
+    \ifpgf at circuit@boxed
+        \ctikzvalof{bipoles/twoport/width}
+    \else
+        \ctikzvalof{bipoles/amp/width}
+    \fi
+}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/amp/width}\pgf at circ@scaled at Rlen
+
+    \ifpgf at circuit@dashed
+        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+    \fi
+
+    % draw outer box
+    \ifpgf at circuit@boxed
+        \pgfnode{blockbox}{center}{}{pgf at box}{\pgfusepath{draw}}
+    \fi
+
+    % draw input arrow
+    \ifpgf at circuit@inputarrow
+        {
+            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
+        }
+    \fi
+
+    \ifpgf at circuit@boxed
+        \pgfsetlinewidth{\pgfstartlinewidth}
+        \pgfsetdash{}{0pt}	% draw solid line for inner symbol if no box is drawn
+        \pgf at circ@res at step=.7\pgf at circ@res at step % scale amp symbol when inside a box
+    \else
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \fi
+
+
+    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+    \pgfsetarrows{-} %never draw arrows
+
+    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{0.55\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{0.5\pgf at circ@res at step}{0}}
+    \pgfpathlineto{\pgfpoint{-0.5\pgf at circ@res at step}{-0.55\pgf at circ@res at step}}
+
+    \pgfpathclose
+    \pgf at circ@draworfill
+
+    % draw inner text
+    \pgftext[center,x=-0.12\pgf at circ@res at step,y=0]{\ctikzvalof{bipoles/twoport/text}}
+
+    % draw arrow
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfsetarrowsend{latex}
+    \pgfpathmoveto{\pgfpoint{-0.8\pgf at circ@res at step}{-0.5\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{0.6\pgf at circ@res at step}{0.6\pgf at circ@res at step}}
+    \pgfusepath{draw}
+}
+
+%% pi attenuator
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/piattenuator/width}}
+{piattenuator}
+{\ctikzvalof{bipoles/piattenuator/width}}
+{\ctikzvalof{bipoles/piattenuator/width}}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/piattenuator/width}\pgf at circ@scaled at Rlen
+    \divide \pgf at circ@res at step by 2
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgf at circ@res at other = \pgf at circ@res at left
+    \advance\pgf at circ@res at other by \pgf at circ@res at step
+
+    \ifpgf at circuit@dashed
+        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+    \fi
+
+    % draw outer box
+    \pgf at circ@twoportbox
+
+    \ifpgf at circuit@inputarrow
+        {
+            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
+        }
+    \fi
+
+    % rotate inner symbol
+    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
+    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+        \pgftransformrotate{270}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+        \pgftransformrotate{90}
+    \fi\fi
+
+    % draw inner symbol
+    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+    \pgfsetarrows{-} %never draw arrows
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{0.4\pgf at circ@res at left}{0.4\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{0.4\pgf at circ@res at left}{0.4\pgf at circ@res at up}}
+    \pgfusepath{draw}
+    \pgfpathmoveto{\pgfpoint{0.4\pgf at circ@res at right}{0.4\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{0.4\pgf at circ@res at right}{0.4\pgf at circ@res at up}}
+    \pgfusepath{draw}
+    \pgfpathmoveto{\pgfpoint{0.6\pgf at circ@res at left}{0.4\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{0.6\pgf at circ@res at right}{0.4\pgf at circ@res at up}}
+    \pgfusepath{draw}
+}
+
+%% variable pi attenuator
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/vpiattenuator/width}}
+{vpiattenuator}
+{\ctikzvalof{bipoles/vpiattenuator/width}}
+{\ctikzvalof{bipoles/vpiattenuator/width}}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/vpiattenuator/width}\pgf at circ@scaled at Rlen
+    \divide \pgf at circ@res at step by 2
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgf at circ@res at other = \pgf at circ@res at left
+    \advance\pgf at circ@res at other by \pgf at circ@res at step
+
+    \ifpgf at circuit@dashed
+        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+    \fi
+
+    % draw outer box
+    \pgf at circ@twoportbox
+
+    \ifpgf at circuit@inputarrow
+        {
+            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
+        }
+    \fi
+
+    % rotate inner symbol
+    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
+    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+        \pgftransformrotate{270}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+        \pgftransformrotate{90}
+    \fi\fi
+
+    % draw inner symbol
+    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+    \pgfsetarrows{-} %never draw arrows
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{0.4\pgf at circ@res at left}{0.4\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{0.4\pgf at circ@res at left}{0.4\pgf at circ@res at up}}
+    \pgfusepath{draw}
+    \pgfpathmoveto{\pgfpoint{0.4\pgf at circ@res at right}{0.4\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{0.4\pgf at circ@res at right}{0.4\pgf at circ@res at up}}
+    \pgfusepath{draw}
+    \pgfpathmoveto{\pgfpoint{0.6\pgf at circ@res at left}{0.4\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{0.6\pgf at circ@res at right}{0.4\pgf at circ@res at up}}
+    \pgfusepath{draw}
+
+    \pgfsetarrowsend{latex}
+    \pgfpathmoveto{\pgfpoint{0.7\pgf at circ@res at left}{0.5\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{0.7\pgf at circ@res at right}{0.8\pgf at circ@res at up}}
+    \pgfusepath{draw}
+}
+
+%% T attenuator
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/tattenuator/width}}
+{tattenuator}
+{\ctikzvalof{bipoles/tattenuator/width}}
+{\ctikzvalof{bipoles/tattenuator/width}}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/tattenuator/width}\pgf at circ@scaled at Rlen
+    \divide \pgf at circ@res at step by 2
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgf at circ@res at other = \pgf at circ@res at left
+    \advance\pgf at circ@res at other by \pgf at circ@res at step
+
+    \ifpgf at circuit@dashed
+        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+    \fi
+
+    % draw outer box
+    \pgf at circ@twoportbox
+
+    \ifpgf at circuit@inputarrow
+        {
+            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
+        }
+    \fi
+
+    % rotate inner symbol
+    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
+    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+        \pgftransformrotate{270}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+        \pgftransformrotate{90}
+    \fi\fi
+
+    % draw inner symbol
+    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+    \pgfsetarrows{-} %never draw arrows
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{0pt}{0.4\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{0pt}{0.4\pgf at circ@res at up}}
+    \pgfusepath{draw}
+    \pgfpathmoveto{\pgfpoint{0.6\pgf at circ@res at left}{0.4\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{0.6\pgf at circ@res at right}{0.4\pgf at circ@res at up}}
+    \pgfusepath{draw}
+}
+
+%% variable T attenuator
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/vtattenuator/width}}
+{vtattenuator}
+{\ctikzvalof{bipoles/vtattenuator/width}}
+{\ctikzvalof{bipoles/vtattenuator/width}}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/vtattenuator/width}\pgf at circ@scaled at Rlen
+    \divide \pgf at circ@res at step by 2
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgf at circ@res at other = \pgf at circ@res at left
+    \advance\pgf at circ@res at other by \pgf at circ@res at step
+
+    \ifpgf at circuit@dashed
+        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+    \fi
+
+    % draw outer box
+    \pgf at circ@twoportbox
+
+    \ifpgf at circuit@inputarrow
+        {
+            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
+        }
+    \fi
+
+    % rotate inner symbol
+    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
+    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+        \pgftransformrotate{270}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+        \pgftransformrotate{90}
+    \fi\fi
+
+    % draw inner symbol
+    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+    \pgfsetarrows{-} %never draw arrows
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{0pt}{0.4\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{0pt}{0.4\pgf at circ@res at up}}
+    \pgfusepath{draw}
+    \pgfpathmoveto{\pgfpoint{0.6\pgf at circ@res at left}{0.4\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{0.6\pgf at circ@res at right}{0.4\pgf at circ@res at up}}
+    \pgfusepath{draw}
+
+    \pgfsetarrowsend{latex}
+    \pgfpathmoveto{\pgfpoint{0.7\pgf at circ@res at left}{0.5\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{0.7\pgf at circ@res at right}{0.8\pgf at circ@res at up}}
+    \pgfusepath{draw}
+}
+
+%% phase shifter
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/phaseshifter/width}}
+{phaseshifter}
+{\ctikzvalof{bipoles/phaseshifter/width}}
+{\ctikzvalof{bipoles/phaseshifter/width}}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/phaseshifter/width}\pgf at circ@scaled at Rlen
+    \divide \pgf at circ@res at step by 2
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgf at circ@res at other = \pgf at circ@res at left
+    \advance\pgf at circ@res at other by \pgf at circ@res at step
+
+    \ifpgf at circuit@dashed
+        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+    \fi
+
+    % draw outer box
+    \pgf at circ@twoportbox
+
+    \ifpgf at circuit@inputarrow
+        {
+            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
+        }
+    \fi
+
+    % rotate inner symbol
+    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
+    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+        \pgftransformrotate{270}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+        \pgftransformrotate{180}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+        \pgftransformrotate{90}
+    \fi\fi
+
+    % inner symbol
+    \pgftext[center,x=0,y=0]{\Large$\varphi$}
+}
+
+%% variable phase shifter
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/phaseshifter/width}}
+{vphaseshifter}
+{\ctikzvalof{bipoles/vphaseshifter/width}}
+{\ctikzvalof{bipoles/vphaseshifter/width}}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/vphaseshifter/width}\pgf at circ@scaled at Rlen
+    \divide \pgf at circ@res at step by 2
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgf at circ@res at other = \pgf at circ@res at left
+    \advance\pgf at circ@res at other by \pgf at circ@res at step
+
+    \ifpgf at circuit@dashed
+        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+    \fi
+
+    % draw outer box
+    \pgf at circ@twoportbox
+
+    \ifpgf at circuit@inputarrow
+        {
+            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
+        }
+    \fi
+
+    % rotate inner symbol
+    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
+    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+        \pgftransformrotate{270}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+        \pgftransformrotate{180}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+        \pgftransformrotate{90}
+    \fi\fi
+
+    % inner symbol
+    \pgftext[center,x=0,y=0]{\Large$\varphi$}
+
+    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfsetarrowsend{latex}
+    \pgfpathmoveto{\pgfpoint{0.75\pgf at circ@res at left}{0.65\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{0.7\pgf at circ@res at right}{0.65\pgf at circ@res at up}}
+    \pgfusepath{draw}
+}
+
+%% detector
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/detector/width}}
+{detector}
+{\ctikzvalof{bipoles/detector/width}}
+{\ctikzvalof{bipoles/detector/width}}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/detector/width}\pgf at circ@scaled at Rlen
+    \divide \pgf at circ@res at step by 2
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgf at circ@res at other = \pgf at circ@res at left
+    \advance\pgf at circ@res at other by \pgf at circ@res at step
+
+    \ifpgf at circuit@dashed
+        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+    \fi
+
+    % draw outer box
+    \pgf at circ@twoportbox
+
+    \ifpgf at circuit@inputarrow
+        {
+            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
+        }
+    \fi
+
+    % draw inner stuff
+    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+    \pgfsetarrows{-} %never draw arrows
+    \pgfsetlinewidth{0.8\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{0.75\pgf at circ@res at left}{0}}
+    \pgfpathlineto{\pgfpoint{0.75\pgf at circ@res at right}{0}}
+    \pgfusepath{draw}
+
+    \ifpgf at circuit@fulldiode
+        \pgfmathparse{2\pgf at circ@res at up / \pgf at circ@scaled at Rlen / \ctikzvalof{bipoles/generic/width}}
+        \pgftransformscale{\pgfmathresult}
+        \pgfnode{fulldiodeshape}{center}{}{pgf at fulldiode}{\pgfusepath{fill}}
+    \else
+        \pgfmathparse{2\pgf at circ@res at up / \pgf at circ@scaled at Rlen / \ctikzvalof{bipoles/resistor/width}}
+        \pgftransformscale{\pgfmathresult}
+        \pgfnode{emptydiodeshape}{center}{}{pgf at emptydiode}{\pgfusepath{fill}}
+    \fi
+
+}
+
+%% single phase ac/dc converter
+\pgfcircdeclarebipolescaled{blocks}
+{
+    \anchor{dc1}{
+        \northeast
+        \pgf at y=.4\pgf at y
+    }
+    \anchor{dc2}{
+        \northeast
+        \pgf at y=-.4\pgf at y
+    }
+}
+{\ctikzvalof{bipoles/sacdc/width}}
+{sacdc}
+{\ctikzvalof{bipoles/sacdc/width}}
+{\ctikzvalof{bipoles/sacdc/width}}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/sacdc/width}\pgf at circ@scaled at Rlen
+    \divide \pgf at circ@res at step by 2
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgf at circ@res at other = \pgf at circ@res at left
+    \advance\pgf at circ@res at other by \pgf at circ@res at step
+
+    \ifpgf at circuit@dashed
+        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+    \fi
+
+    % draw outer box
+    \pgf at circ@twoportbox
+
+    \ifpgf at circuit@inputarrow
+        {
+            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
+        }
+    \fi
+
+    % rotate inner symbol
+    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
+    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+        \pgftransformrotate{270}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225  % 134 degree, because >= 135 is not possible
+        \pgftransformrotate{180}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+        \pgftransformrotate{90}
+    \fi\fi
+
+    % draw inner symbol
+    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+    \pgfsetarrows{-} %never draw arrows
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfusepath{draw}
+
+    % draw sin wave
+    \pgfpathmoveto{\pgfpoint{-.76\pgf at circ@res at step}{.5\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.17\pgf at circ@res at step}{.17\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.17\pgf at circ@res at step}{-.17\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.17\pgf at circ@res at step}{-.17\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.17\pgf at circ@res at step}{.17\pgf at circ@res at step}}
+    \pgfusepath{draw}
+
+    % draw equal sign
+    \pgfpathmoveto{\pgfpoint{.2\pgf at circ@res at step}{-.375\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{0.7\pgf at circ@res at step}{-0.375\pgf at circ@res at step}}
+    \pgfusepath{draw}
+    \pgfpathmoveto{\pgfpoint{.2\pgf at circ@res at step}{-.625\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{0.7\pgf at circ@res at step}{-0.625\pgf at circ@res at step}}
+    \pgfusepath{draw}
+}
+
+
+
+%% single phase dc/ac converter
+\pgfcircdeclarebipolescaled{blocks}
+{
+    \anchor{dc1}{
+        \northeast
+        \pgf at y=.4\pgf at y
+        \pgf at x=-\pgf at x
+    }
+    \anchor{dc2}{
+        \northeast
+        \pgf at y=-.4\pgf at y
+        \pgf at x=-\pgf at x
+    }
+}
+{\ctikzvalof{bipoles/sdcac/width}}
+{sdcac}
+{\ctikzvalof{bipoles/sdcac/width}}
+{\ctikzvalof{bipoles/sdcac/width}}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/sdcac/width}\pgf at circ@scaled at Rlen
+    \divide \pgf at circ@res at step by 2
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgf at circ@res at other = \pgf at circ@res at left
+    \advance\pgf at circ@res at other by \pgf at circ@res at step
+
+    \ifpgf at circuit@dashed
+        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+    \fi
+
+    % draw outer box
+    \pgf at circ@twoportbox
+
+    \ifpgf at circuit@inputarrow
+        {
+            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
+        }
+    \fi
+
+    % rotate inner symbol
+    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
+    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+        \pgftransformrotate{270}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225  % 134 degree, because >= 135 is not possible
+        \pgftransformrotate{180}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+        \pgftransformrotate{90}
+    \fi\fi
+
+    % draw inner symbol
+    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+    \pgfsetarrows{-} %never draw arrows
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfusepath{draw}
+
+    % draw sin wave
+    \pgfpathmoveto{\pgfpoint{.14\pgf at circ@res at step}{-.5\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.17\pgf at circ@res at step}{.17\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.17\pgf at circ@res at step}{-.17\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.17\pgf at circ@res at step}{-.17\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.17\pgf at circ@res at step}{.17\pgf at circ@res at step}}
+    \pgfusepath{draw}
+
+    % draw equal sign
+    \pgfpathmoveto{\pgfpoint{-.2\pgf at circ@res at step}{.375\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{-0.7\pgf at circ@res at step}{0.375\pgf at circ@res at step}}
+    \pgfusepath{draw}
+    \pgfpathmoveto{\pgfpoint{-.2\pgf at circ@res at step}{.625\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{-0.7\pgf at circ@res at step}{0.625\pgf at circ@res at step}}
+    \pgfusepath{draw}
+}
+
+
+%% threephase ac/dc converter
+\pgfcircdeclarebipolescaled{blocks}
+{
+    \anchor{dc1}{
+        \northeast
+        \pgf at y=.4\pgf at y
+    }
+    \anchor{dc2}{
+        \northeast
+        \pgf at y=-.4\pgf at y
+    }
+    \anchor{ac1}{
+        \northeast
+        \pgf at y=.6\pgf at y
+        \pgf at x=-\pgf at x
+    }
+    \anchor{ac2}{
+        \northeast
+        \pgf at y=0\pgf at y
+        \pgf at x=-\pgf at x
+    }
+    \anchor{ac3}{
+        \northeast
+        \pgf at y=-.6\pgf at y
+        \pgf at x=-\pgf at x
+    }
+}
+{\ctikzvalof{bipoles/tacdc/width}}
+{tacdc}
+{\ctikzvalof{bipoles/tacdc/width}}
+{\ctikzvalof{bipoles/tacdc/width}}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/tacdc/width}\pgf at circ@scaled at Rlen
+    \divide \pgf at circ@res at step by 2
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgf at circ@res at other = \pgf at circ@res at left
+    \advance\pgf at circ@res at other by \pgf at circ@res at step
+
+    \ifpgf at circuit@dashed
+        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+    \fi
+
+    % draw outer box
+    \pgf at circ@twoportbox
+
+    \ifpgf at circuit@inputarrow
+        {
+            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
+        }
+    \fi
+
+    % rotate inner symbol
+    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
+    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+        \pgftransformrotate{270}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225  % 134 degree, because >= 135 is not possible
+        \pgftransformrotate{180}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+        \pgftransformrotate{90}
+    \fi\fi
+
+    % draw inner symbol
+    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+    \pgfsetarrows{-} %never draw arrows
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfusepath{draw}
+
+    % draw sin waves
+    \pgfpathmoveto{\pgfpoint{-.76\pgf at circ@res at step}{.65\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.17\pgf at circ@res at step}{.17\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.17\pgf at circ@res at step}{-.17\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.17\pgf at circ@res at step}{-.17\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.17\pgf at circ@res at step}{.17\pgf at circ@res at step}}
+    \pgfusepath{draw}
+    \pgfpathmoveto{\pgfpoint{-.76\pgf at circ@res at step}{.5\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.17\pgf at circ@res at step}{.17\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.17\pgf at circ@res at step}{-.17\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.17\pgf at circ@res at step}{-.17\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.17\pgf at circ@res at step}{.17\pgf at circ@res at step}}
+    \pgfusepath{draw}
+    \pgfpathmoveto{\pgfpoint{-.76\pgf at circ@res at step}{.35\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.17\pgf at circ@res at step}{.17\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.17\pgf at circ@res at step}{-.17\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.17\pgf at circ@res at step}{-.17\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.17\pgf at circ@res at step}{.17\pgf at circ@res at step}}
+    \pgfusepath{draw}
+
+
+
+
+    % draw equal sign
+    \pgfpathmoveto{\pgfpoint{.2\pgf at circ@res at step}{-.375\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{0.7\pgf at circ@res at step}{-0.375\pgf at circ@res at step}}
+    \pgfusepath{draw}
+    \pgfpathmoveto{\pgfpoint{.2\pgf at circ@res at step}{-.625\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{0.7\pgf at circ@res at step}{-0.625\pgf at circ@res at step}}
+    \pgfusepath{draw}
+}
+
+
+%% threephase dc/ac converter
+\pgfcircdeclarebipolescaled{blocks}
+{
+    \anchor{dc1}{
+        \northeast
+        \pgf at y=.4\pgf at y
+        \pgf at x=-\pgf at x
+    }
+    \anchor{dc2}{
+        \northeast
+        \pgf at y=-.4\pgf at y
+        \pgf at x=-\pgf at x
+    }
+    \anchor{ac1}{
+        \northeast
+        \pgf at y=.6\pgf at y
+    }
+    \anchor{ac2}{
+        \northeast
+        \pgf at y=0\pgf at y
+    }
+    \anchor{ac3}{
+        \northeast
+        \pgf at y=-.6\pgf at y
+    }
+}
+{\ctikzvalof{bipoles/tdcac/width}}
+{tdcac}
+{\ctikzvalof{bipoles/tdcac/width}}
+{\ctikzvalof{bipoles/tdcac/width}}
+{
+    \pgf at circ@res at step = \ctikzvalof{bipoles/tdcac/width}\pgf at circ@scaled at Rlen
+    \divide \pgf at circ@res at step by 2
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgf at circ@res at other = \pgf at circ@res at left
+    \advance\pgf at circ@res at other by \pgf at circ@res at step
+
+    \ifpgf at circuit@dashed
+        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+    \fi
+
+    % draw outer box
+    \pgf at circ@twoportbox
+
+    \ifpgf at circuit@inputarrow
+        {
+            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
+        }
+    \fi
+
+    % rotate inner symbol
+    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
+    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+        \pgftransformrotate{270}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225  % 134 degree, because >= 135 is not possible
+        \pgftransformrotate{180}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+        \pgftransformrotate{90}
+    \fi\fi
+
+    % draw inner symbol
+    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+    \pgfsetarrows{-} %never draw arrows
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfusepath{draw}
+
+    % draw sin waves
+    \pgfpathmoveto{\pgfpoint{.14\pgf at circ@res at step}{-.65\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.17\pgf at circ@res at step}{.17\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.17\pgf at circ@res at step}{-.17\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.17\pgf at circ@res at step}{-.17\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.17\pgf at circ@res at step}{.17\pgf at circ@res at step}}
+    \pgfusepath{draw}
+    \pgfpathmoveto{\pgfpoint{.14\pgf at circ@res at step}{-.5\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.17\pgf at circ@res at step}{.17\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.17\pgf at circ@res at step}{-.17\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.17\pgf at circ@res at step}{-.17\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.17\pgf at circ@res at step}{.17\pgf at circ@res at step}}
+    \pgfusepath{draw}
+    \pgfpathmoveto{\pgfpoint{.14\pgf at circ@res at step}{-.35\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.17\pgf at circ@res at step}{.17\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.17\pgf at circ@res at step}{-.17\pgf at circ@res at step}}
+    \pgfpathsine{\pgfpoint{.17\pgf at circ@res at step}{-.17\pgf at circ@res at step}}
+    \pgfpathcosine{\pgfpoint{.17\pgf at circ@res at step}{.17\pgf at circ@res at step}}
+    \pgfusepath{draw}
+
+
+
+
+    % draw equal sign
+    \pgfpathmoveto{\pgfpoint{-.2\pgf at circ@res at step}{.375\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{-0.7\pgf at circ@res at step}{0.375\pgf at circ@res at step}}
+    \pgfusepath{draw}
+    \pgfpathmoveto{\pgfpoint{-.2\pgf at circ@res at step}{.625\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{-0.7\pgf at circ@res at step}{0.625\pgf at circ@res at step}}
+    \pgfusepath{draw}
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%
+%% MECHANICAL SYMBOLS
+%%%%%%%%%%%%%%%%%%%%%%%
+
+%% mechanical capacitance - stiffness/spring
+
+\pgfcircdeclarebipolescaled{mechanicals}
+{}
+{\ctikzvalof{bipoles/spring/height}}
+{spring}
+{\ctikzvalof{bipoles/spring/height}}
+{\ctikzvalof{bipoles/spring/width}}{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgftransformationadjustments
+
+    \pgfmathsetlength{\pgf at circ@res at step}
+    {(\ctikzvalof{bipoles/spring/width}*\pgf at circ@scaled at Rlen+\pgfhorizontaltransformationadjustment*.5*\pgflinewidth)/16}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf at circ@res at zero}}
+    \pgfsetcornersarced{\pgfpoint{.5\pgf at circ@res at up}{.5\pgf at circ@res at up}}
+    \pgf at circ@res at other = \pgf at circ@res at left
+    \advance\pgf at circ@res at other by \pgf at circ@res at step
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{\pgf at circ@res at up}}
+    \advance\pgf at circ@res at other by 2\pgf at circ@res at step
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{\pgf at circ@res at down}}
+    \advance\pgf at circ@res at other by 2\pgf at circ@res at step
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{\pgf at circ@res at up}}
+    \advance\pgf at circ@res at other by 2\pgf at circ@res at step
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{\pgf at circ@res at down}}
+    \advance\pgf at circ@res at other by 2\pgf at circ@res at step
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{\pgf at circ@res at up}}
+    \advance\pgf at circ@res at other by 2\pgf at circ@res at step
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{\pgf at circ@res at down}}
+    \advance\pgf at circ@res at other by 2\pgf at circ@res at step
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{\pgf at circ@res at up}}
+    \advance\pgf at circ@res at other by 2\pgf at circ@res at step
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{\pgf at circ@res at down}}
+    \advance\pgf at circ@res at other by \pgf at circ@res at step
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{\pgf at circ@res at zero}}
+    \pgfsetbuttcap
+    \pgfsetbeveljoin
+    \pgfusepath{stroke}
+}
+
+%% mechanical capacitance - inerter
+\pgfcircdeclarebipolescaled{mechanicals}
+{}
+{\ctikzvalof{bipoles/inerter/height}}
+{inerter}
+{\ctikzvalof{bipoles/inerter/height}}
+{\ctikzvalof{bipoles/inerter/width}}
+{
+    \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgf at circ@draworfill
+}
+
+
+%% mechanical inductance - mass
+\pgfcircdeclarebipolescaled{mechanicals}
+{}
+{\ctikzvalof{bipoles/mass/box height}}
+{mass}
+{\ctikzvalof{bipoles/mass/height}}
+{\ctikzvalof{bipoles/mass/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgftransformationadjustments
+    \pgfpathrectangle{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+        {\pgfpoint{-2\pgf at circ@res at down}{-2\pgf at circ@res at down}}
+    \pgf at circ@draworfill
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+    \pgfsetrectcap
+    \pgfsetmiterjoin
+    \pgfusepath{stroke}
+}
+
+%% mechanical resistor - damper
+\pgfcircdeclarebipolescaled{mechanicals}
+{}
+{\ctikzvalof{bipoles/damper/height}}
+{damper}
+{\ctikzvalof{bipoles/damper/height}}
+{\ctikzvalof{bipoles/damper/width}}
+{
+    \pgfpathrectanglecorners{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf at circ@res at right}{\pgf at circ@res at down}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgf at circ@maybefill
+
+    % line into the damper
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf at circ@res at right}
+        {\pgf at circ@res at zero}}
+    \pgfusepath{stroke}
+
+    % damper box
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+
+    \pgfsetrectcap
+    \pgfsetmiterjoin
+    \pgfusepath{stroke}
+
+    % damper vertical element
+    \pgfpathmoveto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf at circ@res at right}
+        {.8\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf at circ@res at right}
+        {.8\pgf at circ@res at up}}
+    \pgfsetbuttcap
+    \pgfusepath{stroke}
+
+}
+%% mechanical viscoelastic element, suggested by @alex
+%% in https://tex.stackexchange.com/questions/484268/combined-spring-damper-in-circuitikz
+\pgfcircdeclarebipolescaled{mechanicals}
+{}                                   % extra anchors
+{\ctikzvalof{bipoles/damper/height}} % depth (under the path line)
+{viscoe}                             % name
+{\ctikzvalof{bipoles/damper/height}} % height (above the path line)
+{\ctikzvalof{bipoles/damper/width}}  % width
+{ % draw the bipole
+    \pgfpathrectanglecorners{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf at circ@res at right}{\pgf at circ@res at down}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgf at circ@maybefill
+
+    % spring into the damper
+    \pgfscope
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgfsetcornersarced{\pgfpoint{.25\pgf at circ@res at up}{.25\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{.75\pgf at circ@res at left}{.75\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{.5\pgf at circ@res at left}{-.75\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{.25\pgf at circ@res at left}{.75\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0pt}{-.75\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf at circ@res at right}{.75\pgf at circ@res at up}}
+        \pgfusepath{stroke}
+    \endpgfscope
+    % damper box
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+
+    \pgfsetrectcap
+    \pgfsetmiterjoin
+    \pgfusepath{stroke}
+
+    % damper vertical element
+    \pgfpathmoveto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf at circ@res at right}
+        {.8\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf at circ@res at right}
+        {.8\pgf at circ@res at up}}
+    \pgfsetbuttcap
+    \pgfusepath{stroke}
+
+}
+
+%%%%%%%%%%%%%%%%
+%% Crossing
+%%%%%%%%%%%%%%%%
+
+%% crossing bipole (but see also nodes)
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/crossing/size}}
+{crossing}
+{\ctikzvalof{bipoles/crossing/size}}
+{\ctikzvalof{bipoles/crossing/size}}{
+    \pgfscope
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+        \pgfpathlineto{\pgfpoint{0.4\pgf at circ@res at left}{\pgf at circ@res at zero}}
+        \pgfpatharc{0}{-180}{0.4*\pgf at circ@res at left}
+        \pgfsetbeveljoin
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at zero}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Miscellaneous bipoles
+%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% loudspeaker and microphone
+
+\pgfcircdeclarebipolescaled{misc}
+{}
+{\ctikzvalof{bipoles/loudspeaker/depth}}
+{loudspeaker}
+{\ctikzvalof{bipoles/loudspeaker/height}}
+{\ctikzvalof{bipoles/loudspeaker/width}}{
+
+    \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{.4\pgf at circ@res at up}}
+    {\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfpathmoveto{\pgfpoint{0.5\pgf at circ@res at left}{.4\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{0.8\pgf at circ@res at left}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{0.8\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{0.5\pgf at circ@res at right}{.4\pgf at circ@res at up}}
+    \pgfpathclose
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgf at circ@draworfill
+}
+
+\pgfcircdeclarebipolescaled{misc}
+{}
+{\ctikzvalof{bipoles/mic/depth}}
+{mic}
+{\ctikzvalof{bipoles/mic/height}}
+{\ctikzvalof{bipoles/mic/width}}{
+
+    \pgfscope
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathcircle{\pgfpoint{0pt}{.6\pgf at circ@res at up}}{.4\pgf at circ@res at up}
+    \pgf at circ@draworfill
+    \pgfpathmoveto{\pgfpoint{.6\pgf at circ@res at left}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{.6\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfusepath{draw}
+    \endpgfscope
+    \pgfscope
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+    \pgfpathlineto{\pgfpoint{-.2\pgf at circ@res at up}{0pt}}
+    % 0.25358 is 0.6-0.4*cos(30)
+    \pgfpathlineto{\pgfpoint{-.2\pgf at circ@res at up}{.25358\pgf at circ@res at up}}
+    \pgfpathmoveto{\pgfpoint{.2\pgf at circ@res at up}{.25358\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{.2\pgf at circ@res at up}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+    \pgfusepath{draw}
+
+    \pgfusepath{draw}
+    \endpgfscope
+}
+
+%% european gas filled surge arrester
+\pgfcircdeclarebipolescaled{misc}
+{}
+{\ctikzvalof{bipoles/european gas filled surge arrester/height}}
+{european gas filled surge arrester}
+{\ctikzvalof{bipoles/european gas filled surge arrester/height}}
+{\ctikzvalof{bipoles/european gas filled surge arrester/width}}
+{
+
+    \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgf at circ@draworfill
+
+    \pgfscope
+        \pgfsetarrowsend{latexslim}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+        \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/european gas filled surge arrester/inside}\pgf at circ@res at left}{0pt}}
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgfusepath{draw}
+
+    \endpgfscope
+}
+
+%% american gas filled surge arrester
+\pgfcircdeclarebipolescaled{misc}
+{}
+{\ctikzvalof{bipoles/american gas filled surge arrester/height}}
+{american gas filled surge arrester}
+{\ctikzvalof{bipoles/american gas filled surge arrester/height}}
+{\ctikzvalof{bipoles/american gas filled surge arrester/width}}{
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgfpointorigin	\pgf at circ@res at other =  \pgf at x  \advance \pgf at circ@res at other by -\pgf at circ@res at up
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{\pgf at circ@res at zero}}
+    \pgfusepath{draw}
+
+    \pgfscope
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgfpathcircle{\pgfpointorigin}{.9\pgf at circ@res at up}
+        \pgf at circ@draworfill
+    \endpgfscope
+
+    \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at other}{\pgf at circ@res at zero}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at zero}}
+    \pgfusepath{draw}
+
+    \pgfscope
+        \pgfsetarrowsend{latex}
+
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at zero}}
+        \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/american gas filled surge arrester/inside}\pgf at circ@res at right}{\pgf at circ@res at zero}}
+        \pgfusepath{draw}
+
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+        \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/american gas filled surge arrester/inside}\pgf at circ@res at left}{\pgf at circ@res at zero}}
+        \pgfusepath{draw}
+    \endpgfscope{}
+
+    \pgfcircle{\pgfpoint{\ctikzvalof{bipoles/american gas filled surge arrester/dot x}\pgf at circ@res at left}{\ctikzvalof{bipoles/american gas filled surge arrester/dot y}\pgf at circ@res at down}}{\ctikzvalof{bipoles/american gas filled surge arrester/size}\pgf at circ@res at down}
+    \pgfusepath{fill}
+}
+
+%% thermocouple
+\pgfcircdeclarebipolescaled{misc}
+{}
+{\ctikzvalof{bipoles/thermocouple/height 2}}
+{thermocouple}
+{\ctikzvalof{bipoles/thermocouple/height}}
+{\ctikzvalof{bipoles/thermocouple/width}}
+{
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{.5\pgf at circ@res at down}}
+    \pgfusepath{draw}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{.5\pgf at circ@res at down}}
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathlineto{\pgfpoint{0}{\pgf at circ@res at down}}
+    \pgfusepath{draw}
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{0}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{.5\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0}}
+    \pgfusepath{draw}
+}
+
+%% fuse
+\pgfcircdeclarebipolescaled{misc}
+{}
+{\ctikzvalof{bipoles/fuse/height}}
+{fuse}
+{\ctikzvalof{bipoles/fuse/height}}
+{\ctikzvalof{bipoles/fuse/width}}
+{
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0}}
+    \pgfusepath{draw}
+
+    \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgf at circ@draworfill
+}
+
+%% asymmetric fuse
+\pgfcircdeclarebipolescaled{misc}
+{}
+{\ctikzvalof{bipoles/afuse/height}}
+{afuse}
+{\ctikzvalof{bipoles/afuse/height}}
+{\ctikzvalof{bipoles/afuse/width}}
+{
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0}}
+    \pgfusepath{draw}
+
+    \pgfscope
+        \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgf at circ@draworfill
+    \endpgfscope
+
+    \pgfpathrectanglecorners{\pgfpoint{.7\pgf at circ@res at right}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfusepath{stroke,fill}
+}
+
+%% SQUID added by Cor Molenaar 5 March 2010
+\pgfcircdeclarebipolescaled{misc}
+{}
+{\ctikzvalof{bipoles/squid/height}}
+{squid}
+{\ctikzvalof{bipoles/squid/height}}
+{\ctikzvalof{bipoles/squid/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
+    \pgfpathmoveto{\pgfpoint{0.35*\pgf at circ@res at left}{1.35*\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{0.35*\pgf at circ@res at right}{0.65*\pgf at circ@res at up}}
+    \pgfpathmoveto{\pgfpoint{0.35*\pgf at circ@res at left}{0.65*\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{0.35*\pgf at circ@res at right}{1.35*\pgf at circ@res at up}}
+    \pgfpathmoveto{\pgfpoint{0.35*\pgf at circ@res at left}{1.35*\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{0.35*\pgf at circ@res at right}{0.65*\pgf at circ@res at down}}
+    \pgfpathmoveto{\pgfpoint{0.35*\pgf at circ@res at left}{0.65*\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{0.35*\pgf at circ@res at right}{1.35*\pgf at circ@res at down}}
+
+    \pgfusepath{draw}
+}
+
+% Generic barrier added by Cor Molenaar 5 March 2010
+\pgfcircdeclarebipolescaled{misc}
+{}
+{\ctikzvalof{bipoles/barrier/height}}
+{barrier}
+{\ctikzvalof{bipoles/barrier/height}}
+{\ctikzvalof{bipoles/barrier/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at step}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at step}}
+    \pgfpathmoveto{\pgfpoint{0.35*\pgf at circ@res at left}{0.35*\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{0.35*\pgf at circ@res at right}{0.35*\pgf at circ@res at down}}
+    \pgfpathmoveto{\pgfpoint{0.35*\pgf at circ@res at left}{0.35*\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{0.35*\pgf at circ@res at right}{0.35*\pgf at circ@res at up}}
+
+    \pgfusepath{draw}
+}
+
+%
+% open version of the barrier symbol
+% suggested by Radványi Patrik Tamás <patrikradvanyi at gmail.com>
+%
+\pgfcircdeclarebipolescaled{misc}
+{}
+{\ctikzvalof{bipoles/barrier/height}}
+{openbarrier}
+{\ctikzvalof{bipoles/barrier/height}}
+{\ctikzvalof{bipoles/barrier/width}}
+{
+    % this is set with normal wire linewidth
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+    \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/openbarrier/gap}*\pgf at circ@res at left}{0pt}}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+    \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/openbarrier/gap}*\pgf at circ@res at right}{0pt}}
+    \pgfusepath{draw}
+
+    % do the cross part
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgfpathmoveto{\pgfpoint{0.35*\pgf at circ@res at left}{0.35*\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{0.35*\pgf at circ@res at right}{0.35*\pgf at circ@res at down}}
+    \pgfpathmoveto{\pgfpoint{0.35*\pgf at circ@res at left}{0.35*\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{0.35*\pgf at circ@res at right}{0.35*\pgf at circ@res at up}}
+
+    \pgfusepath{draw}
+}
+%% Lamp
+\pgfcircdeclarebipolescaled{misc}
+{}
+{\ctikzvalof{bipoles/lamp/height}}
+{lamp}
+{\ctikzvalof{bipoles/lamp/height}}
+{\ctikzvalof{bipoles/lamp/width}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+    \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
+    \pgf at circ@draworfill
+    \pgfpathmoveto{\pgfpoint{.7071*\pgf at circ@res at left}{.7071*\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{.7071*\pgf at circ@res at right}{.7071*\pgf at circ@res at down}}
+    \pgfpathmoveto{\pgfpoint{.7071*\pgf at circ@res at left}{.7071*\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{.7071*\pgf at circ@res at right}{.7071*\pgf at circ@res at up}}
+    \pgfusepath{draw}
+}
+
+%% bulb
+\pgfcircdeclarebipolescaled{misc}
+{}
+{\ctikzvalof{bipoles/bulb/height}}
+{bulb}
+{\ctikzvalof{bipoles/bulb/height}}
+{\ctikzvalof{bipoles/bulb/width}}
+{%
+    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+    \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{0.8\pgf at circ@res at up}}{\pgfpoint{0.8\pgf at circ@res at left}{0}}
+    \pgf at circ@draworfill
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgfpathlineto{\pgfpoint{0.4\pgf at circ@res at left}{\pgf at circ@res at zero}}
+    \pgfpatharc{0}{-180}{0.4*\pgf at circ@res at left}
+    \pgfsetbeveljoin
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at zero}}
+    \pgfusepath{draw}
+}
+
+
+% end of pgfcircbipoles.tex
+%%%---------- close: tex/pgfcircbipoles
+%%%%%%%%%%% Springe nach tex/pgfcirctripoles
+%%%---------- open: tex/pgfcirctripoles.tex
+% Copyright 2018-2020 by Romano Giannetti
+% Copyright 2015-2020 by Stefan Lindner
+% Copyright 2013-2020 by Stefan Erhardt
+% Copyright 2007-2020 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Tripoles
+
+%%%%%%%%%%%%%
+%% switches
+%%%%%%%%%%%%%
+
+% Legacy spdt
+\pgfdeclareshape{spdt}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{switches}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \savedanchor\northwest{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/spdt/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/spdt/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    }
+    \anchor{left}{%
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{in}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{out 1}{
+        \northwest
+        \pgf at x=-\pgf at x
+    }
+    \anchor{out 2}{
+        \northwest
+        \pgf at x=-\pgf at x
+        \pgf at y=-\pgf at y
+    }
+    \anchor{center}{
+        \pgf at y=0pt
+        \pgf at x=0pt
+    }
+    \anchor{east}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{west}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{south}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{north}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{south west}{
+        \northwest
+        \pgf at y=-\pgf at y
+    }
+    \anchor{north east}{
+        \northwest
+        \pgf at x=-\pgf at x
+    }
+    \anchor{north west}{
+        \northwest
+    }
+    \anchor{south east}{
+        \northwest
+        \pgf at x=-\pgf at x
+        \pgf at y=-\pgf at y
+    }
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+
+        \northwest
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        \pgf at circ@res at other = \ctikzvalof{tripoles/spdt/margin}\pgf at circ@res at left
+
+
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{-\pgf at circ@res at other}{\pgf at circ@res at up}}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{-\pgf at circ@res at other}{\pgf at circ@res at down}}
+
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{0pt}}
+
+        \pgfusepath{draw}
+
+        \pgfscope
+            \pgftransformshift{\pgfpoint{-\pgf at circ@res at other}{\pgf at circ@res at up}}
+            \pgfnode{ocirc}{center}{}{spdt1}{\pgfusepath{stroke}}
+        \endpgfscope
+        \pgfscope
+            \pgftransformshift{\pgfpoint{-\pgf at circ@res at other}{\pgf at circ@res at down}}
+            \pgfnode{ocirc}{center}{}{}{\pgfusepath{stroke}}
+        \endpgfscope
+        \pgfscope
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at other}{0pt}}
+            \pgfnode{ocirc}{center}{}{spdt2}{\pgfusepath{stroke}}
+        \endpgfscope
+
+        \pgfscope
+            \pgfpathmoveto{\pgfpointshapeborder{spdt2}{\pgfpointorigin}}
+            \pgfpathlineto{
+                \pgfpointadd{\pgfpointshapeborder{spdt1}{\pgfpoint{-\pgf at circ@res at other}{-100pt}}}
+                {\pgfpoint{-.05\pgf at circ@res at up}{-.05\pgf at circ@res at up}}
+            }
+            \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+            \pgfusepath{draw}
+        \endpgfscope
+    }
+}
+
+
+% cute switch "node" shapes, matching with cute "to" shapes
+% #1 -> name
+% #2 -> barposition
+% #3 -> arrowcode
+\long\def\pgfcircdeclarecutespdt#1#2#3{
+    \pgfdeclareshape{#1}
+    {
+        \savedmacro{\ctikzclass}{\edef\ctikzclass{switches}}
+        \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+        \savedanchor\northwest{%
+            \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            \pgf at y=\ctikzvalof{bipoles/cuteswitch/height}\pgf at circ@scaled at Rlen
+            \pgf at y=.5\pgf at y
+            \pgf at x=-\ctikzvalof{tripoles/spdt/width}\pgf at circ@scaled at Rlen
+            \pgf at x=.25\pgf at x
+        }
+        \savedanchor\midlever{
+            % these values are calculated when we create the definition of the shape.
+            \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            \pgf at y=\ctikzvalof{bipoles/cuteswitch/height}\pgf at circ@scaled at Rlen
+            \pgf at circ@res at temp=\ctikzvalof{nodes width}\pgf at circ@scaled at Rlen
+            \pgf at circ@res at temp=\ctikzvalof{bipoles/cuteswitch/thickness}\pgf at circ@res at temp
+            \pgf at circ@res at down = -.5\pgf at y
+            \pgf at circ@res at up = .5\pgf at y
+            \pgfextracty{\pgf at circ@res at other}{#2}
+            \pgf at x=0pt
+            \pgf at y=.5\pgf at circ@res at other
+        }
+        % radius of the connector
+        % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+        \saveddimen{\radius}{\pgfmathsetlength\pgf at x{\pgf at circ@Rlen*\ctikzvalof{nodes width}}}
+        % shapename
+        \savedmacro{\thisshape}{\def\thisshape{\tikz at fig@name}}
+        % shape type
+        \savedmacro{\cshape}{\def\cshape{\ctikzvalof{bipoles/cuteswitch/shape}}}
+        % mid of the lever, to stack switches
+        \anchor{mid}{\midlever}
+        % center anchors
+        \anchor{cin}{ \northwest \pgf at y=0pt}
+        \anchor{cout 1}{ \northwest \pgf at x=-\pgf at x }
+        \anchor{cout 2}{ \northwest \pgf at x=-\pgf at x \pgf at y=-\pgf at y }
+        % horizontal angles
+        \anchor{in}{ \northwest \pgf at y=0pt\advance\pgf at x by -\radius}
+        \anchor{out 1}{ \northwest \pgf at x=-\pgf at x \advance\pgf at x by \radius}
+        \anchor{out 2}{ \northwest \pgf at x=-\pgf at x \advance\pgf at x by \radius \pgf at y=-\pgf at y }
+
+        \anchor{center}{ \pgf at y=0pt \pgf at x=0pt }
+        \anchor{east}{ \northwest \pgf at y=0pt \pgf at x=-\pgf at x  }
+        \anchor{west}{ \northwest \pgf at y=0pt }
+        \anchor{south}{ \northwest \pgf at x=0pt \pgf at y=-\pgf at y }
+        \anchor{north}{ \northwest \pgf at x=0pt }
+        \anchor{south west}{ \northwest \pgf at y=-\pgf at y }
+        \anchor{north east}{ \northwest \pgf at x=-\pgf at x }
+        \anchor{north west}{ \northwest }
+        \anchor{south east}{ \northwest \pgf at x=-\pgf at x \pgf at y=-\pgf at y }
+
+        \backgroundpath{
+            \pgfsetcolor{\ctikzvalof{color}}
+            \northwest
+            \pgf at circ@res at up = \pgf at y
+            \pgf at circ@res at down = -\pgf at y
+            \pgf at circ@res at right = -\pgf at x
+            \pgf at circ@res at left = \pgf at x
+
+            \pgfscope
+            % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+            \pgf at circ@res at temp=\radius\relax
+            \pgf at circ@res at temp=\ctikzvalof{bipoles/cuteswitch/thickness}\pgf at circ@res at temp
+            \pgfsetlinewidth{2\pgf at circ@res at temp}
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfpathlineto{#2}
+            \pgfsetroundcap\pgfusepath{draw}
+            \endpgfscope
+            \pgfscope % arrow
+            #3
+            \endpgfscope
+            % terminals
+            \pgfscope
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+            \pgfnode{\cshape}{center}{}{\thisshape-out 1}{\pgfusepath{stroke}}
+            \endpgfscope
+            \pgfscope
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+            \pgfnode{\cshape}{center}{}{\thisshape-out 2}{\pgfusepath{stroke}}
+            \endpgfscope
+            \pgfscope
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{\cshape}{center}{}{\thisshape-in}{\pgfusepath{stroke}}
+            \endpgfscope
+
+        }
+    }
+}
+
+\pgfcircdeclarecutespdt{cute spdt up}
+{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up-1.5\pgf at circ@res at temp}}
+{}
+
+\pgfcircdeclarecutespdt{cute spdt mid}
+{\pgfpoint{\pgf at circ@res at right}{0pt}}
+{}
+
+\pgfcircdeclarecutespdt{cute spdt down}
+{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down+1.5\pgf at circ@res at temp}}
+{}
+
+\pgfcircdeclarecutespdt{cute spdt up arrow}
+{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up-1.5\pgf at circ@res at temp}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgflinewidth}
+    \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}} % in node
+    \pgfpathmoveto{\pgfpointpolar{70}{1.5\pgf at circ@res at right}}
+    \pgfpatharc{70}{-50}{1.5\pgf at circ@res at right}
+    \pgfsetarrowsend{latexslim}
+    \pgfusepath{draw}
+}
+
+\pgfcircdeclarecutespdt{cute spdt mid arrow}
+{\pgfpoint{\pgf at circ@res at right}{0pt}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgflinewidth}
+    \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}} % in node
+    \pgfsetarrowsstart{latexslim}
+    \pgfpathmoveto{\pgfpointpolar{-60}{1.5\pgf at circ@res at right}}
+    \pgfpatharc{-60}{60}{1.5\pgf at circ@res at right}
+    \pgfsetarrowsend{latexslim}
+    \pgfusepath{draw}
+}
+
+\pgfcircdeclarecutespdt{cute spdt down arrow}
+{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down+1.5\pgf at circ@res at temp}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgflinewidth}
+    \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}} % in node
+    \pgfpathmoveto{\pgfpointpolar{-50}{1.5\pgf at circ@res at right}}
+    \pgfpatharc{-50}{70}{1.5\pgf at circ@res at right}
+    \pgfsetarrowsend{latexslim}
+    \pgfusepath{draw}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%%       Logic ports
+%%
+%% Code from John Kormylo at tex.stackexchange.com
+%% See https://tex.stackexchange.com/questions/372993/is-it-possible-to-implement-multiple-input-logic-ports-with-circuitikz
+%% Integration and fixes from Romano Giannetti and TheTeXnician <38565529+TheTeXnician at users.noreply.github.com>
+%%
+
+\newcount\pgf at circ@res at count% reserve global register
+
+\def\pgf at circ@logicport at input#1% #1 = \pgfmathcounter
+{%
+    \pgfextracty{\pgf at circ@res at up}{\northeast}%
+    \step
+    \pgf at circ@res at step=\dimexpr 2\pgf at y -2\pgf at circ@res at up\relax
+    \advance\pgf at y by -#1\pgf at circ@res at step\relax
+}%
+
+% #1 = \pgfmathcounter #2=type #3 specificic port
+% type is 1 for and,nand; 2 for or,nor; 3 for xor,xnor, 4 for european.
+\def\pgf at circ@logicport at baseinput#1#2#3%
+{%
+    % and and nand
+    \ifnum #2=1\relax
+        \pgfextracty{\pgf at circ@res at up}{\northeast}%
+        \pgfextractx{\pgf at circ@res at left}{\southwest}%
+        \step
+        \pgf at circ@res at step=\dimexpr 2\pgf at y -2\pgf at circ@res at up\relax
+        \advance\pgf at y by -#1\pgf at circ@res at step\relax
+        \pgf at x=\ctikzvalof{tripoles/american #3 port/port width}\pgf at circ@res at left
+    \fi
+    % or and nor
+    \ifnum #2=2\relax
+        \pgfextracty{\pgf at circ@res at up}{\northeast}%
+        \pgfextractx{\pgf at circ@res at left}{\southwest}%
+        \pgfextractx{\pgf at circ@res at right}{\northeast}%
+        \step
+        \pgf at circ@res at step=\dimexpr 2\pgf at y -2\pgf at circ@res at up\relax
+        \advance\pgf at y by -#1\pgf at circ@res at step\relax
+        \edef\pgf at circ@math at angle{\ctikzvalof{tripoles/american #3 port/angle}}%
+        \pgf at circ@res at other=\ctikzvalof{tripoles/american #3 port/inner}\pgf at circ@res at right
+        \pgfmathsetlengthmacro{\pgf at circ@math at xradius}{\pgf at circ@res at other /(1 - cos(\pgf at circ@math at angle)}%
+        \pgfmathsetlengthmacro{\pgf at circ@math at yradius}{\pgf at circ@res at up /sin(\pgf at circ@math at angle)}%
+        \pgf at circ@res at other=\ctikzvalof{tripoles/american #3 port/port width}\pgf at circ@res at right
+        \pgfmathsetlengthmacro{\pgf at circ@math at xorigin}{\pgf at circ@res at other + \pgf at circ@math at xradius*cos(\pgf at circ@math at angle)}%
+        \pgf at circ@res at temp=\pgf at y
+        \pgfmathsetmacro{\pgf at circ@math at angle}{asin(\pgf at circ@res at temp/\pgf at circ@math at yradius)}%
+        \pgfmathsetlength{\pgf at circ@res at other}{\pgf at circ@math at xradius*cos(\pgf at circ@math at angle)-\pgf at circ@math at xorigin}%
+        \pgf at x=\pgf at circ@res at other
+    \fi
+    % xor and xnor
+    \ifnum #2=3\relax
+        \pgfextracty{\pgf at circ@res at up}{\northeast}%
+        \pgfextractx{\pgf at circ@res at left}{\southwest}%
+        \pgfextractx{\pgf at circ@res at right}{\northeast}%
+        \pgfkeysgetvalue{/tikz/circuitikz/tripoles/american #3 port/angle}{\pgf at circ@math at angle}%
+        \pgf at circ@res at other=\ctikzvalof{tripoles/american #3 port/inner}\pgf at circ@res at right
+        \pgfmathsetlengthmacro{\pgf at circ@math at xradius}{\pgf at circ@res at other /(1 - cos(\pgf at circ@math at angle)}%
+        \pgfmathsetlengthmacro{\pgf at circ@math at yradius}{\pgf at circ@res at up / sin(\pgf at circ@math at angle))}%
+        \pgf at circ@res at other=\ctikzvalof{tripoles/american #3 port/port width}\pgf at circ@res at right
+        \pgfmathsetlengthmacro{\pgf at circ@math at xorigin}{\pgf at circ@res at other + \pgf at circ@math at xradius*cos(\pgf at circ@math at angle)}%
+        \pgf at circ@res at temp=\ctikzvalof{tripoles/american #3 port/distance}\pgf at circ@res at right
+        \pgfmathsetlengthmacro{\pgf at circ@math at distance}{\pgf at circ@res at temp}
+        % this compensates for the effect of the line width on the gap between the arcs
+        \pgfmathsetlengthmacro{\pgf at circ@math at yradiusA}{\pgf at circ@math at yradius -2\pgflinewidth}%
+        \pgfmathsetlengthmacro{\pgf at circ@math at xradiusA}{\pgf at circ@math at xradius -2\pgflinewidth}%
+
+        \step
+        \pgf at circ@res at step=\dimexpr 2\pgf at y -2\pgf at circ@res at up\relax
+        \advance\pgf at y by -#1\pgf at circ@res at step\relax
+         \pgf at circ@res at temp=\pgf at y
+            \pgfmathsetmacro{\pgf at circ@math at angle}{asin(\pgf at circ@res at temp  / \pgf at circ@math at yradiusA)}%
+        \pgfmathsetlength{\pgf at circ@res at other}{\pgf at circ@math at xradiusA*cos(\pgf at circ@math at angle)-\pgf at circ@math at xorigin}%
+        \advance\pgf at circ@res at other by -\pgf at circ@math at distance
+        \pgf at x=\pgf at circ@res at other
+    \fi
+    % european
+    \ifnum #2=4\relax
+        \pgfextracty{\pgf at circ@res at up}{\northeast}%
+        \pgfextractx{\pgf at circ@res at other}{\left}%
+        \step
+        \pgf at circ@res at step=\dimexpr 2\pgf at y -2\pgf at circ@res at up\relax
+        \advance\pgf at y by -#1\pgf at circ@res at step\relax
+        \pgf at x=\pgf at circ@res at other
+    \fi
+}%
+
+%%% american
+\long\def\pgfcircdeclarelogicport#1#2#3{%
+    \pgfdeclareshape{american #1 port}%
+    {%
+        \savedmacro{\ctikzclass}{\edef\ctikzclass{logic ports}}
+        \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+        \savedmacro\resize{% automatic
+            \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            \pgf at circ@res at up = \ctikzvalof{tripoles/american #1 port/height}\pgf at circ@scaled at Rlen
+            \pgf at circ@res at up = .5\pgf at circ@res at up
+            \pgf at circ@res at down = -\pgf at circ@res at up
+            \pgf at circ@res at right = \ctikzvalof{tripoles/american #1 port/width}\pgf at circ@scaled at Rlen
+            \pgf at circ@res at right = .5\pgf at circ@res at right
+            \pgf at circ@res at left = -\pgf at circ@res at right
+    }%
+    \savedmacro\inputs{% get number of inputs
+        \pgf at circ@res at count=\pgfkeysvalueof{/tikz/number inputs}\relax%
+        \ifnum\pgf at circ@res at count=0
+            \pgf at circ@res at count=\ctikzvalof{tripoles/american #1 port/inputs}\relax%
+        \fi
+        \ifnum\pgf at circ@res at count<2 \pgf at circ@res at count=2\fi
+        \ifnum\pgf at circ@res at count>16 \pgf at circ@res at count=16\fi
+        \def\inputs{\the\pgf at circ@res at count}%
+    }%
+    \savedanchor\step{% 1/2 gap at edges
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at circ@res at step = \ctikzvalof{tripoles/american #1 port/height}\pgf at circ@scaled at Rlen
+        \divide\pgf at circ@res at step by \pgf at circ@res at count
+        \pgfpoint{\pgf at circ@res at left}{\dimexpr\pgf at circ@res at up+0.5\pgf at circ@res at step}%
+    }%
+    \savedanchor\northeast{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \savedanchor\southwest{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \savedanchor\left{\pgfpoint{\ctikzvalof{tripoles/american #1 port/port width}\pgf at circ@res at left}{0pt}}
+    \savedanchor\right{\pgfpoint{\ctikzvalof{tripoles/american #1 port/port width}\pgf at circ@res at right}{0pt}}
+    \savedanchor\origin{\pgfpoint{\ctikzvalof{tripoles/american #1 port/origin}\pgf at circ@res at right}{0pt}}
+
+    \anchor{center}{\origin}% for backwards compatibility
+    \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+    % create input anchors
+    \expandafter\pgfutil at g@addto at macro\csname pgf at sh@s at american #1 port\endcsname{%
+        \pgfmathloop%
+        \ifnum\pgfmathcounter>\pgf at circ@res at count%
+    \else%
+        %\pgfutil at ifundefined{pgf at anchor@american #1 port at in \pgfmathcounter}{%
+        \expandafter\xdef\csname pgf at anchor@american #1 port at in \pgfmathcounter\endcsname{%
+            \noexpand\pgf at circ@logicport at input{\pgfmathcounter}% defined above
+        }%
+        \expandafter\xdef\csname pgf at anchor@american #1 port at bin \pgfmathcounter\endcsname{%
+            \noexpand\pgf at circ@logicport at baseinput{\pgfmathcounter}{#2}{#1}% defined above
+        }%
+        %}{}%
+        \repeatpgfmathloop%
+    }
+
+    \anchor{out}{\northeast\pgf at y=0pt}
+    \anchor{bout}{\right\pgf at y=0pt}
+
+
+    \anchor{left}{\left}% edges of component minus leads
+    \anchor{right}{\right}
+
+    \anchor{north east}{\northeast}% see \Compass macro
+    \anchor{south west}{\southwest}
+    \anchor{north}{\pgfextracty{\pgf at circ@res at up}{\northeast}%
+    \pgfpoint{0cm}{\pgf at circ@res at up}}
+    \anchor{north west}{\pgfextracty{\pgf at circ@res at up}{\northeast}%
+        \pgfextractx{\pgf at circ@res at left}{\southwest}%
+    \pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+    \anchor{west}{\pgfextractx{\pgf at circ@res at left}{\southwest}%
+    \pgfpoint{\pgf at circ@res at left}{0cm}}
+    \anchor{south}{\pgfextracty{\pgf at circ@res at down}{\southwest}%
+    \pgfpoint{0cm}{\pgf at circ@res at down}}
+    \anchor{south east}{\pgfextracty{\pgf at circ@res at down}{\southwest}%
+        \pgfextractx{\pgf at circ@res at right}{\northeast}%
+    \pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \anchor{east}{\pgfextractx{\pgf at circ@res at right}{\northeast}%
+    \pgfpoint{\pgf at circ@res at right}{0cm}}
+
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+        #3
+    }
+}
+}
+%%% american and %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfcircdeclarelogicport{and}{1}{
+    \pgfextracty{\pgf at circ@res at temp}{\step}%
+    \pgf at circ@res at step = \dimexpr 2\pgf at circ@res at temp -2\pgf at circ@res at up\relax
+    \pgf at circ@res at count = \inputs\relax
+    \ifpgfcirc at draw@input at leads
+        %input leads
+        \loop\ifnum\pgf at circ@res at count>0
+            \advance\pgf at circ@res at temp by -\pgf at circ@res at step
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at temp}}%
+            \pgfpathlineto{\pgfpoint
+                {\ctikzvalof{tripoles/american and port/port width}\pgf at circ@res at left}
+            {\pgf at circ@res at temp}}
+            \advance\pgf at circ@res at count by -1
+        \repeat
+    \fi
+    % output lead
+    \ifpgfcirc at draw@output at leads
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+        \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/american and port/port width}\pgf at circ@res at right} {0pt}}
+        \pgfusepath{draw}
+    \fi
+
+
+    \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+    \pgf at circ@res at other=\ctikzvalof{tripoles/american and port/port width}\pgf at circ@res at left
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at other}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{\pgf at circ@res at down}}
+    \pgfpatharc{-90}{90}{-2\pgf at circ@res at other and \pgf at circ@res at up}
+    \pgfpathclose
+    \pgf at circ@draworfill
+    }
+%%% american nand %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+    \pgfcircdeclarelogicport{nand}{1}{
+    \pgfextracty{\pgf at circ@res at temp}{\step}%
+    \pgf at circ@res at step = \dimexpr 2\pgf at circ@res at temp -2\pgf at circ@res at up\relax
+    \pgf at circ@res at count = \inputs\relax
+    \ifpgfcirc at draw@input at leads
+        %input leads
+        \loop\ifnum\pgf at circ@res at count>0
+            \advance\pgf at circ@res at temp by -\pgf at circ@res at step
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at temp}}%
+            \pgfpathlineto{\pgfpoint
+                {\ctikzvalof{tripoles/american nand port/port width}\pgf at circ@res at left}
+            {\pgf at circ@res at temp}}
+            \advance\pgf at circ@res at count by -1
+        \repeat
+    \fi
+
+    \ifpgfcirc at draw@output at leads
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/american nand port/port width}\pgf at circ@res at right} {0pt}}
+        \pgfusepath{draw}
+    \fi
+    \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+    \pgf at circ@res at step = \ctikzvalof{tripoles/american nand port/circle width}\pgf at circ@res at right
+    \pgf at circ@res at other = \ctikzvalof{tripoles/american nand port/port width}\pgf at circ@res at right
+    \pgf at circ@res at temp = \dimexpr 2\pgf at circ@res at other - \pgf at circ@res at step\relax
+
+    \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at other}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{-\pgf at circ@res at other}{\pgf at circ@res at down}}
+    \pgfpatharc{-90}{90}{\pgf at circ@res at temp and \pgf at circ@res at up}
+    \pgfpathclose
+
+    \pgfpathellipse
+    {\pgfpoint{\pgf at circ@res at other-.5\pgf at circ@res at step}{0pt}}
+    {\pgfpoint{.5\pgf at circ@res at step}{0pt}}
+    {\pgfpoint{0pt}{.5\pgf at circ@res at step}}
+
+    \pgf at circ@draworfill
+}
+%%% american nor %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfcircdeclarelogicport{nor}{2}{
+    \edef\pgf at circ@math at angle{\ctikzvalof{tripoles/american nor port/angle}}%
+    \pgf at circ@res at other=\ctikzvalof{tripoles/american nor port/inner}\pgf at circ@res at right
+    \pgfmathsetlengthmacro{\pgf at circ@math at xradius}{\pgf at circ@res at other /(1 - cos(\pgf at circ@math at angle)}%
+    \pgfmathsetlengthmacro{\pgf at circ@math at yradius}{\pgf at circ@res at up /sin(\pgf at circ@math at angle)}%
+    \pgf at circ@res at other=\ctikzvalof{tripoles/american nor port/port width}\pgf at circ@res at right
+    \pgfmathsetlengthmacro{\pgf at circ@math at xorigin}{\pgf at circ@res at other + \pgf at circ@math at xradius*cos(\pgf at circ@math at angle)}%
+
+    \pgfextracty{\pgf at circ@res at temp}{\step}%
+    \pgf at circ@res at step = \dimexpr 2\pgf at circ@res at temp -2\pgf at circ@res at up\relax
+    \pgf at circ@res at count = \inputs\relax
+    \ifpgfcirc at draw@input at leads
+        %input leads
+        \loop\ifnum\pgf at circ@res at count>0
+            \advance\pgf at circ@res at temp by -\pgf at circ@res at step
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at temp}}%
+            \pgfmathsetmacro{\pgf at circ@math at angle}{asin(\pgf at circ@res at temp/\pgf at circ@math at yradius)}%
+            \pgfmathsetlength{\pgf at circ@res at other}{\pgf at circ@math at xradius*cos(\pgf at circ@math at angle)-\pgf at circ@math at xorigin}%
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{\pgf at circ@res at temp}}%
+            \advance\pgf at circ@res at count by -1
+        \repeat
+    \fi
+
+    \pgf at circ@res at other=\ctikzvalof{tripoles/american nor port/port width}\pgf at circ@res at right
+    \ifpgfcirc at draw@output at leads
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{0pt}}
+        \pgfusepath{draw}
+    \fi
+
+    \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+
+    \edef\pgf at circ@math at angle{\ctikzvalof{tripoles/american nor port/angle}}%
+    \pgf at circ@res at step = \ctikzvalof{tripoles/american nor port/circle width}\pgf at circ@res at right
+    \pgf at circ@res at temp = \dimexpr 2\pgf at circ@res at other - \pgf at circ@res at step\relax
+    \advance\pgf at circ@res at other by -\pgf at circ@res at step
+
+    % main shape
+    \ifpgfcirc at roundy@or at shapes
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at other}{0pt}}% for symmetry
+        \pgfpatharc{0}{90}{\pgf at circ@res at temp and \pgf at circ@res at up}%
+        \pgfpatharc{\pgf at circ@math at angle}{-\pgf at circ@math at angle}{\pgf at circ@math at xradius and \pgf at circ@math at yradius}%
+        \pgfpatharc{-90}{0}{\pgf at circ@res at temp and \pgf at circ@res at up}%
+        \pgfpathclose
+    \else
+        \pgfmathsetlength{\pgf at circ@res at temp}{\pgf at circ@math at xradius*cos(\pgf at circ@math at angle)-\pgf at circ@math at xorigin}%
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at temp}{\pgf at circ@res at up}}
+        \pgfpatharc{\pgf at circ@math at angle}{-\pgf at circ@math at angle}{\pgf at circ@math at xradius and \pgf at circ@math at yradius}%
+        \pgfpathcurveto{\pgfpoint{0.3\pgf at circ@res at right}{\pgf at circ@res at down}}{\pgfpoint{0.3\pgf at circ@res at right}{0.5\pgf at circ@res at down}}{\pgfpoint{\pgf at circ@res at other}{0pt}}
+        \pgfpathcurveto{\pgfpoint{0.3\pgf at circ@res at right}{0.5\pgf at circ@res at up}}{\pgfpoint{0.3\pgf at circ@res at right}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at temp}{\pgf at circ@res at up}}
+        \pgfpathclose
+    \fi
+
+    % not dot
+    \pgfpathellipse
+    {\pgfpoint{\pgf at circ@res at other+.5\pgf at circ@res at step}{0pt}}
+    {\pgfpoint{.5\pgf at circ@res at step}{0pt}}
+    {\pgfpoint{0pt}{.5\pgf at circ@res at step}}
+
+    \pgf at circ@draworfill
+}
+%%% american or %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfcircdeclarelogicport{or}{2}{
+    \edef\pgf at circ@math at angle{\ctikzvalof{tripoles/american or port/angle}}%
+    \pgf at circ@res at other=\ctikzvalof{tripoles/american or port/inner}\pgf at circ@res at right
+    \pgfmathsetlengthmacro{\pgf at circ@math at xradius}{\pgf at circ@res at other /(1 - cos(\pgf at circ@math at angle)}%
+    \pgfmathsetlengthmacro{\pgf at circ@math at yradius}{\pgf at circ@res at up /sin(\pgf at circ@math at angle)}%
+    \pgf at circ@res at other=\ctikzvalof{tripoles/american or port/port width}\pgf at circ@res at right
+    \pgfmathsetlengthmacro{\pgf at circ@math at xorigin}{\pgf at circ@res at other + \pgf at circ@math at xradius*cos(\pgf at circ@math at angle)}%
+
+    \pgfextracty{\pgf at circ@res at temp}{\step}%
+    \pgf at circ@res at step = \dimexpr 2\pgf at circ@res at temp -2\pgf at circ@res at up\relax
+    \pgf at circ@res at count = \inputs\relax
+    \ifpgfcirc at draw@input at leads
+        %input leads
+        \loop\ifnum\pgf at circ@res at count>0
+            \advance\pgf at circ@res at temp by -\pgf at circ@res at step
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at temp}}%
+            \pgfmathsetmacro{\pgf at circ@math at angle}{asin(\pgf at circ@res at temp/\pgf at circ@math at yradius)}%
+            \pgfmathsetlength{\pgf at circ@res at other}{\pgf at circ@math at xradius*cos(\pgf at circ@math at angle)-\pgf at circ@math at xorigin}%
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{\pgf at circ@res at temp}}%
+            \advance\pgf at circ@res at count by -1
+        \repeat
+    \fi
+
+    \pgf at circ@res at other=\ctikzvalof{tripoles/american or port/port width}\pgf at circ@res at right
+    \ifpgfcirc at draw@output at leads
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{0pt}}
+        \pgfusepath{draw}
+    \fi
+
+    \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+
+    \edef\pgf at circ@math at angle{\ctikzvalof{tripoles/american or port/angle}}%
+
+    % main shape
+    \ifpgfcirc at roundy@or at shapes
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at other}{0pt}}% for symmetry
+        \pgfpatharc{0}{90}{2\pgf at circ@res at other and \pgf at circ@res at up}%
+        \pgfpatharc{\pgf at circ@math at angle}{-\pgf at circ@math at angle}{\pgf at circ@math at xradius and \pgf at circ@math at yradius}%
+        \pgfpatharc{-90}{0}{2\pgf at circ@res at other and \pgf at circ@res at up}%
+        \pgfpathclose
+    \else
+        \pgfmathsetlength{\pgf at circ@res at temp}{\pgf at circ@math at xradius*cos(\pgf at circ@math at angle)-\pgf at circ@math at xorigin}%
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at temp}{\pgf at circ@res at up}}
+        \pgfpatharc{\pgf at circ@math at angle}{-\pgf at circ@math at angle}{\pgf at circ@math at xradius and \pgf at circ@math at yradius}%
+        \pgfpathcurveto{\pgfpoint{0.3\pgf at circ@res at right}{\pgf at circ@res at down}}{\pgfpoint{0.3\pgf at circ@res at right}{0.5\pgf at circ@res at down}}{\pgfpoint{\pgf at circ@res at other}{0pt}}
+        \pgfpathcurveto{\pgfpoint{0.3\pgf at circ@res at right}{0.5\pgf at circ@res at up}}{\pgfpoint{0.3\pgf at circ@res at right}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at temp}{\pgf at circ@res at up}}
+        \pgfpathclose
+    \fi
+
+    \pgf at circ@draworfill
+}
+%%% american xor %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfcircdeclarelogicport{xor}{3}{
+    \pgfkeysgetvalue{/tikz/circuitikz/tripoles/american xor port/angle}{\pgf at circ@math at angle}%
+    \pgf at circ@res at other=\ctikzvalof{tripoles/american xor port/inner}\pgf at circ@res at right
+    \pgfmathsetlengthmacro{\pgf at circ@math at xradius}{\pgf at circ@res at other /(1 - cos(\pgf at circ@math at angle)}%
+    \pgfmathsetlengthmacro{\pgf at circ@math at yradius}{\pgf at circ@res at up / sin(\pgf at circ@math at angle))}%
+    \pgf at circ@res at other=\ctikzvalof{tripoles/american xor port/port width}\pgf at circ@res at right
+    \pgfmathsetlengthmacro{\pgf at circ@math at xorigin}{\pgf at circ@res at other + \pgf at circ@math at xradius*cos(\pgf at circ@math at angle)}%
+    \pgf at circ@res at temp=\ctikzvalof{tripoles/american xor port/distance}\pgf at circ@res at right
+    \pgfmathsetlengthmacro{\pgf at circ@math at distance}{\pgf at circ@res at temp}
+    % this compensates for the effect of the line width on the gap between the arcs
+    \pgfmathsetlengthmacro{\pgf at circ@math at yradiusA}{\pgf at circ@math at yradius -2\pgflinewidth}%
+    \pgfmathsetlengthmacro{\pgf at circ@math at xradiusA}{\pgf at circ@math at xradius -2\pgflinewidth}%
+
+    \pgfextracty{\pgf at circ@res at temp}{\step}%
+    \pgf at circ@res at step = \dimexpr 2\pgf at circ@res at temp -2\pgf at circ@res at up\relax
+    \pgf at circ@res at count = \inputs\relax
+    \ifpgfcirc at draw@input at leads
+        %input leads
+        \loop\ifnum\pgf at circ@res at count>0
+            \advance\pgf at circ@res at temp by -\pgf at circ@res at step
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at temp}}%
+            \pgfmathsetmacro{\pgf at circ@math at angle}{asin(\pgf at circ@res at temp  / \pgf at circ@math at yradiusA)}%
+            \pgfmathsetlength{\pgf at circ@res at other}{\pgf at circ@math at xradiusA*cos(\pgf at circ@math at angle)-\pgf at circ@math at xorigin}%
+            \advance\pgf at circ@res at other by -\pgf at circ@math at distance
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{\pgf at circ@res at temp}}%
+            \advance\pgf at circ@res at count by -1
+        \repeat
+    \fi
+
+    \pgf at circ@res at other=\ctikzvalof{tripoles/american xor port/port width}\pgf at circ@res at right
+    \ifpgfcirc at draw@output at leads
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{0pt}}
+        \pgfusepath{draw}
+    \fi
+
+    \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+
+    \edef\pgf at circ@math at angle{\ctikzvalof{tripoles/american xor port/angle}}%
+
+    % main shape
+    \ifpgfcirc at roundy@or at shapes
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at other}{0pt}}% for symmetry
+        \pgfpatharc{0}{90}{2\pgf at circ@res at other and \pgf at circ@res at up}%
+        \pgfpatharc{\pgf at circ@math at angle}{-\pgf at circ@math at angle}{\pgf at circ@math at xradius and \pgf at circ@math at yradius}%
+        \pgfpatharc{-90}{0}{2\pgf at circ@res at other and \pgf at circ@res at up}%
+        \pgfpathclose
+    \else
+        \pgfmathsetlength{\pgf at circ@res at temp}{\pgf at circ@math at xradius*cos(\pgf at circ@math at angle)-\pgf at circ@math at xorigin}%
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at temp}{\pgf at circ@res at up}}
+        \pgfpatharc{\pgf at circ@math at angle}{-\pgf at circ@math at angle}{\pgf at circ@math at xradius and \pgf at circ@math at yradius}%
+        \pgfpathcurveto{\pgfpoint{0.3\pgf at circ@res at right}{\pgf at circ@res at down}}{\pgfpoint{0.3\pgf at circ@res at right}{0.5\pgf at circ@res at down}}{\pgfpoint{\pgf at circ@res at other}{0pt}}
+        \pgfpathcurveto{\pgfpoint{0.3\pgf at circ@res at right}{0.5\pgf at circ@res at up}}{\pgfpoint{0.3\pgf at circ@res at right}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at temp}{\pgf at circ@res at up}}
+        \pgfpathclose
+    \fi
+    \pgf at circ@draworfill
+
+    \pgfmathsetlength{\pgf at circ@res at temp}{(\pgf at circ@math at yradiusA)*sin(\pgf at circ@math at angle)}%
+
+    \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at other-\pgf at circ@math at distance}{\pgf at circ@res at temp}}% first arc
+    \pgfpatharc{\pgf at circ@math at angle}{-\pgf at circ@math at angle}{\pgf at circ@math at xradiusA and \pgf at circ@math at yradiusA}%
+
+    \pgfusepath{draw}
+}
+%%% american xnor %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfcircdeclarelogicport{xnor}{3}{
+    \pgfkeysgetvalue{/tikz/circuitikz/tripoles/american xnor port/angle}{\pgf at circ@math at angle}%
+    \pgf at circ@res at other=\ctikzvalof{tripoles/american xnor port/inner}\pgf at circ@res at right
+    \pgfmathsetlengthmacro{\pgf at circ@math at xradius}{\pgf at circ@res at other /(1 - cos(\pgf at circ@math at angle)}%
+    \pgfmathsetlengthmacro{\pgf at circ@math at yradius}{\pgf at circ@res at up / sin(\pgf at circ@math at angle))}%
+    \pgf at circ@res at other=\ctikzvalof{tripoles/american xnor port/port width}\pgf at circ@res at right
+    \pgfmathsetlengthmacro{\pgf at circ@math at xorigin}{\pgf at circ@res at other + \pgf at circ@math at xradius*cos(\pgf at circ@math at angle)}%
+    \pgf at circ@res at temp=\ctikzvalof{tripoles/american xor port/distance}\pgf at circ@res at right
+    \pgfmathsetlengthmacro{\pgf at circ@math at distance}{\pgf at circ@res at temp}
+    % this compensates for the effect of the line width on the gap between the arcs
+    \pgfmathsetlengthmacro{\pgf at circ@math at yradiusA}{\pgf at circ@math at yradius -2\pgflinewidth}%
+    \pgfmathsetlengthmacro{\pgf at circ@math at xradiusA}{\pgf at circ@math at xradius -2\pgflinewidth}%
+
+    \pgfextracty{\pgf at circ@res at temp}{\step}%
+    \pgf at circ@res at step = \dimexpr 2\pgf at circ@res at temp -2\pgf at circ@res at up\relax
+    \pgf at circ@res at count = \inputs\relax
+    \ifpgfcirc at draw@input at leads
+        %input leads
+        \loop\ifnum\pgf at circ@res at count>0
+            \advance\pgf at circ@res at temp by -\pgf at circ@res at step
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at temp}}%
+            \pgfmathsetmacro{\pgf at circ@math at angle}{asin(\pgf at circ@res at temp  / \pgf at circ@math at yradiusA)}%
+            \pgfmathsetlength{\pgf at circ@res at other}{\pgf at circ@math at xradiusA*cos(\pgf at circ@math at angle)-\pgf at circ@math at xorigin}%
+            \advance\pgf at circ@res at other by -\pgf at circ@math at distance
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{\pgf at circ@res at temp}}%
+            \advance\pgf at circ@res at count by -1
+        \repeat
+    \fi
+
+    \pgf at circ@res at other=\ctikzvalof{tripoles/american xnor port/port width}\pgf at circ@res at right
+    \ifpgfcirc at draw@output at leads
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{0pt}}
+        \pgfusepath{draw}
+    \fi
+
+    \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+
+    \edef\pgf at circ@math at angle{\ctikzvalof{tripoles/american xnor port/angle}}%
+    \pgf at circ@res at step = \ctikzvalof{tripoles/american xnor port/circle width}\pgf at circ@res at right
+    \pgf at circ@res at temp = \dimexpr 2\pgf at circ@res at other - \pgf at circ@res at step\relax
+    \advance\pgf at circ@res at other by -\pgf at circ@res at step
+
+    % main shape
+    \ifpgfcirc at roundy@or at shapes
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at other}{0pt}}% for symmetry
+        \pgfpatharc{0}{90}{\pgf at circ@res at temp and \pgf at circ@res at up}%
+        \pgfpatharc{\pgf at circ@math at angle}{-\pgf at circ@math at angle}{\pgf at circ@math at xradius and \pgf at circ@math at yradius}%
+        \pgfpatharc{-90}{0}{\pgf at circ@res at temp and \pgf at circ@res at up}%
+        \pgfpathclose
+    \else
+        \pgfmathsetlength{\pgf at circ@res at temp}{\pgf at circ@math at xradius*cos(\pgf at circ@math at angle)-\pgf at circ@math at xorigin}%
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at temp}{\pgf at circ@res at up}}
+        \pgfpatharc{\pgf at circ@math at angle}{-\pgf at circ@math at angle}{\pgf at circ@math at xradius and \pgf at circ@math at yradius}%
+        \pgfpathcurveto{\pgfpoint{0.3\pgf at circ@res at right}{\pgf at circ@res at down}}{\pgfpoint{0.3\pgf at circ@res at right}{0.5\pgf at circ@res at down}}{\pgfpoint{\pgf at circ@res at other}{0pt}}
+        \pgfpathcurveto{\pgfpoint{0.3\pgf at circ@res at right}{0.5\pgf at circ@res at up}}{\pgfpoint{0.3\pgf at circ@res at right}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at temp}{\pgf at circ@res at up}}
+        \pgfpathclose
+    \fi
+
+    \pgfpathellipse
+    {\pgfpoint{\pgf at circ@res at other+.5\pgf at circ@res at step}{0pt}}
+    {\pgfpoint{.5\pgf at circ@res at step}{0pt}}
+    {\pgfpoint{0pt}{.5\pgf at circ@res at step}}
+    \pgf at circ@draworfill
+
+    \pgf at circ@res at other=\ctikzvalof{tripoles/american xnor port/port width}\pgf at circ@res at left
+    \pgfmathsetlength{\pgf at circ@res at temp}{(\pgf at circ@math at yradiusA)*sin(\pgf at circ@math at angle)}%
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at other-\pgf at circ@math at distance}{\pgf at circ@res at temp}}% first arc
+    \pgfpatharc{\pgf at circ@math at angle}{-\pgf at circ@math at angle}{\pgf at circ@math at xradiusA and \pgf at circ@math at yradiusA}%
+
+    \pgfusepath{draw}
+}
+
+%%% Original one-input ports
+
+\pgfdeclareshape{american not port}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{logic ports}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \anchor{center}{\pgfpointorigin}
+    \savedanchor\northwest{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{bipoles/not port/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{bipoles/not port/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    }
+    \anchor{in}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{in 1}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{left}{
+        \northwest
+        \pgf at x=0.7\pgf at x
+        \pgf at y=0pt
+    }
+    \anchor{bin}{
+        \northwest
+        \pgf at x=0.7\pgf at x
+        \pgf at y=0pt
+    }
+    \anchor{bin 1}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=0.7\pgf at x
+    }
+    \anchor{out}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{right}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-0.7\pgf at x
+    }
+    \anchor{bout}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-0.7\pgf at x
+    }
+    \anchor{center}{
+        \pgfpointorigin
+    }
+    \anchor{east}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{west}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{south}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{north}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{south west}{
+        \northwest
+        \pgf at y=-\pgf at y
+    }
+    \anchor{north east}{
+        \northwest
+        \pgf at x=-\pgf at x
+    }
+    \anchor{north west}{
+        \northwest
+    }
+    \anchor{south east}{
+        \northwest
+        \pgf at x=-\pgf at x
+        \pgf at y=-\pgf at y
+    }
+    \anchorborder{% this is used when the node is used as a path element
+        \pgf at xa=\pgf at x
+        \pgf at ya=\pgf at y
+        \pgfextracty{\pgf at circ@res at up}{\northwest}
+        \pgfextractx{\pgf at circ@res at left}{\northwest}
+        \pgfpointborderrectangle{\pgfpoint{\pgf at xa}{\pgf at ya}}
+            {\pgfpoint{-\pgf at circ@res at left}{\pgf at circ@res at up}}
+    }
+    \anchor{text}{%
+        % centered and a bit to the left (it's a triangle)!
+        \pgf at x=\dimexpr -.6\wd\pgfnodeparttextbox\relax
+        \pgf at y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+    }
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+
+        \northwest
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+
+        \pgf at circ@res at other = \ctikzvalof{bipoles/not port/circle width}\pgf at circ@res at right
+
+        \pgfscope
+            \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+            \pgftransformxshift{.7\pgf at circ@res at left}
+            \pgf at circ@res at step=\pgf at circ@res at right
+            \advance\pgf at circ@res at step by -\pgf at circ@res at left
+            \pgf at circ@res at step=.7\pgf at circ@res at step
+
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step-\pgf at circ@res at other}{0pt}}
+            \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at step-\pgf at circ@res at other}{0pt}}
+            \pgf at circ@draworfill
+            \pgfpathellipse
+            {\pgfpoint{\pgf at circ@res at step-.5\pgf at circ@res at other}{0pt}}
+            {\pgfpoint{.5\pgf at circ@res at other}{0pt}}
+            {\pgfpoint{0pt}{.5\pgf at circ@res at other}}
+            \pgf at circ@draworfill
+        \endpgfscope
+
+        \ifpgfcirc at draw@input at leads
+            %input leads
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfpathlineto{\pgfpoint{.7\pgf at circ@res at left}{0pt}}
+        \fi
+
+        \ifpgfcirc at draw@output at leads
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+            \pgfpathlineto{\pgfpoint{.7\pgf at circ@res at right}{0pt}}
+        \fi
+
+        \pgfusepath{draw}
+    }
+}
+
+\pgfdeclareshape{american buffer port}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{logic ports}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \anchor{center}{\pgfpointorigin}
+    \savedanchor\northwest{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{bipoles/not port/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{bipoles/not port/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    }
+    \anchor{in}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{in 1}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{left}{
+        \northwest
+        \pgf at x=0.7\pgf at x
+        \pgf at y=0pt
+    }
+    \anchor{bin}{
+        \northwest
+        \pgf at x=0.7\pgf at x
+        \pgf at y=0pt
+    }
+    \anchor{bin 1}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=0.7\pgf at x
+    }
+    \anchor{out}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{right}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-0.7\pgf at x
+    }
+    \anchor{bout}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-0.7\pgf at x
+    }
+    \anchor{center}{
+        \pgfpointorigin
+    }
+    \anchor{east}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{west}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{south}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{north}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{south west}{
+        \northwest
+        \pgf at y=-\pgf at y
+    }
+    \anchor{north east}{
+        \northwest
+        \pgf at x=-\pgf at x
+    }
+    \anchor{north west}{
+        \northwest
+    }
+    \anchor{south east}{
+        \northwest
+        \pgf at x=-\pgf at x
+        \pgf at y=-\pgf at y
+    }
+    \anchorborder{% this is used when the node is used as a path element
+        \pgf at xa=\pgf at x
+        \pgf at ya=\pgf at y
+        \pgfextracty{\pgf at circ@res at up}{\northwest}
+        \pgfextractx{\pgf at circ@res at left}{\northwest}
+        \pgfpointborderrectangle{\pgfpoint{\pgf at xa}{\pgf at ya}}
+            {\pgfpoint{-\pgf at circ@res at left}{\pgf at circ@res at up}}
+    }
+    \anchor{text}{%
+        % centered and a bit to the left (it's a triangle)!
+        \pgf at x=\dimexpr -.6\wd\pgfnodeparttextbox\relax
+        \pgf at y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+    }
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+
+        \northwest
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+
+        \pgfscope
+            \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+            \pgftransformxshift{.7\pgf at circ@res at left}
+            \pgf at circ@res at step=\pgf at circ@res at right
+            \advance\pgf at circ@res at step by -\pgf at circ@res at left
+            \pgf at circ@res at step=.7\pgf at circ@res at step
+
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{0pt}}
+            \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{0pt}}
+            \pgf at circ@draworfill
+        \endpgfscope
+
+        \ifpgfcirc at draw@input at leads
+            %input leads
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfpathlineto{\pgfpoint{.7\pgf at circ@res at left}{0pt}}
+        \fi
+
+        \ifpgfcirc at draw@output at leads
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+            \pgfpathlineto{\pgfpoint{.7\pgf at circ@res at right}{0pt}}
+        \fi
+
+        \pgfusepath{draw}
+    }
+}
+\pgfdeclareshape{invschmitt}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{logic ports}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \anchor{center}{\pgfpointorigin}
+    \savedanchor\northwest{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{bipoles/not port/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{bipoles/not port/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    }
+    \anchor{in}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{in 1}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{left}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=0.7\pgf at x
+    }
+    \anchor{bin}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=0.7\pgf at x
+    }
+    \anchor{bin 1}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=0.7\pgf at x
+    }
+    \anchor{out}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{right}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-0.7\pgf at x
+    }
+    \anchor{bout}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-0.7\pgf at x
+    }
+    \anchor{center}{
+        \pgfpointorigin
+    }
+    \anchor{east}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{west}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{south}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{north}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{south west}{
+        \northwest
+        \pgf at y=-\pgf at y
+    }
+    \anchor{north east}{
+        \northwest
+        \pgf at x=-\pgf at x
+    }
+    \anchor{north west}{
+        \northwest
+    }
+    \anchor{south east}{
+        \northwest
+        \pgf at x=-\pgf at x
+        \pgf at y=-\pgf at y
+    }
+    \anchorborder{% this is used when the node is used as a path element
+        \pgf at xa=\pgf at x
+        \pgf at ya=\pgf at y
+        \pgfextracty{\pgf at circ@res at up}{\northwest}
+        \pgfextractx{\pgf at circ@res at left}{\northwest}
+        \pgfpointborderrectangle{\pgfpoint{\pgf at xa}{\pgf at ya}}
+            {\pgfpoint{-\pgf at circ@res at left}{\pgf at circ@res at up}}
+    }
+    \anchor{text}{%
+        % centered and a bit to the left (it's a triangle)!
+        \pgf at x=\dimexpr -.6\wd\pgfnodeparttextbox\relax
+        \pgf at y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+    }
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+
+        \northwest
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+
+        \pgf at circ@res at other = \ctikzvalof{bipoles/not port/circle width}\pgf at circ@res at right
+
+        \pgfscope
+            \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+            \pgftransformxshift{.7\pgf at circ@res at left}
+            \pgf at circ@res at step=\pgf at circ@res at right
+            \advance\pgf at circ@res at step by -\pgf at circ@res at left
+            \pgf at circ@res at step=.7\pgf at circ@res at step
+
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step-\pgf at circ@res at other}{0pt}}
+            \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down}}
+            \pgfpathclose
+            \pgf at circ@draworfill
+            \pgfpathellipse
+            {\pgfpoint{\pgf at circ@res at step-.5\pgf at circ@res at other}{0pt}}
+            {\pgfpoint{.5\pgf at circ@res at other}{0pt}}
+            {\pgfpoint{0pt}{.5\pgf at circ@res at other}}
+            \pgf at circ@draworfill
+        \endpgfscope
+
+        \ifpgfcirc at draw@input at leads
+            %input leads
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfpathlineto{\pgfpoint{.7\pgf at circ@res at left}{0pt}}
+        \fi
+
+        \ifpgfcirc at draw@output at leads
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+            \pgfpathlineto{\pgfpoint{.7\pgf at circ@res at right}{0pt}}
+        \fi
+        \pgfusepath{draw}
+        %draw inner shape
+
+        \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+
+        \pgfpathmoveto{\pgfpoint{.6\pgf at circ@res at left}{.3\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{.4\pgf at circ@res at left}{.3\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{.4\pgf at circ@res at left}{.3\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{.05\pgf at circ@res at left}{.3\pgf at circ@res at up}}
+        \pgfpathmoveto{\pgfpoint{.4\pgf at circ@res at left}{.3\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{.25\pgf at circ@res at left}{.3\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{.25\pgf at circ@res at left}{.3\pgf at circ@res at up}}
+        \pgfusepath{draw}
+
+    }
+}
+
+\pgfdeclareshape{schmitt}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{logic ports}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \anchor{center}{\pgfpointorigin}
+    \savedanchor\northwest{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{bipoles/not port/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{bipoles/not port/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    }
+    \anchor{in}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{in 1}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{left}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=0.7\pgf at x
+    }
+    \anchor{bin}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=0.7\pgf at x
+    }
+    \anchor{bin 1}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=0.7\pgf at x
+    }
+    \anchor{out}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{right}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-.7\pgf at x
+    }
+    \anchor{bout}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-.7\pgf at x
+    }
+    \anchor{center}{
+        \pgfpointorigin
+    }
+    \anchor{east}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{west}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{south}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{north}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{south west}{
+        \northwest
+        \pgf at y=-\pgf at y
+    }
+    \anchor{north east}{
+        \northwest
+        \pgf at x=-\pgf at x
+    }
+    \anchor{north west}{
+        \northwest
+    }
+    \anchor{south east}{
+        \northwest
+        \pgf at x=-\pgf at x
+        \pgf at y=-\pgf at y
+    }
+    \anchorborder{% this is used when the node is used as a path element
+        \pgf at xa=\pgf at x
+        \pgf at ya=\pgf at y
+        \pgfextracty{\pgf at circ@res at up}{\northwest}
+        \pgfextractx{\pgf at circ@res at left}{\northwest}
+        \pgfpointborderrectangle{\pgfpoint{\pgf at xa}{\pgf at ya}}
+            {\pgfpoint{-\pgf at circ@res at left}{\pgf at circ@res at up}}
+    }
+    \anchor{text}{%
+        % centered and a bit to the left (it's a triangle)!
+        \pgf at x=\dimexpr -.6\wd\pgfnodeparttextbox\relax
+        \pgf at y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+    }
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+
+
+        \northwest
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+
+        \pgfscope
+            \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+            \pgftransformxshift{.7\pgf at circ@res at left}
+            \pgf at circ@res at step=\pgf at circ@res at right
+            \advance\pgf at circ@res at step by -\pgf at circ@res at left
+            \pgf at circ@res at step=.7\pgf at circ@res at step
+
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{0pt}}
+            \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down}}
+            \pgfpathclose
+            \pgf at circ@draworfill
+        \endpgfscope
+
+        \ifpgfcirc at draw@input at leads
+            %input leads
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfpathlineto{\pgfpoint{.7\pgf at circ@res at left}{0pt}}
+        \fi
+
+        \ifpgfcirc at draw@output at leads
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+            \pgfpathlineto{\pgfpoint{.7\pgf at circ@res at right-\pgf at circ@res at other}{0pt}}
+        \fi
+        \pgfusepath{draw}
+        %draw inner shape
+
+        \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+
+        \pgfpathmoveto{\pgfpoint{.6\pgf at circ@res at left}{.3\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{.4\pgf at circ@res at left}{.3\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{.4\pgf at circ@res at left}{.3\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{.05\pgf at circ@res at left}{.3\pgf at circ@res at up}}
+        \pgfpathmoveto{\pgfpoint{.4\pgf at circ@res at left}{.3\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{.25\pgf at circ@res at left}{.3\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{.25\pgf at circ@res at left}{.3\pgf at circ@res at up}}
+        \pgfusepath{draw}
+
+    }
+}
+
+
+%%% start european logic ports, from John Kormylo
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+
+% #1 - name
+% #2 - text inside
+% #3 - number of inputs
+% #4 = is it a not?
+%
+% option to add a circle for not-output, see
+% https://github.com/circuitikz/circuitikz/issues/385
+%
+\newif\ifpgf at circ@european at port@circle\pgf at circ@european at port@circlefalse
+\newif\ifpgf at circ@european at port@circle at ieee\pgf at circ@european at port@circle at ieeefalse
+\ctikzset{tripoles/european not shape/.initial=ocirc}
+\ctikzset{tripoles/european not symbol/.is choice}
+\ctikzset{tripoles/european not symbol/triangle/.code={\pgf at circ@european at port@circlefalse}}
+\ctikzset{tripoles/european not symbol/circle/.code={%
+\pgf at circ@european at port@circletrue\pgf at circ@european at port@circle at ieeefalse\ctikzset{tripoles/european not shape=ocirc}}}
+\ctikzset{tripoles/european not symbol/ieee circle/.code={%
+\pgf at circ@european at port@circletrue\pgf at circ@european at port@circle at ieeetrue\ctikzset{tripoles/european not shape=notcirc}}}
+
+\long\def\pgfcircdeclareeurologicport#1#2#3#4{
+    \pgfdeclareshape{european #1 port}
+    {
+        \savedmacro{\ctikzclass}{\edef\ctikzclass{logic ports}}
+        \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+        \saveddimen{\boutshift}{%
+            \edef\pgf at temp{not}
+            \edef\pgf at circ@temp{#4}
+            \ifx\pgf at temp\pgf at circ@temp % is a not
+                \ifpgf at circ@european at port@circle
+                    \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+                    \edef\pgf at temp{ocirc}
+                    \edef\pgf at circ@temp{\ctikzvalof{tripoles/european not shape}}
+                    \ifx\pgf at temp\pgf at circ@temp % it's ocirc
+                        \pgfmathsetlength{\pgf at x}{2*\ctikzvalof{nodes width}*\pgf at circ@Rlen}
+                    \else % it's ieee not circ
+                        \pgf at circ@notradius % defined together with ieeestd ports
+                        \pgf at x=2\pgf at circ@res at temp
+                    \fi
+                \else
+                    \pgf at x=0pt
+                \fi
+            \else
+                \pgf at x=0pt
+            \fi
+        }
+        \savedmacro\resize{% automatic
+            \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            \pgf at circ@res at up = \ctikzvalof{tripoles/european #1 port/height}\pgf at circ@scaled at Rlen
+            \pgf at circ@res at up = .5\pgf at circ@res at up
+            \pgf at circ@res at down = -\pgf at circ@res at up
+            \pgf at circ@res at right = \ctikzvalof{tripoles/european #1 port/width}\pgf at circ@scaled at Rlen
+            \pgf at circ@res at right = .5\pgf at circ@res at right
+            \pgf at circ@res at left = -\pgf at circ@res at right
+        }%
+        \savedmacro\inputs{% get number of inputs
+            \pgf at circ@res at count=\pgfkeysvalueof{/tikz/number inputs}\relax%
+            \ifnum\pgf at circ@res at count=0
+                \pgf at circ@res at count=\ctikzvalof{tripoles/european #1 port/inputs}\relax%
+            \fi
+        \ifnum\pgf at circ@res at count<2 \pgf at circ@res at count=2\fi
+    \ifnum\pgf at circ@res at count>16 \pgf at circ@res at count=16\fi
+        \def\inputs{\the\pgf at circ@res at count}%
+    }%
+    \savedanchor\step{% 1/2 gap at edges
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at circ@res at step = \ctikzvalof{tripoles/european #1 port/height}\pgf at circ@scaled at Rlen
+        \divide\pgf at circ@res at step by #3
+        \pgfpoint{\pgf at circ@res at left}{\dimexpr\pgf at circ@res at up+0.5\pgf at circ@res at step}%
+    }%
+    \savedanchor\northeast{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}%
+    \savedanchor\southwest{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}%
+    \savedanchor\left{\pgfpoint{\ctikzvalof{tripoles/european #1 port/reserved}\pgf at circ@res at left}{0pt}}%
+    \savedanchor\right{\pgfpoint{\ctikzvalof{tripoles/european #1 port/reserved}\pgf at circ@res at right}{0pt}}%
+    \savedanchor\origin{\pgfpoint{\ctikzvalof{tripoles/european #1 port/origin}\pgf at circ@res at right}{0pt}}%
+
+    \anchor{center}{\origin}% for backwards compatibility
+    % the text anchor overlaps the logic symbol
+    \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}%
+    % create input anchors
+    \ifnum#3=1\relax
+        \anchor{in}{\southwest\pgfpoint{\pgf at x}{0pt}}% or \step
+        \anchor{in 1}{\southwest\pgfpoint{\pgf at x}{0pt}}% or \step
+        \anchor{bin}{\left\pgfpoint{\pgf at x}{0pt}}% or \step
+        \anchor{bin 1}{\left\pgfpoint{\pgf at x}{0pt}}% or \step
+    \else
+        \expandafter\pgfutil at g@addto at macro\csname pgf at sh@s at european #1 port\endcsname{%
+            \pgfmathloop%
+            \ifnum\pgfmathcounter>#3%
+        \else%
+            %\pgfutil at ifundefined{pgf at anchor@european #1 port at in \pgfmathcounter}{% redundant
+            \expandafter\xdef\csname pgf at anchor@european #1 port at in \pgfmathcounter\endcsname{%
+                \noexpand\pgf at circ@logicport at input{\pgfmathcounter}% defined above
+            }%
+            \expandafter\xdef\csname pgf at anchor@european #1 port at bin \pgfmathcounter\endcsname{%
+                \noexpand\pgf at circ@logicport at baseinput{\pgfmathcounter}{4}{#1}% defined above
+            }%
+            %}{}%
+            \repeatpgfmathloop%
+        }
+    \fi
+    \anchor{out}{\northeast\pgf at y=0pt}
+    \anchor{bout}{\right\advance\pgf at x by \boutshift\pgf at y=0pt}
+
+    \anchor{left}{\left}% edges of component minus leads
+    \anchor{right}{\right\advance\pgf at x by \boutshift\pgf at y=0pt}
+
+    \anchor{north east}{\northeast}% see \Compass macro
+    \anchor{south west}{\southwest}
+    \anchor{north}{\pgfextracty{\pgf at circ@res at up}{\northeast}%
+    \pgfpoint{0cm}{\pgf at circ@res at up}}
+    \anchor{north west}{\pgfextracty{\pgf at circ@res at up}{\northeast}%
+        \pgfextractx{\pgf at circ@res at left}{\southwest}%
+    \pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+    \anchor{west}{\pgfextractx{\pgf at circ@res at left}{\southwest}%
+    \pgfpoint{\pgf at circ@res at left}{0cm}}
+    \anchor{south}{\pgfextracty{\pgf at circ@res at down}{\southwest}%
+    \pgfpoint{0cm}{\pgf at circ@res at down}}
+    \anchor{south east}{\pgfextracty{\pgf at circ@res at down}{\southwest}%
+        \pgfextractx{\pgf at circ@res at right}{\northeast}%
+    \pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \anchor{east}{\pgfextractx{\pgf at circ@res at right}{\northeast}%
+    \pgfpoint{\pgf at circ@res at right}{0cm}}
+
+    \anchorborder{% this is used when the node is used as a path element
+        \pgf at xa=\pgf at x
+        \pgf at ya=\pgf at y
+        \pgfextracty{\pgf at circ@res at up}{\northeast}
+        \pgfextractx{\pgf at circ@res at right}{\northeast}
+        \pgfpointborderrectangle{\pgfpoint{\pgf at xa}{\pgf at ya}}
+            {\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    }
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+        \pgfstartlinewidth=\pgflinewidth
+        \pgfscope
+            \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+            \pgfpathrectanglecorners
+            {\pgfpoint{\ctikzvalof{tripoles/european #1 port/reserved}\pgf at circ@res at left}{\pgf at circ@res at up}}
+            {\pgfpoint{\ctikzvalof{tripoles/european #1 port/reserved}\pgf at circ@res at right}{\pgf at circ@res at down}}
+            \pgf at circ@draworfill
+        \endpgfscope
+        \ifpgfcirc at draw@input at leads
+            %input leads
+            \ifnum#3=1\relax
+                \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}%
+                \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/european #1 port/reserved}\pgf at circ@res at left}{0pt}}%
+            \else
+                \pgfextracty{\pgf at circ@res at temp}{\step}%
+                \pgf at circ@res at step = \dimexpr 2\pgf at circ@res at temp -2\pgf at circ@res at up\relax
+                %\pgf at circ@res at count = #3\relax% redundant
+                \loop\ifnum\pgf at circ@res at count>0
+                    \advance\pgf at circ@res at temp by -\pgf at circ@res at step
+                    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at temp}}%
+                    \pgfpathlineto{\pgfpoint
+                        {\ctikzvalof{tripoles/european #1 port/reserved}\pgf at circ@res at left}
+                    {\pgf at circ@res at temp}}
+                    \advance\pgf at circ@res at count by -1
+                \repeat
+            \fi
+            \pgfusepath{draw}
+        \fi
+        %
+        \ifpgfcirc at draw@output at leads
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+            \pgfpathlineto{ \pgfpoint{\ctikzvalof{tripoles/european #1 port/reserved}\pgf at circ@res at right}{0pt}}
+            \pgfusepath{draw}
+        \fi
+        %
+        \edef\pgf at temp{not}
+        \edef\pgf at circ@temp{#4}
+        \ifx\pgf at temp\pgf at circ@temp % is a not
+            \ifpgf at circ@european at port@circle
+                \pgfscope
+                    \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+                    \pgftransformxshift{\ctikzvalof{tripoles/european #1 port/reserved}\pgf at circ@res at right}
+                    % reset  linewidth for IEEE ports, otherwise they will multiply...
+                    \ifpgf at circ@european at port@circle at ieee\pgfsetlinewidth{\pgfstartlinewidth}\fi
+                    \pgfnode{\ctikzvalof{tripoles/european not shape}}{west}{}{NOT}{\pgfusepath{stroke}}
+                \endpgfscope
+            \else
+                \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/european #1 port/not width}\pgf at circ@res at right}{0pt}}
+                \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/european #1 port/reserved}\pgf at circ@res at right}%
+                {\ctikzvalof{tripoles/european #1 port/not height}\pgf at circ@res at up}}
+                \pgfusepath{draw}
+            \fi
+        \fi
+        %
+        \pgfpathmoveto{\pgfpointorigin}
+        \pgftext{#2}
+        }
+    }
+}
+\pgfcircdeclareeurologicport{and}{\&}{\pgf at circ@res at count}{}
+\pgfcircdeclareeurologicport{or}{$\ge 1$}{\pgf at circ@res at count}{}
+\pgfcircdeclareeurologicport{xor}{$=1$}{\pgf at circ@res at count}{}
+\pgfcircdeclareeurologicport{not}{$1$}{1}{not}
+\pgfcircdeclareeurologicport{buffer}{$1$}{1}{}
+\pgfcircdeclareeurologicport{nand}{\&}{\pgf at circ@res at count}{not}
+\pgfcircdeclareeurologicport{nor}{$\ge 1$}{\pgf at circ@res at count}{not}
+\pgfcircdeclareeurologicport{xnor}{$=1$}{\pgf at circ@res at count}{not}
+
+%% end european logic ports
+
+%%%%%%%%%%%%%%%%%%%%%%%%
+%% Transistors
+%%%%%%%%%%%%%%%%%%%%%%%%
+
+%
+% definitions for transistor circles
+%
+\ctikzset{transistor circle/.is family}
+\ctikzset{transistor circle/relative thickness/.initial=1}
+\ctikzset{transistor circle/color/.initial=default}
+\ctikzset{transistor circle/dash/.initial=none}
+\ctikzset{transistor circle/scale circle radius/.initial=1}
+\ctikzset{transistor circle/default base in/.initial=0.9}
+\ctikzset{transistor circle/njfet base in/.initial=1.05}
+\ctikzset{transistor circle/pjfet base in/.initial=1.05}
+\ctikzset{transistor circle/isfet base in/.initial=0.65}
+
+\newif\ifpgf at circ@trcircle\pgf at circ@trcirclefalse
+\ctikzset{tr circle/.is if=pgf at circ@trcircle}
+\tikzset{tr circle/.is if=pgf at circ@trcircle}
+%
+% add a circle to the transistor:
+%
+\def\pgfcirc at transistorcircle{
+    \ifpgf at circ@trcircle
+    \pgfscope
+        \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+        \pgfsetlinewidth{\ctikzvalof{transistor circle/relative thickness}\pgflinewidth}
+        \edef\@@none{none}\edef\@@default{default}
+        \edef\@@tmp{\ctikzvalof{transistor circle/color}}
+        \ifx\@@tmp\@@default\else
+            \pgfsetcolor{\@@tmp}
+        \fi
+        \edef\@@tmp{\ctikzvalof{transistor circle/dash}}
+        \ifx\@@tmp\@@none\else
+            \expandafter\pgfsetdash\expandafter{\@@tmp}{0cm}
+        \fi
+        % radius of the circle
+        % \pgfmathsetlength{\pgf at circ@res at temp}{((#2+\extrabodydiodelen)-(#1)+(#3)*(#3)/((#2+\extrabodydiodelen)-(#1)))/2}
+        % \pgfpathcircle{\pgfpoint{#1+\pgf at circ@res at temp}{0pt}}{\pgf at circ@res at temp}
+        \pgfpathcircle{\pgfpoint{\circleleft+\circleradius}{0pt}}{\circleradius}
+        \pgf at circ@draworfill
+    \endpgfscope
+    \fi
+}
+
+\long\def\pgfcircdeclaretransistor#1#2#3{
+    \pgfdeclareshape{#1}
+    {
+        \savedmacro{\ctikzclass}{\edef\ctikzclass{transistors}}
+        \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+        \savedmacro{\circlebase}{
+            \pgfkeysifdefined{\circuitikzbasekey/transistor circle/#1 base in}%
+            {% yes, we have it
+                \edef\circlebase{\ctikzvalof{transistor circle/#1 base in}}%
+            }{% no, use default
+                \edef\circlebase{\ctikzvalof{transistor circle/default base in}}
+            }}
+        % \savedmacro{\thistypeoftr}{\edef\thistypeoftr{#1}}
+        \saveddimen{\extrabodydiodelen}{
+            \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            \ifpgf at circuit@fet at bodydiode
+                % try to put the text to the right of the flyback diode
+                \pgfmathsetlength{\pgf at x}{(
+                    \ctikzvalof{tripoles/#1/bodydiode distance}*
+                    \ctikzvalof{tripoles/#1/width} +
+                    \ctikzvalof{tripoles/#1/bodydiode scale}*
+                    \ctikzvalof{bipoles/diode/height}/2
+                )*\pgf at circ@scaled at Rlen}
+            \else
+                \pgf at x=0pt\relax
+            \fi
+        }
+        \savedmacro{\scaecircleradius}{
+            \edef\scalecircleradius{\ctikzvalof{transistor circle/scale circle radius}}
+        }
+        \saveddimen{\circleradius}{
+            \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            % repeat the extrabodydiodelen (grrr)
+            \ifpgf at circuit@fet at bodydiode
+                % try to put the text to the right of the flyback diode
+                \pgfmathsetlength{\pgf at circ@res at other}{(
+                    \ctikzvalof{tripoles/#1/bodydiode distance}*
+                    \ctikzvalof{tripoles/#1/width} +
+                    \ctikzvalof{tripoles/#1/bodydiode scale}*
+                    \ctikzvalof{bipoles/diode/height}/2
+                )*\pgf at circ@scaled at Rlen}
+            \else
+                \pgf at circ@res at other=0pt\relax
+            \fi
+            % left
+            \pgf at xa=-\ctikzvalof{tripoles/#1/width}\pgf at circ@scaled at Rlen
+            \pgf at xa=\circlebase\pgf at xa % this is the base point of the circle
+            % northeast
+            \pgf at yb=\ctikzvalof{tripoles/#1/height}\pgf at circ@scaled at Rlen % y of the left point of circle
+            \pgf at yb=.5\pgf at yb
+            \pgf at xb=\pgf at circ@res at other % this is the x of the right points of the circle
+            %
+            \pgf at yb=\ctikzvalof{tripoles/#1/bodydiode conn}\pgf at yb %this is #3 of the circle
+            % find the radius of the circle
+            \pgfmathsetlength{\pgf at x}{((\pgf at xb)-(\pgf at xa)+(\pgf at yb)*(\pgf at yb)/((\pgf at xb)-(\pgf at xa)))/2*\scalecircleradius}
+        }
+        \saveddimen{\circleleft}{
+            \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            \pgf at xa=-\ctikzvalof{tripoles/#1/width}\pgf at circ@scaled at Rlen
+            \pgf at x=\circlebase\pgf at xa
+        }
+        \anchor{circle center}{
+            \pgf at y=0pt\pgf at x=\circleleft\advance\pgf at x by\circleradius
+        }
+        \anchor{center}{
+            \pgfpointorigin
+        }
+        \savedanchor\northeast{% upper right
+            \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            \pgf at y=\ctikzvalof{tripoles/#1/height}\pgf at circ@scaled at Rlen
+            \pgf at y=.5\pgf at y
+            \pgf at x=0pt
+        }
+        \savedanchor\left{%center left
+            \pgf at y=0pt
+            \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            \pgf at x=-\ctikzvalof{tripoles/#1/width}\pgf at circ@scaled at Rlen
+        }
+        \savedanchor\right{%center right -- added by Burak Kelleci % this is really 0,0
+            \pgf at y=0pt
+            \pgf at x=0pt
+        }
+        \anchor{text}{
+            \northeast
+            \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            \ifpgf at circuit@transisors at fixlabels
+                \ifpgf at circuit@fet at bodydiode
+                    \advance \pgf at x by \extrabodydiodelen
+                \fi
+                \ifpgf at circ@trcircle
+                    \left\pgf at xa=\pgf at x
+                    \pgfmathsetlength{\pgf at x}{\circleleft+2*\circleradius}
+                    % \advance \pgf at x by \circleradius
+                \fi
+                % add a bit of space to avoid central (substrate) terminal if drawn
+                \advance\pgf at x by 0.05\pgf at circ@scaled at Rlen\relax
+                \pgf at y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+            \else
+                \pgf at y=.7\pgf at y
+                \pgf at x= \pgf at circ@scaled at Rlen
+                \pgf at x=0.1\pgf at x
+            \fi
+        }
+        \anchor{pathstart}{ % south
+            \northeast
+            \pgf at y=-\pgf at y
+        }
+        \anchor{pathend}{
+            \northeast
+        }
+        \anchor{north}{
+            \northeast
+            \pgf at circ@res at step=\pgf at y
+            \left
+            \pgf at y=\pgf at circ@res at step
+            \pgf at x=.5\pgf at x
+        }
+        \anchor{west}{
+            \left
+        }
+        \anchor{east}{
+            \northeast
+            \pgf at y=0pt
+        }
+        \anchor{south}{
+            \northeast
+            \pgf at circ@res at step=\pgf at y
+            \left
+            \pgf at y=-\pgf at circ@res at step
+            \pgf at x=.5\pgf at x
+        }
+        \anchor{south west}{
+            \northeast
+            \pgf at circ@res at step=\pgf at y
+            \left
+            \pgf at y=-\pgf at circ@res at step
+        }
+        \anchor{north east}{
+            \northeast
+        }
+        \anchor{north west}{
+            \northeast
+            \pgf at circ@res at step=\pgf at y
+            \left
+            \pgf at y=\pgf at circ@res at step
+        }
+        \anchor{south east}{
+            \northeast
+            \pgf at y=-\pgf at y
+        }
+        \anchor{B}{
+            \northeast
+            \pgf at circ@res at step=\ctikzvalof{tripoles/#1/conn height}\pgf at y
+            \left
+            \pgf at y=-\ctikzvalof{tripoles/#1/curr direction}\pgf at circ@res at step
+        }
+        \anchor{base}{
+            \northeast
+            \pgf at circ@res at step=\ctikzvalof{tripoles/#1/conn height}\pgf at y
+            \left
+            \pgf at y=-\ctikzvalof{tripoles/#1/curr direction}\pgf at circ@res at step
+        }
+        \anchor{bulk}{ %added by Burak Kelleci
+            \northeast
+            \pgf at circ@res at step=\ctikzvalof{tripoles/#1/conn height}\pgf at y
+            \right
+            \pgf at y=-\ctikzvalof{tripoles/#1/curr direction}\pgf at circ@res at step
+        }
+        \anchor{nobulk}{ %added by Burak Kelleci
+            \left
+            \pgf at x=\ctikzvalof{tripoles/#1/base width}\pgf at x
+        }
+        \anchor{G}{
+            \northeast
+            \pgf at circ@res at step=\ctikzvalof{tripoles/#1/conn height}\pgf at y
+            \left
+            \pgf at y=-\ctikzvalof{tripoles/#1/curr direction}\pgf at circ@res at step
+        }
+        \anchor{gate}{
+            \northeast
+            \pgf at circ@res at step=\ctikzvalof{tripoles/#1/conn height}\pgf at y
+            \left
+            \pgf at y=-\ctikzvalof{tripoles/#1/curr direction}\pgf at circ@res at step
+        }
+        \anchor{nobase}{
+            \left
+            \pgf at x=\ctikzvalof{tripoles/#1/base width}\pgf at x
+        }
+        \anchor{circle base}{
+            \left
+            \pgf at x=\circlebase\pgf at x
+        }
+        \anchor{nogate}{
+            \left
+            \pgf at x=\ctikzvalof{tripoles/#1/gate width}\pgf at x
+        }
+        \anchor{E}{
+            \northeast
+            \pgf at y=-\ctikzvalof{tripoles/#1/curr direction}\pgf at y
+        }
+        \anchor{emitter}{
+            \northeast
+            \pgf at y=-\ctikzvalof{tripoles/#1/curr direction}\pgf at y
+        }
+        \anchor{C}{
+            \northeast
+            \pgf at y=\ctikzvalof{tripoles/#1/curr direction}\pgf at y
+        }
+        \anchor{collector}{
+            \northeast
+            \pgf at y=\ctikzvalof{tripoles/#1/curr direction}\pgf at y
+        }
+        \anchor{S}{
+            \northeast
+            \pgf at y=-\ctikzvalof{tripoles/#1/curr direction}\pgf at y
+        }
+        \anchor{source}{
+            \northeast
+            \pgf at y=-\ctikzvalof{tripoles/#1/curr direction}\pgf at y
+        }
+        \anchor{D}{
+            \northeast
+            \pgf at y=\ctikzvalof{tripoles/#1/curr direction}\pgf at y
+        }
+        \anchor{drain}{
+            \northeast
+            \pgf at y=\ctikzvalof{tripoles/#1/curr direction}\pgf at y
+        }
+        \anchor{body C in}{
+            \northeast
+            \pgf at y=\ctikzvalof{tripoles/#1/curr direction}\pgf at y
+            \pgf at y=\ctikzvalof{tripoles/#1/bodydiode conn}\pgf at y
+        }
+        \anchor{circle C}{
+            \left
+            \pgf at xa=\circlebase\pgf at x % this is #1 of the circle
+            \northeast
+            \pgf at xb=\pgf at x %this is #2 of the circle
+            \pgf at yb=\ctikzvalof{tripoles/#1/bodydiode conn}\pgf at y %this is #3 of the circle
+            % the base of the triangle is x_2 - x_1 - r
+            \pgfmathsetlength{\pgf at circ@res at other}{\pgf at xb-\pgf at xa-\circleradius}
+            % so let's go with the height
+            \pgfmathsetlength{\pgf at ya}{sqrt(abs(\circleradius*\circleradius-\pgf at circ@res at other*\pgf at circ@res at other))}
+            % finally, direction
+            \pgf at y=\ctikzvalof{tripoles/#1/curr direction}\pgf at ya
+        }
+        \anchor{circle E}{
+            \left
+            \pgf at xa=\circlebase\pgf at x % this is #1 of the circle
+            \northeast
+            \pgf at xb=\pgf at x %this is #2 of the circle
+            \pgf at yb=\ctikzvalof{tripoles/#1/bodydiode conn}\pgf at y %this is #3 of the circle
+            % the base of the triangle is x_2 - x_1 - r
+            \pgfmathsetlength{\pgf at circ@res at other}{\pgf at xb-\pgf at xa-\circleradius}
+            % so let's go with the height
+            \pgfmathsetlength{\pgf at ya}{sqrt(abs(\circleradius*\circleradius-\pgf at circ@res at other*\pgf at circ@res at other))}
+            % finally, direction
+            % finally, direction
+            \pgf at y=-\ctikzvalof{tripoles/#1/curr direction}\pgf at ya
+        }
+        \anchor{body E in}{
+            \northeast
+            \pgf at y=-\ctikzvalof{tripoles/#1/curr direction}\pgf at y
+            \pgf at y=\ctikzvalof{tripoles/#1/bodydiode conn}\pgf at y
+        }
+        \anchor{body C out}{
+            \northeast
+            \pgf at ya=\ctikzvalof{tripoles/#1/curr direction}\pgf at y
+            \pgf at ya=\ctikzvalof{tripoles/#1/bodydiode conn}\pgf at ya
+            \pgf at y=\pgf at ya
+            \left
+            \pgf at x=-\ctikzvalof{tripoles/#1/bodydiode distance}\pgf at x
+            \pgf at y=\pgf at ya
+        }
+        \anchor{body E out}{
+            \northeast
+            \pgf at ya=-\ctikzvalof{tripoles/#1/curr direction}\pgf at y
+            \pgf at ya=\ctikzvalof{tripoles/#1/bodydiode conn}\pgf at ya
+            \pgf at y=\pgf at ya
+            \left
+            \pgf at x=-\ctikzvalof{tripoles/#1/bodydiode distance}\pgf at x
+            \pgf at y=\pgf at ya
+        }
+        #2
+        \backgroundpath{
+            \pgftransformationadjustments
+            \pgfsetcolor{\ctikzvalof{color}}
+            %
+            \ifnum \ctikzvalof{tripoles/#1/curr direction} > 0
+            \pgf at circuit@trans at ntypetrue
+            \else
+            \pgf at circuit@trans at ntypefalse
+        \fi
+        \northeast
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at right = \pgf at x
+        \left
+        \pgf at circ@res at left = \pgf at x
+        \pgf at circ@scaled at Rlen=\scaledRlen
+        %
+        #3
+        % BODY DIODE
+        \ifpgf at circuit@fet at bodydiode
+            \drawbodydiode{#1}
+        \fi
+        %
+    }
+}
+}
+
+\long\def\drawbodydiode#1{
+    \pgfscope
+        \pgftransformshift{\pgfpoint{-\ctikzvalof{tripoles/#1/bodydiode distance}\pgf at circ@res at left}{\pgf at circ@res at up+\pgf at circ@res at down}}
+        \pgftransformrotate{90}
+        % diode scale and bodydiode scale interacts. We want the size of the diode
+        % proportional to the transistor, so we will:
+        % 1) undo diode scale 2) apply transistor scale (using the current class) 3) apply bodydiode scale
+        \pgfmathsetmacro{\@@BDscale}{\ctikzvalof{tripoles/#1/bodydiode scale}* \ctikzvalof{\ctikzclass/scale}/\ctikzvalof{diodes/scale}}
+        \pgftransformscale{\@@BDscale}
+        \ifpgf at circuit@fulldiode
+            \pgfnode{fulldiodeshape}{center}{}{pgf at bodydiode}{\pgfusepath{fill}}
+        \else
+            \pgfnode{emptydiodeshape}{center}{}{pgf at bodydiode}{\pgfusepath{fill}}
+        \fi
+    \endpgfscope
+    % Draw stroke line
+    \ifpgf at circuit@strokediode
+        \pgfpathmoveto{\pgfpointanchor{pgf at bodydiode}{west}}
+        \pgfpathlineto{\pgfpointanchor{pgf at bodydiode}{east}}
+        \pgfusepath{stroke}
+    \fi
+    %Draw upper connection to body diode
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}
+    {\ctikzvalof{tripoles/#1/bodydiode conn}\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{-\ctikzvalof{tripoles/#1/bodydiode distance}\pgf at circ@res at left}
+    {\ctikzvalof{tripoles/#1/bodydiode conn}\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpointanchor{pgf at bodydiode}{east}}
+    \pgfusepath{draw}
+    \pgfscope
+        \pgftransformshift{\pgfpoint{\pgf at circ@res at right}
+        {\ctikzvalof{tripoles/#1/bodydiode conn}\pgf at circ@res at up}}
+        \pgftransformscale{0.5}
+        \pgfnode{circ}{center}{}{}{\pgfusepath{fill}}
+    \endpgfscope{}
+    %Draw lower connection to body diode
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}
+    {\ctikzvalof{tripoles/#1/bodydiode conn}\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{-\ctikzvalof{tripoles/#1/bodydiode distance}\pgf at circ@res at left}{\ctikzvalof{tripoles/#1/bodydiode conn}\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpointanchor{pgf at bodydiode}{west}}
+    \pgfusepath{draw}
+    \pgfscope
+        \pgftransformshift{\pgfpoint{\pgf at circ@res at right}		        	       {\ctikzvalof{tripoles/#1/bodydiode conn}\pgf at circ@res at down}}
+        \pgftransformscale{0.5}
+        \pgfnode{circ}{center}{}{}{\pgfusepath{fill}}
+    \endpgfscope
+}
+
+\long\def\declarebpt#1{
+    \pgfcircdeclaretransistor{#1}{
+        \anchor{inner up}{
+            \northeast
+            \pgf at y=\ctikzvalof{tripoles/#1/base height}\pgf at y
+        }
+        \anchor{inner down}{
+            \northeast
+            \pgf at y=-\ctikzvalof{tripoles/#1/base height}\pgf at y
+        }
+        }{
+
+        % add the circle if requested (before everything else, so we can fill it)
+        \pgfcirc at transistorcircle
+
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+        {\ctikzvalof{tripoles/#1/base height}\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/#1/base height 2}\pgf at circ@res at up}}
+        \pgfusepath{draw}
+
+        % drawing base
+        \pgfscope
+            \pgfpathmoveto{\pgfpoint
+                {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/#1/base height}\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint
+                {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/#1/base height}\pgf at circ@res at down}}
+            \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+            \ifpgf at circuit@bpt at schottky
+                % upper
+                \pgfpathmoveto{\pgfpoint
+                    {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}
+                    {\ctikzvalof{tripoles/#1/base height}\pgf at circ@res at up}}
+                \pgfpathlineto{\pgfpoint
+                    {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}
+                    {\ctikzvalof{tripoles/#1/base height}\pgf at circ@res at up+
+                    \ctikzvalof{tripoles/schottky base size}\pgf at circ@scaled at Rlen}}
+                \pgfpathlineto{\pgfpoint
+                    {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left+
+                        \ctikzvalof{tripoles/schottky base size}\pgf at circ@scaled at Rlen}
+                    {\ctikzvalof{tripoles/#1/base height}\pgf at circ@res at up+
+                        \ctikzvalof{tripoles/schottky base size}\pgf at circ@scaled at Rlen}}
+                \pgfpathlineto{\pgfpoint
+                    {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left+
+                        \ctikzvalof{tripoles/schottky base size}\pgf at circ@scaled at Rlen}
+                    {\ctikzvalof{tripoles/#1/base height}\pgf at circ@res at up}}
+                % % lower
+                \pgfpathmoveto{\pgfpoint
+                    {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}
+                    {\ctikzvalof{tripoles/#1/base height}\pgf at circ@res at down}}
+                \pgfpathlineto{\pgfpoint
+                    {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}
+                    {\ctikzvalof{tripoles/#1/base height}\pgf at circ@res at down-
+                    \ctikzvalof{tripoles/schottky base size}\pgf at circ@scaled at Rlen}}
+                \pgfpathlineto{\pgfpoint
+                    {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left-
+                        \ctikzvalof{tripoles/schottky base size}\pgf at circ@scaled at Rlen}
+                    {\ctikzvalof{tripoles/#1/base height}\pgf at circ@res at down-
+                    \ctikzvalof{tripoles/schottky base size}\pgf at circ@scaled at Rlen}}
+                \pgfpathlineto{\pgfpoint
+                    {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left-
+                        \ctikzvalof{tripoles/schottky base size}\pgf at circ@scaled at Rlen}
+                    {\ctikzvalof{tripoles/#1/base height}\pgf at circ@res at down}}
+                \fi
+            \pgfusepath{draw}
+        \endpgfscope
+
+        \pgfpathmoveto{\pgfpoint
+            {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/#1/base height 2}\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+        {\ctikzvalof{tripoles/#1/base height}\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+        \pgfusepath{draw}
+        %draw arrow depending on type of transistor
+        \pgfscope
+            \pgfslopedattimetrue
+            \pgfallowupsidedownattimetrue
+            \pgfresetnontranslationattimefalse
+            \edef\@@anchor{center}
+            \ifpgf at circuit@trans at ntype
+                \ifpgf at circuit@trans at arrowatend
+                    \edef\@@anchor{btip}
+                    \pgftransformlineattime{1.0}{%
+                        \pgfpoint%
+                        {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}%
+                        {\ctikzvalof{tripoles/#1/base height 2}\pgf at circ@res at down}%
+                        }{%
+                        \pgfpoint{\pgf at circ@res at right}%
+                        {\ctikzvalof{tripoles/#1/base height}\pgf at circ@res at down}%
+                    }
+                \else
+                    \pgftransformlineattime{\ctikzvalof{tripoles/#1/arrow pos}}{%
+                        \pgfpoint%
+                        {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}%
+                        {\ctikzvalof{tripoles/#1/base height 2}\pgf at circ@res at down}%
+                        }{%
+                        \pgfpoint{\pgf at circ@res at right}%
+                        {\ctikzvalof{tripoles/#1/base height}\pgf at circ@res at down}%
+                    }
+                \fi
+            \else % p-type
+                \ifpgf at circuit@trans at arrowatend
+                    \edef\@@anchor{tip}
+                    \pgftransformlineattime{1.0}{%
+                        \pgfpoint{\pgf at circ@res at right}%
+                        {\ctikzvalof{tripoles/#1/base height}\pgf at circ@res at up}%
+                        }{%
+                        \pgfpoint{\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}%
+                        {\ctikzvalof{tripoles/#1/base height 2}\pgf at circ@res at up}%
+                    }
+                \else
+                    \pgftransformlineattime{\ctikzvalof{tripoles/#1/arrow pos}}{%
+                        \pgfpoint{\pgf at circ@res at right}%
+                        {\ctikzvalof{tripoles/#1/base height}\pgf at circ@res at up}%
+                        }{%
+                        \pgfpoint{\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}%
+                        {\ctikzvalof{tripoles/#1/base height 2}\pgf at circ@res at up}%
+                    }
+                \fi
+            \fi
+            \pgfnode{trarrow}{\@@anchor}{}{}{\pgfusepath{stroke}}
+        \endpgfscope
+
+        \ifpgf at circuit@bpt at drawphoto
+            \pgfscope
+                \pgfsetarrowsstart{latexslim}
+                \pgfpathmoveto{\pgfpointadd{\pgfpoint
+                        {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}
+                    {\pgf at circ@res at up+\pgf at circ@res at down}}
+                {\pgfpoint{0.05\pgf at circ@res at left}{0.1\pgf at circ@res at up}}}
+                \pgfpathlineto{\pgfpointadd{\pgfpoint
+                        {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}
+                    {\pgf at circ@res at up+\pgf at circ@res at down}}
+                {\pgfpoint{0.5\pgf at circ@res at left}{0.3\pgf at circ@res at up}}}
+                \pgfusepath{draw}
+                \pgfpathmoveto{\pgfpointadd{\pgfpoint
+                        {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}
+                    {\pgf at circ@res at up+\pgf at circ@res at down}}
+                {\pgfpoint{0.05\pgf at circ@res at left}{-0.1\pgf at circ@res at up}}}
+                \pgfpathlineto{\pgfpointadd{\pgfpoint
+                        {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}
+                    {\pgf at circ@res at up+\pgf at circ@res at down}}
+                {\pgfpoint{0.5\pgf at circ@res at left}{0.1\pgf at circ@res at up}}}
+                \pgfusepath{draw}
+            \endpgfscope
+            \else
+            \ifpgf at circuit@bpt at drawbase
+                \pgfpathmoveto{\pgfpoint
+                    {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}
+                {\pgf at circ@res at up+\pgf at circ@res at down}}
+                \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf at circ@res at up+\pgf at circ@res at down}}
+                \pgfusepath{draw}
+            \fi
+        \fi
+    }
+}
+
+\declarebpt{npn}
+\declarebpt{pnp}
+%
+% multi-emitter and multi-collector BJTs by Romano Giannetti
+%
+\def\pgf at circ@bjt at C@anchor#1{% #1: collector number
+    \pgfextractx{\pgf at circ@res at temp}{\basedimension}
+    \pgfextracty{\pgf at circ@res at other}{\basedimension}
+    \ifnum\cdir>0 % NPN, above
+        \pgfpoint{\pgf at circ@res at temp}{%
+        \pgf at circ@res at other+\pgfverticaltransformationadjustment*.5*\pgflinewidth+(#1-1)*\multistep}
+    \else % PNP, below
+        \pgfpoint{\pgf at circ@res at temp}{%
+        -\pgf at circ@res at other-\pgfverticaltransformationadjustment*.5*\pgflinewidth-(#1-1)*\multistep}
+    \fi
+}
+\def\pgf at circ@bjt at E@anchor#1{% #1: collector number
+    \pgfextractx{\pgf at circ@res at temp}{\basedimension}
+    \pgfextracty{\pgf at circ@res at other}{\basedimension}
+    \ifnum\cdir<0 % PNP, above
+        \pgfpoint{\pgf at circ@res at temp}{%
+        \pgf at circ@res at other+\pgfverticaltransformationadjustment*.5*\pgflinewidth+(#1-1)*\multistep}
+    \else % PNP, below
+        \pgfpoint{\pgf at circ@res at temp}{%
+        -\pgf at circ@res at other-\pgfverticaltransformationadjustment*.5*\pgflinewidth-(#1-1)*\multistep}
+    \fi
+}
+
+\long\def\declarebjt#1{
+    \pgfdeclareshape{bjt#1}{
+        \savedmacro{\ctikzclass}{\edef\ctikzclass{transistors}}
+        \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+        % \cdir is 1 for npn, -1 for pnp
+        \savedmacro{\cdir}{\edef\cdir{\ctikzvalof{tripoles/bjt/#1/curr direction}}}
+        \savedmacro{\numE}{\edef\numE{\ctikzvalof{tripoles/bjt/emitters}}}
+        \savedmacro{\numC}{\edef\numC{\ctikzvalof{tripoles/bjt/collectors}}}
+        % step up or down for the additional C/Es
+        \saveddimen{\multistep}{\pgfmathsetlength{\pgf at x}{%
+            \ctikzvalof{tripoles/bjt/height}*\ctikzvalof{tripoles/bjt/multi height}*
+            \ctikzvalof{\ctikzclass/scale}*\pgf at circ@Rlen}}
+        \saveddimen{\external}{\pgfmathsetlength{\pgf at x}{%
+            \ctikzvalof{tripoles/bjt/pins width}*\ctikzvalof{\ctikzclass/scale}*\pgf at circ@Rlen}}
+        \savedanchor\basedimension{% these are the dimensions if nC=1 y nE=1
+            \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            \pgf at y=\ctikzvalof{tripoles/bjt/height}\pgf at circ@scaled at Rlen
+            \pgf at y=.5\pgf at y
+            \pgf at x=\ctikzvalof{tripoles/bjt/width}\pgf at circ@scaled at Rlen
+            \pgf at x=.5\pgf at x
+        }
+        \savedanchor\northeast{% upper right
+            \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            \pgfmathsetlength{\pgf at circ@res at step}{%
+                \ctikzvalof{tripoles/bjt/height}*\ctikzvalof{tripoles/bjt/multi height}*
+                \ctikzvalof{\ctikzclass/scale}*\pgf at circ@Rlen}
+            \ifnum\cdir> 0
+                \edef\numup{\numC}\edef\numdown{\numE}
+            \else
+                \edef\numup{\numE}\edef\numdown{\numC}
+            \fi
+            \pgfmathsetlength{\pgf at y}{0.5*\ctikzvalof{tripoles/bjt/height}\pgf at circ@scaled at Rlen
+                + (\numup-1)*\pgf at circ@res at step+\pgfverticaltransformationadjustment*.5*\pgflinewidth
+                + \ctikzvalof{tripoles/bjt/pins width}*\ctikzvalof{\ctikzclass/scale}*\pgf at circ@Rlen}
+            \pgf at x=\ctikzvalof{tripoles/bjt/width}\pgf at circ@scaled at Rlen
+            \pgf at x=.5\pgf at x
+        }
+        \savedanchor\southeast{% lower right
+            \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            \pgfmathsetlength{\pgf at circ@res at step}{%
+                \ctikzvalof{tripoles/bjt/height}*\ctikzvalof{tripoles/bjt/multi height}*
+                \ctikzvalof{\ctikzclass/scale}*\pgf at circ@Rlen}
+            \ifnum\cdir> 0
+                \edef\numup{\numC}\edef\numdown{\numE}
+            \else
+                \edef\numup{\numE}\edef\numdown{\numC}
+            \fi
+            \pgfmathsetlength{\pgf at y}{-0.5*\ctikzvalof{tripoles/bjt/height}\pgf at circ@scaled at Rlen
+                - (\numdown-1)*\pgf at circ@res at step-\pgfverticaltransformationadjustment*.5*\pgflinewidth
+                - \ctikzvalof{tripoles/bjt/pins width}*\ctikzvalof{\ctikzclass/scale}*\pgf at circ@Rlen}
+            \pgf at x=\ctikzvalof{tripoles/bjt/width}\pgf at circ@scaled at Rlen
+            \pgf at x=.5\pgf at x
+        }
+        \savedanchor\southwest{% lower left
+            \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            \pgfmathsetlength{\pgf at circ@res at step}{%
+                \ctikzvalof{tripoles/bjt/height}*\ctikzvalof{tripoles/bjt/multi height}*
+                \ctikzvalof{\ctikzclass/scale}*\pgf at circ@Rlen}
+            \ifnum\cdir> 0
+                \edef\numup{\numC}\edef\numdown{\numE}
+            \else
+                \edef\numup{\numE}\edef\numdown{\numC}
+            \fi
+            \pgfmathsetlength{\pgf at y}{-0.5*\ctikzvalof{tripoles/bjt/height}\pgf at circ@scaled at Rlen
+                - (\numdown-1)*\pgf at circ@res at step-\pgfverticaltransformationadjustment*.5*\pgflinewidth
+                - \ctikzvalof{tripoles/bjt/pins width}*\ctikzvalof{\ctikzclass/scale}*\pgf at circ@Rlen}
+            \pgfmathsetlength{\pgf at x}{-0.5*\ctikzvalof{tripoles/bjt/width}*\pgf at circ@scaled at Rlen
+                - \ctikzvalof{tripoles/bjt/pins width}*\ctikzvalof{\ctikzclass/scale}*\pgf at circ@Rlen}
+        }
+        \anchor{center}{\pgfpointorigin}
+        \anchor{north}{\northeast\pgf at x=0cm\relax}
+        \anchor{east}{\northeast\pgf at y=0cm\relax}
+        \anchor{south}{\southwest\pgf at x=0cm\relax}
+        \anchor{west}{\southwest\pgf at y=0cm}
+        \anchor{north east}{\northeast}
+        \anchor{north west}{\northeast\pgf at ya=\pgf at y\southwest\pgf at y=\pgf at ya}
+        \anchor{south west}{\southwest}
+        \anchor{south east}{\southeast}
+
+        \anchor{text}{\northeast\pgf at y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax}
+        \anchor{B}{\northeast\pgf at y=0cm\pgf at x=-\pgf at x\advance\pgf at x by -\external}
+        \anchor{base}{\basedimension\pgf at y=0cm\pgf at x=-\pgf at x\advance\pgf at x by -\external}
+        \anchor{nobase}{\basedimension\pgf at y=0cm\pgf at x=-\pgf at x}
+        % center of the base "bar"
+        \anchor{cbase}{\basedimension\pgf at x=-\pgf at x
+            \pgfmathsetlength{\pgf at y}{\cdir*(\numC-\numE)*\multistep/2}%
+        }
+        % geometrical centers
+        \anchor{vcenter}{\pgf at x=0cm\relax
+            \pgfmathsetlength{\pgf at y}{\cdir*(\numC-\numE)*\multistep/2}%
+        }
+        \anchor{gcenter}{%
+            \northeast\pgf at xa=0.5\pgf at x
+            \southwest\advance\pgf at xa by 0.5\pgf at x
+            \pgf at x=\pgf at xa
+            \pgfmathsetlength{\pgf at y}{\cdir*(\numC-\numE)*\multistep/2}%
+        }
+        % external connections
+        \anchor{E}{
+            \ifnum\cdir>0% npn, emitter down
+            \southeast
+            \else
+            \northeast
+            \fi
+        }% first emitter
+        \anchor{emitter}{\ifnum\cdir>0\southeast\else\northeast\fi}% first emitter
+        \anchor{C}{\ifnum\cdir<0\southeast\else\northeast\fi}
+        \anchor{collector}{\ifnum\cdir<0\southeast\else\northeast\fi}
+
+        \backgroundpath{
+            \pgftransformationadjustments
+            \pgfsetcolor{\ctikzvalof{color}}
+            %
+            % set the type and up and down number of connections
+            %
+            \ifnum\cdir> 0
+                \pgf at circuit@trans at ntypetrue
+                \edef\numup{\numC}
+                \edef\numdown{\numE}
+            \else
+                \pgf at circuit@trans at ntypefalse
+                \edef\numup{\numE}
+                \edef\numdown{\numC}
+            \fi
+            \basedimension
+            \pgf at circ@res at up = \pgf at y
+            \pgf at circ@res at down = -\pgf at y
+            \pgf at circ@res at right = \pgf at x
+            \pgf at circ@res at left = -\pgf at x
+            \pgf at circ@scaled at Rlen=\scaledRlen
+            \pgf at circ@res at step=\multistep
+            %
+            % set arrow positions options
+            %
+            \edef\@@anchor{center}\edef\@@pos{\ctikzvalof{tripoles/#1/arrow pos}}
+            \ifpgf at circuit@trans at arrowatend
+                \edef\@@pos{1.0}
+                \ifpgf at circuit@trans at ntype % arrow is toward outside, push it a bit
+                    \edef\@@anchor{btip}
+                \else
+                    \edef\@@anchor{tip}
+                \fi
+            \fi
+            %
+            % Drawing upper connections
+            %
+            \pgfscope
+            \pgf at circ@count at a=\numup\relax
+            \pgfmathloop%
+            \ifnum\pgf at circ@count at a>0
+            \advance\pgf at circ@count at a-1\relax
+            \pgfmathsetlength{\pgf at circ@res at other}{\the\pgf at circ@count at a*\multistep}%
+            \ifnum\pgf at circ@count at a=\numexpr\numup-1\relax % draw the external pin connection
+            \pgfpathmoveto{\pgfpoint
+                {\pgf at circ@res at right}%
+                {\pgf at circ@res at up+\external+\pgfverticaltransformationadjustment*.5*\pgflinewidth+\pgf at circ@res at other}}%
+            \pgfpathlineto{\pgfpoint
+                {\pgf at circ@res at right}%
+                {\pgf at circ@res at up+\pgfverticaltransformationadjustment*.5*\pgflinewidth+\pgf at circ@res at other}}%
+            \else
+            \pgfpathmoveto{\pgfpoint
+                {\pgf at circ@res at right}%
+                {\pgf at circ@res at up+\pgfverticaltransformationadjustment*.5*\pgflinewidth+\pgf at circ@res at other}}%
+            \fi
+            \pgfpathlineto{\pgfpoint
+                {\ctikzvalof{tripoles/bjt/base width}\pgf at circ@res at left}%
+                {\ctikzvalof{tripoles/bjt/base height 2}\pgf at circ@res at up+\pgf at circ@res at other}}%
+            \pgfsetroundcap % better when connecting to sloped lines
+            \pgfusepath{draw}
+            \ifpgf at circuit@trans at ntype\else % it's a PNP; draw arrow
+            \pgfscope
+                \pgfslopedattimetrue
+                \pgfallowupsidedownattimetrue
+                \pgfresetnontranslationattimefalse
+                \pgftransformlineattime{\@@pos}{%
+                    \pgfpoint
+                        {\pgf at circ@res at right}%
+                        {\pgf at circ@res at up+\pgfverticaltransformationadjustment*.5*\pgflinewidth+\pgf at circ@res at other}%
+                    }{\pgfpoint
+                        {\ctikzvalof{tripoles/bjt/base width}\pgf at circ@res at left}%
+                        {\ctikzvalof{tripoles/bjt/base height 2}\pgf at circ@res at up+\pgf at circ@res at other}%
+                    }
+                    \pgfnode{trarrow}{\@@anchor}{}{}{\pgfusepath{stroke}}
+            \endpgfscope
+            \fi
+            \repeatpgfmathloop
+            \endpgfscope
+            %
+            % Drawing base
+            %
+            \pgfscope
+                \pgfpathmoveto{\pgfpoint
+                    {\ctikzvalof{tripoles/bjt/base width}\pgf at circ@res at left}
+                    {\ctikzvalof{tripoles/bjt/base height}\pgf at circ@res at up+(\numup-1)*\multistep}}
+                \pgfpathlineto{\pgfpoint
+                    {\ctikzvalof{tripoles/bjt/base width}\pgf at circ@res at left}
+                    {\ctikzvalof{tripoles/bjt/base height}\pgf at circ@res at down-(\numdown-1)*\multistep}}
+                \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+                \ifpgf at circuit@bpt at schottky
+                    % upper
+                    \pgfpathmoveto{\pgfpoint
+                        {\ctikzvalof{tripoles/bjt/base width}\pgf at circ@res at left}
+                        {\ctikzvalof{tripoles/bjt/base height}\pgf at circ@res at up+(\numup-1)*\multistep}}
+                    \pgfpathlineto{\pgfpoint
+                        {\ctikzvalof{tripoles/bjt/base width}\pgf at circ@res at left}
+                        {\ctikzvalof{tripoles/bjt/base height}\pgf at circ@res at up+(\numup-1)*\multistep+
+                        \ctikzvalof{tripoles/schottky base size}\pgf at circ@scaled at Rlen}}
+                    \pgfpathlineto{\pgfpoint
+                        {\ctikzvalof{tripoles/bjt/base width}\pgf at circ@res at left+
+                            \ctikzvalof{tripoles/schottky base size}\pgf at circ@scaled at Rlen}
+                        {\ctikzvalof{tripoles/bjt/base height}\pgf at circ@res at up+(\numup-1)*\multistep+
+                            \ctikzvalof{tripoles/schottky base size}\pgf at circ@scaled at Rlen}}
+                    \pgfpathlineto{\pgfpoint
+                        {\ctikzvalof{tripoles/bjt/base width}\pgf at circ@res at left+
+                            \ctikzvalof{tripoles/schottky base size}\pgf at circ@scaled at Rlen}
+                        {\ctikzvalof{tripoles/bjt/base height}\pgf at circ@res at up+(\numup-1)*\multistep}}
+                    % lower
+                    \pgfpathmoveto{\pgfpoint
+                        {\ctikzvalof{tripoles/bjt/base width}\pgf at circ@res at left}
+                        {\ctikzvalof{tripoles/bjt/base height}\pgf at circ@res at down-(\numdown-1)*\multistep}}
+                    \pgfpathlineto{\pgfpoint
+                        {\ctikzvalof{tripoles/bjt/base width}\pgf at circ@res at left}
+                        {\ctikzvalof{tripoles/bjt/base height}\pgf at circ@res at down-(\numdown-1)*\multistep-
+                        \ctikzvalof{tripoles/schottky base size}\pgf at circ@scaled at Rlen}}
+                    \pgfpathlineto{\pgfpoint
+                        {\ctikzvalof{tripoles/bjt/base width}\pgf at circ@res at left-
+                            \ctikzvalof{tripoles/schottky base size}\pgf at circ@scaled at Rlen}
+                        {\ctikzvalof{tripoles/bjt/base height}\pgf at circ@res at down-(\numdown-1)*\multistep-
+                        \ctikzvalof{tripoles/schottky base size}\pgf at circ@scaled at Rlen}}
+                    \pgfpathlineto{\pgfpoint
+                        {\ctikzvalof{tripoles/bjt/base width}\pgf at circ@res at left-
+                            \ctikzvalof{tripoles/schottky base size}\pgf at circ@scaled at Rlen}
+                        {\ctikzvalof{tripoles/bjt/base height}\pgf at circ@res at down-(\numdown-1)*\multistep}}
+                \fi
+                \pgfsetroundcap % I like it more...
+                \pgfusepath{draw}
+            \endpgfscope
+            %
+            % draw base external connection
+            %
+            \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/bjt/base width}\pgf at circ@res at left}{0pt}}
+            \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/bjt/base width}\pgf at circ@res at left-\external}{0pt}}
+            \pgfusepath{draw}
+            %
+            % Drawing lower connections
+            %
+            \pgfscope
+            \pgf at circ@count at a=\numdown\relax
+            \pgfmathloop%
+            \ifnum\pgf at circ@count at a>0
+            \advance\pgf at circ@count at a-1\relax
+            \pgfmathsetlength{\pgf at circ@res at other}{\the\pgf at circ@count at a*\multistep}%
+            \pgfpathmoveto{\pgfpoint
+                {\ctikzvalof{tripoles/bjt/base width}\pgf at circ@res at left}
+                {\ctikzvalof{tripoles/bjt/base height 2}\pgf at circ@res at down-\pgf at circ@res at other}}
+            \pgfpathlineto{\pgfpoint
+                {\pgf at circ@res at right}
+                {\pgf at circ@res at down-\pgfverticaltransformationadjustment*.5*\pgflinewidth-\pgf at circ@res at other}}
+            \ifnum\pgf at circ@count at a=\numexpr\numdown-1\relax % draw the external pin connection
+            \pgfpathlineto{\pgfpoint
+                {\pgf at circ@res at right}
+                {\pgf at circ@res at down-\pgfverticaltransformationadjustment*.5*\pgflinewidth-\pgf at circ@res at other-\external}}
+            \fi
+            \pgfsetroundcap % better when connecting to sloped lines
+            \pgfusepath{draw}
+            \ifpgf at circuit@trans at ntype % it's a NPN; draw arrow
+            \pgfscope
+                \pgfslopedattimetrue
+                \pgfallowupsidedownattimetrue
+                \pgfresetnontranslationattimefalse
+                \pgftransformlineattime{\@@pos}{%
+                    \pgfpoint
+                        {\ctikzvalof{tripoles/bjt/base width}\pgf at circ@res at left}%
+                        {\ctikzvalof{tripoles/bjt/base height 2}\pgf at circ@res at down-\pgf at circ@res at other}%
+                    }{\pgfpoint
+                        {\pgf at circ@res at right}%
+                        {\pgf at circ@res at down-\pgfverticaltransformationadjustment*.5*\pgflinewidth-\pgf at circ@res at other}%
+                    }
+                    \pgfnode{trarrow}{\@@anchor}{}{}{\pgfusepath{stroke}}
+            \endpgfscope
+            \fi
+            \repeatpgfmathloop
+            \endpgfscope
+        }
+        % \pgf at sh@s@<name of the shape here> contains all the code for the shape
+        % and is executed just before a node is drawn.
+        \expandafter\pgfutil at g@addto at macro\csname pgf at sh@s at bjt#1\endcsname{%
+            % Start with the maximum collector number and go backwards.
+            \pgf at circ@count at a=\numC\relax
+            \pgfmathloop%
+            \ifnum\pgf at circ@count at a>0
+                % we will create two anchors per pin: the "normal one" like `pin 1` for the
+                % electrical contact, and the "border one" like `bpin 1` for labels.
+                % they will coincide if `external pins width` is set to 0.
+                \expandafter\xdef\csname pgf at anchor@bjt#1 at C\the\pgf at circ@count at a\endcsname{%
+                    \noexpand\pgf at circ@bjt at C@anchor{\the\pgf at circ@count at a}%
+                }
+            \advance\pgf at circ@count at a by -1\relax%
+            \repeatpgfmathloop%
+            % and emitters
+            \pgf at circ@count at a=\numE\relax
+            \pgfmathloop%
+            \ifnum\pgf at circ@count at a>0
+                % we will create two anchors per pin: the "normal one" like `pin 1` for the
+                % electrical contact, and the "border one" like `bpin 1` for labels.
+                % they will coincide if `external pins width` is set to 0.
+                \expandafter\xdef\csname pgf at anchor@bjt#1 at E\the\pgf at circ@count at a\endcsname{%
+                    \noexpand\pgf at circ@bjt at E@anchor{\the\pgf at circ@count at a}%
+                }
+            \advance\pgf at circ@count at a by -1\relax%
+            \repeatpgfmathloop%
+            }%
+    }
+}
+
+\declarebjt{npn}
+\declarebjt{pnp}
+
+% end of multi-bjts
+
+\long\def\declareigbt#1{
+    \pgfcircdeclaretransistor{#1}{
+        \anchor{inner up}{
+            \northeast
+            \pgf at y=\ctikzvalof{tripoles/#1/gate height}\pgf at y
+        }
+        \anchor{inner down}{
+            \northeast
+            \pgf at y=-\ctikzvalof{tripoles/#1/gate height}\pgf at y
+        }
+    }
+    {
+        % add the circle if requested (before everything else, so we can fill it)
+        \pgfcirc at transistorcircle
+        %draw upper connection
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+        {\ctikzvalof{tripoles/#1/gate height}\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/#1/gate height 2}\pgf at circ@res at up}}
+        \pgfusepath{draw}
+
+        %draw thicker gate lines
+        \pgfscope
+            \pgfscope
+                \pgfpathmoveto{\pgfpoint
+                    {\ctikzvalof{tripoles/#1/gate width}\pgf at circ@res at left}
+                {\ctikzvalof{tripoles/#1/outer base height}\pgf at circ@res at up+\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+                \pgfpathlineto{\pgfpoint
+                    {\ctikzvalof{tripoles/#1/gate width}\pgf at circ@res at left}
+                {\ctikzvalof{tripoles/#1/outer base height}\pgf at circ@res at down-\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+                % set the normal thickness
+                \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+                \edef\@@extrat{\ctikzvalof{tripoles/#1/outer base thickness}}
+                \pgfsetlinewidth{\@@extrat\pgflinewidth}
+                \pgfusepath{draw}
+            \endpgfscope
+            \pgfpathmoveto{\pgfpoint
+                {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/#1/base height}\pgf at circ@res at up+\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+            \pgfpathlineto{\pgfpoint
+                {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/#1/base height}\pgf at circ@res at down-\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+            \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+            \pgfusepath{draw}
+        \endpgfscope
+        %draw lower connection
+        \pgfpathmoveto{\pgfpoint
+            {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/#1/gate height 2}\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+        {\ctikzvalof{tripoles/#1/gate height}\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+        \pgfusepath{draw}
+        %draw arrow depending on type of transistor
+        \pgfscope
+            \pgfslopedattimetrue
+            \pgfallowupsidedownattimetrue
+            \pgfresetnontranslationattimefalse
+            \ifpgf at circuit@trans at arrowatend
+                \ifpgf at circuit@trans at ntype
+                    \edef\@@anchor{btip}\edef\@@pos{1.0}
+                \else
+                    \edef\@@anchor{tip}\edef\@@pos{1.0}
+                \fi
+            \else
+                \edef\@@anchor{center}\edef\@@pos{0.5}
+            \fi
+            \ifpgf at circuit@trans at ntype
+                \pgftransformlineattime{\@@pos}{%
+                    \pgfpoint%
+                    {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}%
+                    {\ctikzvalof{tripoles/#1/gate height 2}\pgf at circ@res at down}%
+                    }{%
+                    \pgfpoint{\pgf at circ@res at right}%
+                    {\ctikzvalof{tripoles/#1/gate height}\pgf at circ@res at down}%
+                }
+            \else
+                \pgftransformlineattime{\@@pos}{%
+                    \pgfpoint{\pgf at circ@res at right}%
+                    {\ctikzvalof{tripoles/#1/gate height}\pgf at circ@res at up}%
+                    }{%
+                    \pgfpoint{\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}%
+                    {\ctikzvalof{tripoles/#1/gate height 2}\pgf at circ@res at up}%
+                }
+            \fi
+            \pgfnode{trarrow}{\@@anchor}{}{}{\pgfusepath{stroke}}
+        \endpgfscope
+        %draw gate
+        \ifpgf at circuit@trans at ntype
+            \pgfpathmoveto{\pgfpoint
+                {\ctikzvalof{tripoles/#1/gate width}\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/#1/conn height}\pgf at circ@res at down}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}%
+            {\ctikzvalof{tripoles/#1/conn height}\pgf at circ@res at down}}
+        \else
+            \pgfpathmoveto{\pgfpoint
+                {\ctikzvalof{tripoles/#1/gate width}\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/#1/conn height}\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}%
+            {\ctikzvalof{tripoles/#1/conn height}\pgf at circ@res at up}}
+        \fi
+        \pgfusepath{draw}
+    }
+}
+
+\declareigbt{pigbt}
+\declareigbt{nigbt}
+\declareigbt{Lnigbt}
+\declareigbt{Lpigbt}
+
+\pgfcircdeclaretransistor{nmos}{
+        \anchor{inner up}{
+            \northeast
+            \pgf at y=\ctikzvalof{tripoles/nmos/gate height}\pgf at y
+        }
+        \anchor{inner down}{
+            \northeast
+            \pgf at y=-\ctikzvalof{tripoles/nmos/gate height}\pgf at y
+        }
+    }{%
+    % add the circle if requested (before everything else, so we can fill it)
+    \pgfcirc at transistorcircle
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+    {\ctikzvalof{tripoles/nmos/gate height}\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint
+        {\ctikzvalof{tripoles/nmos/base width}\pgf at circ@res at left}
+    {\ctikzvalof{tripoles/nmos/gate height}\pgf at circ@res at up}}
+
+    \pgfpathmoveto{\pgfpoint
+        {\ctikzvalof{tripoles/nmos/base width}\pgf at circ@res at left}
+    {\ctikzvalof{tripoles/nmos/gate height}\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+    {\ctikzvalof{tripoles/nmos/gate height}\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+    \pgfusepath{draw}
+
+    \pgfscope
+        \pgfpathmoveto{\pgfpoint
+            {\ctikzvalof{tripoles/nmos/base width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/nmos/base height}\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/nmos/base width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/nmos/base height}\pgf at circ@res at down}}
+        \pgfpathmoveto{\pgfpoint
+            {\ctikzvalof{tripoles/nmos/gate width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/nmos/gate height}\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/nmos/gate width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/nmos/gate height}\pgf at circ@res at down}}
+        \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+        \pgfusepath{draw}
+    \endpgfscope
+    \ifpgf at circuit@mos at arrows
+        \pgfscope
+            \ifpgf at circuit@trans at arrowatend
+                \pgftransformshift{\pgfpoint
+                    {\pgf at circ@res at right}%
+                    {\ctikzvalof{tripoles/pmos/gate height}\pgf at circ@res at down}%
+                }
+                \pgfnode{trarrow}{btip}{}{}{\pgfusepath{stroke}}
+            \else
+                \pgfslopedattimetrue
+                \pgfallowupsidedownattimetrue
+                \pgfresetnontranslationattimefalse
+                \pgftransformlineattime{\ctikzvalof{tripoles/nmos/arrow pos}}{%
+                    \pgfpoint%
+                    {\ctikzvalof{tripoles/nmos/gate width}\pgf at circ@res at left}%
+                    {\ctikzvalof{tripoles/nmos/gate height}\pgf at circ@res at down}%
+                    }{%
+                    \pgfpoint
+                    {\pgf at circ@res at right}%
+                    {\ctikzvalof{tripoles/nmos/gate height}\pgf at circ@res at down}%
+                }
+                \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+            \fi
+        \endpgfscope
+    \fi
+
+    \ifpgf at circuit@bpt at drawgate
+        \pgfpathmoveto{\pgfpoint
+            {\ctikzvalof{tripoles/nmos/gate width}\pgf at circ@res at left}
+        {\pgf at circ@res at up+\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf at circ@res at up+\pgf at circ@res at down}}
+        \pgfusepath{draw}
+    \fi
+
+    \ifpgf at circuit@bpt at drawbulk % added by Burak Kelleci
+        \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/nmos/base width}\pgf at circ@res at left}
+                {\pgf at circ@res at up+\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right+\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+                {\pgf at circ@res at up+\pgf at circ@res at down}}
+        \pgfusepath{draw}
+    \fi
+}
+
+\pgfcircdeclaretransistor{pmos}{
+        \anchor{inner up}{
+            \northeast
+            \pgf at y=\ctikzvalof{tripoles/pmos/gate height}\pgf at y
+        }
+        \anchor{inner down}{
+            \northeast
+            \pgf at y=-\ctikzvalof{tripoles/pmos/gate height}\pgf at y
+        }
+    }{%
+    % add the circle if requested (before everything else, so we can fill it)
+    \pgfcirc at transistorcircle
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+    {\ctikzvalof{tripoles/pmos/gate height}\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint
+        {\ctikzvalof{tripoles/pmos/base width}\pgf at circ@res at left}
+    {\ctikzvalof{tripoles/pmos/gate height}\pgf at circ@res at up}}
+    \pgfusepath{draw}
+
+    \ifpgf at circuit@mos at arrows
+        \pgfscope
+            \ifpgf at circuit@trans at arrowatend
+                \pgftransformshift{\pgfpoint
+                    {\ctikzvalof{tripoles/pmos/base width}\pgf at circ@res at left}%
+                    {\ctikzvalof{tripoles/pmos/gate height}\pgf at circ@res at up}%
+                }
+                \pgftransformrotate{180}
+                \pgfnode{trarrow}{tip}{}{}{\pgfusepath{stroke}}
+            \else
+                \pgfslopedattimetrue
+                \pgfallowupsidedownattimetrue
+                \pgfresetnontranslationattimefalse
+                \pgftransformlineattime{\ctikzvalof{tripoles/pmos/arrow pos}}{%
+                    \pgfpoint%
+                    {\pgf at circ@res at right}%
+                    {\ctikzvalof{tripoles/pmos/gate height}\pgf at circ@res at up}%
+                    }{%
+                    \pgfpoint
+                    {\ctikzvalof{tripoles/pmos/gate width}\pgf at circ@res at left}%
+                    {\ctikzvalof{tripoles/pmos/gate height}\pgf at circ@res at up}%
+                }
+                \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+            \fi
+        \endpgfscope
+    \fi
+
+    \pgfscope
+        \pgfpathmoveto{\pgfpoint
+            {\ctikzvalof{tripoles/pmos/base width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/pmos/base height}\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/pmos/base width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/pmos/base height}\pgf at circ@res at down}}
+        \pgfpathmoveto{\pgfpoint
+            {\ctikzvalof{tripoles/pmos/gate width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/pmos/gate height}\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/pmos/gate width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/pmos/gate height}\pgf at circ@res at down}}
+        \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+        \pgfusepath{draw}
+    \endpgfscope
+
+    \pgfpathmoveto{\pgfpoint
+        {\ctikzvalof{tripoles/pmos/base width}\pgf at circ@res at left}
+    {\ctikzvalof{tripoles/pmos/gate height}\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+    {\ctikzvalof{tripoles/pmos/gate height}\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+
+
+    \pgfusepath{draw}
+    \ifpgf at circuit@bpt at drawgate
+        \pgfpathmoveto{\pgfpoint
+            {\ctikzvalof{tripoles/pmos/gate width}\pgf at circ@res at left}
+        {\pgf at circ@res at up+\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf at circ@res at up+\pgf at circ@res at down}}
+        \pgfusepath{draw}
+    \fi
+
+    \ifpgf at circuit@bpt at drawbulk % added by Burak Kelleci
+        \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/pmos/base width}\pgf at circ@res at left}
+                {\pgf at circ@res at up+\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right+\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+                {\pgf at circ@res at up+\pgf at circ@res at down}}
+        \pgfusepath{draw}
+    \fi
+
+    \ifpgf at circuit@pmos at nocircle\else
+        % we are not scaling the circle with the MOS --- I think it's better to have it
+        % coherent with the poles/nodes of the rest of the circuit.
+        \pgfpathcircle{\pgfpoint
+            {\ctikzvalof{tripoles/pmos/gate width}\pgf at circ@res at left - \ctikzvalof{nodes width}*\pgf at circ@Rlen}
+        {\pgf at circ@res at up+\pgf at circ@res at down}}{\ctikzvalof{nodes width}*\pgf at circ@Rlen}
+        \ifpgf at circuit@pmos at emptycircle
+            \pgfsetfillcolor{white}
+        \fi
+        \pgfusepath{draw,fill}
+    \fi
+}
+
+%%% depletion MOSFET (simplified symbols)
+
+\long\def\pgfcirc at filldraw@depletion#1{%
+    \ifx\tikz at fillcolor\pgfutil at empty
+        % if there is no explicit fill check the specific key
+        \edef\@@tmp{\ctikzvalof{tripoles/#1/depletion color}}\edef\@@none{none}%
+        \ifx\@@tmp\@@none % if  it's none
+            \pgfusepath{draw}%
+        \else
+            \edef\@@default{default}%
+            \ifx\@@tmp\@@default % fill with the pen color
+                \pgfusepath{draw, fill}%
+            \else
+                \pgfsetfillcolor{\@@tmp}%
+                \pgfusepath{draw, fill}%
+            \fi
+        \fi
+    \else
+        \pgfsetfillcolor{\tikz at fillcolor}%
+        \pgfusepath{draw, fill}%
+    \fi
+}
+
+\pgfcircdeclaretransistor{nmosd}{
+        \anchor{inner up}{
+            \northeast
+            \pgf at y=\ctikzvalof{tripoles/nmosd/gate height}\pgf at y
+        }
+        \anchor{inner down}{
+            \northeast
+            \pgf at y=-\ctikzvalof{tripoles/nmosd/gate height}\pgf at y
+        }
+        \anchor{nobulk}{ %override
+            \left
+            \pgf at circ@res at temp=\ctikzvalof{tripoles/nmosd/depletion width}\pgf at x
+            \pgf at x=\ctikzvalof{tripoles/nmosd/base width}\pgf at x
+            \advance\pgf at x by -\pgf at circ@res at temp
+        }
+    }{%
+    % draw depletion channel
+    % add the circle if requested (before everything else, so we can fill it)
+    \pgfcirc at transistorcircle
+    \pgfscope
+        \pgfpathrectanglecorners
+        {\pgfpoint
+        {\ctikzvalof{tripoles/nmosd/base width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/nmosd/gate height}\pgf at circ@res at up}}
+        {\pgfpoint
+        {(\ctikzvalof{tripoles/nmosd/base width} - \ctikzvalof{tripoles/nmosd/depletion width})*\pgf at circ@res at left}
+        {-\ctikzvalof{tripoles/nmosd/gate height}\pgf at circ@res at up}}
+        \pgfcirc at filldraw@depletion{nmosd}
+    \endpgfscope
+    % draw drain and source terminals
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\ctikzvalof{tripoles/nmosd/gate height}\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint
+        {\ctikzvalof{tripoles/nmosd/base width}\pgf at circ@res at left}
+    {\ctikzvalof{tripoles/nmosd/gate height}\pgf at circ@res at up}}
+
+    \pgfpathmoveto{\pgfpoint
+        {\ctikzvalof{tripoles/nmosd/base width}\pgf at circ@res at left}
+    {\ctikzvalof{tripoles/nmosd/gate height}\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+    {\ctikzvalof{tripoles/nmosd/gate height}\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+    \pgfusepath{draw}
+
+    \pgfscope
+        \pgfpathmoveto{\pgfpoint
+            {\ctikzvalof{tripoles/nmosd/base width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/nmosd/base height}\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/nmosd/base width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/nmosd/base height}\pgf at circ@res at down}}
+        \pgfpathmoveto{\pgfpoint
+            {\ctikzvalof{tripoles/nmosd/gate width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/nmosd/gate height}\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/nmosd/gate width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/nmosd/gate height}\pgf at circ@res at down}}
+        \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+        \pgfusepath{draw}
+    \endpgfscope
+    \ifpgf at circuit@mos at arrows
+        \pgfscope
+            \ifpgf at circuit@trans at arrowatend
+                \pgftransformshift{\pgfpoint
+                    {\pgf at circ@res at right}%
+                    {\ctikzvalof{tripoles/pmosd/gate height}\pgf at circ@res at down}%
+                }
+                \pgfnode{trarrow}{btip}{}{}{\pgfusepath{stroke}}
+            \else
+                \pgfslopedattimetrue
+                \pgfallowupsidedownattimetrue
+                \pgfresetnontranslationattimefalse
+                \pgftransformlineattime{\ctikzvalof{tripoles/nmosd/arrow pos}}{%
+                    \pgfpoint%
+                    {\ctikzvalof{tripoles/nmosd/gate width}\pgf at circ@res at left}%
+                    {\ctikzvalof{tripoles/nmosd/gate height}\pgf at circ@res at down}%
+                    }{%
+                    \pgfpoint
+                    {\pgf at circ@res at right-\ctikzvalof{tripoles/nmosd/depletion width}*\pgf at circ@res at left}%
+                    {\ctikzvalof{tripoles/nmosd/gate height}\pgf at circ@res at down}%
+                }
+                \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+            \fi
+        \endpgfscope
+    \fi
+
+    \ifpgf at circuit@bpt at drawgate
+        \pgfpathmoveto{\pgfpoint
+            {\ctikzvalof{tripoles/nmosd/gate width}\pgf at circ@res at left}
+        {\pgf at circ@res at up+\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf at circ@res at up+\pgf at circ@res at down}}
+        \pgfusepath{draw}
+    \fi
+
+    \ifpgf at circuit@bpt at drawbulk % added by Burak Kelleci
+        \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/nmosd/base width}\pgf at circ@res at left-\ctikzvalof{tripoles/nmosd/depletion width}*\pgf at circ@res at left}
+                {\pgf at circ@res at up+\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right+\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+                {\pgf at circ@res at up+\pgf at circ@res at down}}
+        \pgfusepath{draw}
+    \fi
+}
+
+\pgfcircdeclaretransistor{pmosd}{
+        \anchor{inner up}{
+            \northeast
+            \pgf at y=\ctikzvalof{tripoles/pmosd/gate height}\pgf at y
+        }
+        \anchor{inner down}{
+            \northeast
+            \pgf at y=-\ctikzvalof{tripoles/pmosd/gate height}\pgf at y
+        }
+        \anchor{nobulk}{ %override
+            \left
+            \pgf at circ@res at temp=\ctikzvalof{tripoles/pmosd/depletion width}\pgf at x
+            \pgf at x=\ctikzvalof{tripoles/pmosd/base width}\pgf at x
+            \advance\pgf at x by -\pgf at circ@res at temp
+        }
+    }{%
+    % add the circle if requested (before everything else, so we can fill it)
+    \pgfcirc at transistorcircle
+    % draw depletion channel
+    \pgfscope
+        \pgfpathrectanglecorners
+        {\pgfpoint
+        {\ctikzvalof{tripoles/pmosd/base width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/pmosd/gate height}\pgf at circ@res at up}}
+        {\pgfpoint
+        {(\ctikzvalof{tripoles/pmosd/base width} - \ctikzvalof{tripoles/pmosd/depletion width})*\pgf at circ@res at left}
+        {-\ctikzvalof{tripoles/pmosd/gate height}\pgf at circ@res at up}}
+        \pgfcirc at filldraw@depletion{pmosd}
+    \endpgfscope
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+    {\ctikzvalof{tripoles/pmosd/gate height}\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint
+        {\ctikzvalof{tripoles/pmosd/base width}\pgf at circ@res at left}
+    {\ctikzvalof{tripoles/pmosd/gate height}\pgf at circ@res at up}}
+    \pgfusepath{draw}
+
+    \ifpgf at circuit@mos at arrows
+        \pgfscope
+            \ifpgf at circuit@trans at arrowatend
+                \pgftransformshift{\pgfpoint
+                    {\ctikzvalof{tripoles/pmosd/base width}\pgf at circ@res at left-\ctikzvalof{tripoles/nmosd/depletion width}*\pgf at circ@res at left}%
+                    {\ctikzvalof{tripoles/pmosd/gate height}\pgf at circ@res at up}%
+                }
+                \pgftransformrotate{180}
+                \pgfnode{trarrow}{tip}{}{}{\pgfusepath{stroke}}
+            \else
+                \pgfslopedattimetrue
+                \pgfallowupsidedownattimetrue
+                \pgfresetnontranslationattimefalse
+                \pgftransformlineattime{\ctikzvalof{tripoles/pmosd/arrow pos}}{%
+                    \pgfpoint%
+                    {\pgf at circ@res at right-\ctikzvalof{tripoles/nmosd/depletion width}*\pgf at circ@res at left}%
+                    {\ctikzvalof{tripoles/pmosd/gate height}\pgf at circ@res at up}%
+                    }{%
+                    \pgfpoint
+                    {\ctikzvalof{tripoles/pmosd/gate width}\pgf at circ@res at left}%
+                    {\ctikzvalof{tripoles/pmosd/gate height}\pgf at circ@res at up}%
+                }
+                \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+            \fi
+        \endpgfscope
+    \fi
+
+    \pgfscope
+        \pgfpathmoveto{\pgfpoint
+            {\ctikzvalof{tripoles/pmosd/base width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/pmosd/base height}\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/pmosd/base width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/pmosd/base height}\pgf at circ@res at down}}
+        \pgfpathmoveto{\pgfpoint
+            {\ctikzvalof{tripoles/pmosd/gate width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/pmosd/gate height}\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/pmosd/gate width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/pmosd/gate height}\pgf at circ@res at down}}
+        \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+        \pgfusepath{draw}
+    \endpgfscope
+
+    \pgfpathmoveto{\pgfpoint
+        {\ctikzvalof{tripoles/pmosd/base width}\pgf at circ@res at left}
+    {\ctikzvalof{tripoles/pmosd/gate height}\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+    {\ctikzvalof{tripoles/pmosd/gate height}\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+
+
+    \pgfusepath{draw}
+    \ifpgf at circuit@bpt at drawgate
+        \pgfpathmoveto{\pgfpoint
+            {\ctikzvalof{tripoles/pmosd/gate width}\pgf at circ@res at left}
+        {\pgf at circ@res at up+\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf at circ@res at up+\pgf at circ@res at down}}
+        \pgfusepath{draw}
+    \fi
+
+    \ifpgf at circuit@bpt at drawbulk % added by Burak Kelleci
+        \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/pmosd/base width}\pgf at circ@res at left-\ctikzvalof{tripoles/nmosd/depletion width}*\pgf at circ@res at left}
+                {\pgf at circ@res at up+\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right+\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+                {\pgf at circ@res at up+\pgf at circ@res at down}}
+        \pgfusepath{draw}
+    \fi
+
+    \ifpgf at circuit@pmos at nocircle\else
+        % we are not scaling the circle with the MOS --- I think it's better to have it
+        % coherent with the poles/nodes of the rest of the circuit.
+        \pgfpathcircle{\pgfpoint
+            {\ctikzvalof{tripoles/pmosd/gate width}\pgf at circ@res at left - \ctikzvalof{nodes width}*\pgf at circ@Rlen}
+        {\pgf at circ@res at up+\pgf at circ@res at down}}{\ctikzvalof{nodes width}*\pgf at circ@Rlen}
+        \ifpgf at circuit@pmos at emptycircle
+            \pgfsetfillcolor{white}
+        \fi
+        \pgfusepath{draw,fill}
+    \fi
+}
+%% HEMT FET Transistor
+\pgfcircdeclaretransistor{hemt}{
+        \anchor{inner up}{
+            \northeast
+            \pgf at y=\ctikzvalof{tripoles/hemt/gate height}\pgf at y
+        }
+        \anchor{inner down}{
+            \northeast
+            \pgf at y=-\ctikzvalof{tripoles/hemt/gate height}\pgf at y
+        }
+    }{%
+    % add the circle if requested (before everything else, so we can fill it)
+    \pgfcirc at transistorcircle
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+    {\ctikzvalof{tripoles/hemt/gate height}\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint
+        {\ctikzvalof{tripoles/hemt/base width}\pgf at circ@res at left}
+    {\ctikzvalof{tripoles/hemt/gate height}\pgf at circ@res at up}}
+
+    \pgfpathmoveto{\pgfpoint
+        {\ctikzvalof{tripoles/hemt/base width}\pgf at circ@res at left}
+    {\ctikzvalof{tripoles/hemt/gate height}\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+    {\ctikzvalof{tripoles/hemt/gate height}\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+    \pgfusepath{draw}
+
+    \pgfscope
+        \pgfpathmoveto{\pgfpoint
+            {\ctikzvalof{tripoles/hemt/base width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/hemt/base height}\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/hemt/base width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/hemt/base height}\pgf at circ@res at down}}
+        \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+        \pgfusepath{draw}
+    \endpgfscope
+
+    \pgfpathmoveto{\pgfpoint
+        {\ctikzvalof{tripoles/hemt/base width}\pgf at circ@res at left}
+    {\pgf at circ@res at up+\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf at circ@res at up+\pgf at circ@res at down}}
+    \pgfusepath{draw}
+}
+
+\long\def\drawfetcore#1{
+    \pgftransformationadjustments
+    % add the circle if requested (before everything else, so we can fill it)
+    \pgfcirc at transistorcircle
+
+    %top connection
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+    {\ctikzvalof{tripoles/#1/gate height}\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint
+        {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}
+    {\ctikzvalof{tripoles/#1/gate height}\pgf at circ@res at up}}
+    \pgfusepath{draw}
+    \pgfscope
+        \pgfpathmoveto{\pgfpoint
+            {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/#1/base height}\pgf at circ@res at up}}
+        \ifpgf at circuit@trans at depletiontype
+            \pgfpathlineto{\pgfpoint
+                {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/#1/base height}\pgf at circ@res at down}}
+        \else
+
+            \pgfpathlineto{\pgfpoint
+                {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/#1/base height}\pgf at circ@res at up*0.45}}
+            \pgfpathmoveto{\pgfpoint
+                {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/#1/base height}\pgf at circ@res at up*0.25}}
+            \pgfpathlineto{\pgfpoint
+                {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/#1/base height}\pgf at circ@res at down*0.25}}
+            \pgfpathmoveto{\pgfpoint
+                {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/nfet/base height}\pgf at circ@res at down*0.45}}
+            \pgfpathlineto{\pgfpoint
+                {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/#1/base height}\pgf at circ@res at down}}
+        \fi
+        \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+        \pgfusepath{draw}
+    \endpgfscope
+    %Bulk connection line
+    \pgfpathmoveto{\pgfpoint
+        {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}
+    {\pgf at circ@res at up+\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right+\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+    {\pgf at circ@res at up+\pgf at circ@res at down}}
+
+    %bottom connection
+    \pgfpathmoveto{\pgfpoint
+        {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}
+    {\ctikzvalof{tripoles/#1/gate height}\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+    {\ctikzvalof{tripoles/#1/gate height}\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+    \pgfusepath{draw}
+
+    %draw thick gate line
+    \pgfscope
+        \pgfpathmoveto{\pgfpoint
+            {\ctikzvalof{tripoles/#1/gate width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/#1/gate height}\pgf at circ@res at up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/#1/gate width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/#1/gate height}\pgf at circ@res at down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+        \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+        \pgfusepath{draw}
+    \endpgfscope
+
+    % arrows
+    \pgfscope
+        \pgfslopedattimetrue
+        \pgfallowupsidedownattimetrue
+        \pgfresetnontranslationattimefalse
+        \ifpgf at circuit@trans at arrowatend
+                \ifpgf at circuit@trans at ntype
+                    \edef\@@anchor{tip}
+                    \edef\@@pos{1.0}
+                \else
+                    \edef\@@anchor{btip}
+                    \edef\@@pos{0.0}
+                \fi
+        \else
+            \edef\@@anchor{center}\edef\@@pos{0.6}
+        \fi
+        \pgftransformlineattime{\@@pos}{%
+            \pgfpoint
+            {\pgf at circ@res at right}%
+            {\pgf at circ@res at up+\pgf at circ@res at down}%
+            }{%
+            \pgfpoint%
+            {\ctikzvalof{tripoles/#1/base width}\pgf at circ@res at left}%
+            {\pgf at circ@res at up+\pgf at circ@res at down}%
+        }
+        \ifpgf at circuit@trans at ntype
+        \else
+            \pgftransformrotate{180}
+        \fi
+        \pgfnode{trarrow}{\@@anchor}{}{}{\pgfusepath{stroke}}
+    \endpgfscope
+
+% GATE CONNECTION
+\ifpgf at circuit@bpt at drawgate
+    \ifpgf at circuit@trans at ntype
+        \pgfpathmoveto{\pgfpoint
+            {\ctikzvalof{tripoles/#1/gate width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/#1/conn height}\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\ctikzvalof{tripoles/#1/conn height}\pgf at circ@res at down}}
+    \else
+        \pgfpathmoveto{\pgfpoint
+            {\ctikzvalof{tripoles/#1/gate width}\pgf at circ@res at left}
+        {-\ctikzvalof{tripoles/#1/conn height}\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{-\ctikzvalof{tripoles/#1/conn height}\pgf at circ@res at down}}
+    \fi
+    \pgfusepath{draw}
+\fi
+
+}
+
+\long\def\pgfdeclaretransistorwrapperaddbulk#1#2#3
+{\pgfcircdeclaretransistor{#1}{
+        \anchor{bulk}{\left\pgf at x=0pt}
+        \anchor{B}{\left\pgf at x=0pt}%override Base anchor from npn&igbt
+        \anchor{inner up}{
+            \northeast
+            \pgf at y=\ctikzvalof{tripoles/#1/gate height}\pgf at y
+        }
+        \anchor{inner down}{
+            \northeast
+            \pgf at y=-\ctikzvalof{tripoles/#1/gate height}\pgf at y
+        }
+        #2
+    }
+    {#3}
+}
+
+\pgfdeclaretransistorwrapperaddbulk{nfet}{}{%
+	\pgf at circuit@trans at depletiontypefalse
+	\drawfetcore{nfet}
+}
+
+\pgfdeclaretransistorwrapperaddbulk{pfet}{}{%
+    \pgf at circuit@trans at depletiontypefalse
+    \drawfetcore{pfet}
+}
+
+\pgfdeclaretransistorwrapperaddbulk{nfetd}{}{%
+	\pgf at circuit@trans at depletiontypetrue
+	\drawfetcore{nfetd}
+}
+
+\pgfdeclaretransistorwrapperaddbulk{pfetd}{}{%
+    \pgf at circuit@trans at depletiontypetrue
+    \drawfetcore{pfetd}
+}
+% N-CHANNEL IGFET ENHANCEMENT TYPE
+\pgfdeclaretransistorwrapperaddbulk{nigfete}{}{%
+    \pgf at circuit@trans at depletiontypefalse
+    \drawfetcore{nigfete}
+
+    % SOURCE CONNECTION
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfusepath{draw}
+
+    % SOLDER DOT at source-bulk connection
+    \ifpgf at circuit@fet at solderdot
+        \pgfscope
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at right}{
+            \ctikzvalof{tripoles/nigfete/gate height}\pgf at circ@res at down}}
+            \pgfnode{circ}{center}{}{}{}
+    \endpgfscope{}
+\fi
+}
+
+% N-CHANNEL IGFET ENHANCEMENT TYPE with Bulk connector
+\pgfdeclaretransistorwrapperaddbulk{nigfetebulk}{}{%
+    \pgf at circuit@trans at depletiontypefalse
+    \drawfetcore{nigfetebulk}
+    % SOLDER DOT at source-bulk connection
+    \ifpgf at circuit@fet at solderdot
+        \pgfscope
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at right}{
+            \ctikzvalof{tripoles/nigfetebulk/gate height}\pgf at circ@res at down}}
+            \pgfnode{circ}{center}{}{}{}
+        \endpgfscope{}
+    \fi
+}
+
+% N-CHANNEL IGFET DEPLETION TYPE
+\pgfdeclaretransistorwrapperaddbulk{nigfetd}{}{%
+    \pgf at circuit@trans at depletiontypetrue
+    \drawfetcore{nigfetd}
+
+    % SOURCE CONNECTION
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfusepath{draw}
+
+    % SOLDER DOT at source-bulk connection
+    \ifpgf at circuit@fet at solderdot
+        \pgfscope
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at right}{
+            \ctikzvalof{tripoles/nigfete/gate height}\pgf at circ@res at down}}
+            \pgfnode{circ}{center}{}{}{}
+        \endpgfscope{}
+    \fi
+}
+
+% P-CHANNEL IGFET ENHANCEMENT TYPE
+\pgfdeclaretransistorwrapperaddbulk{pigfete}{}{%
+    \pgf at circuit@trans at depletiontypefalse
+    \drawfetcore{pigfete}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+
+    % SOURCE CONNECTION
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfusepath{draw}
+
+
+    % SOLDER DOT at source-bulk connection
+    \ifpgf at circuit@fet at solderdot
+        \pgfscope
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at right}{
+            \ctikzvalof{tripoles/pigfete/gate height}\pgf at circ@res at up}}
+            \pgfnode{circ}{center}{}{}{}
+        \endpgfscope
+    \fi
+}
+
+% P-CHANNEL IGFET ENHANCEMENT TYPE with bulk connector
+\pgfdeclaretransistorwrapperaddbulk{pigfetebulk}{}{%
+    \pgf at circuit@trans at depletiontypefalse
+    \drawfetcore{pigfetebulk}
+}
+
+% P-CHANNEL IGFET DEPLETION TYPE
+\pgfdeclaretransistorwrapperaddbulk{pigfetd}{}{%
+    \pgf at circuit@trans at depletiontypetrue
+    \drawfetcore{pigfetd}
+
+    % SOURCE CONNECTION
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfusepath{draw}
+
+
+    % SOLDER DOT at source-bulk connection
+    \ifpgf at circuit@fet at solderdot
+        \pgfscope
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at right}{
+            \ctikzvalof{tripoles/nigfete/gate height}\pgf at circ@res at up}}
+            \pgfnode{circ}{center}{}{}{}
+        \endpgfscope{}
+    \fi
+}
+
+\pgfcircdeclaretransistor{njfet}{
+        \anchor{inner up}{
+            \northeast
+            \pgf at y=\ctikzvalof{tripoles/njfet/gate height 2}\pgf at y
+        }
+        \anchor{inner down}{
+            \northeast
+            \pgf at y=-\ctikzvalof{tripoles/njfet/gate height 2}\pgf at y
+        }
+    }{%
+    % add the circle if requested (before everything else, so we can fill it)
+    \pgfcirc at transistorcircle
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+    {\ctikzvalof{tripoles/njfet/gate height 2}\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint
+        {\ctikzvalof{tripoles/njfet/gate width}\pgf at circ@res at left}
+    {\ctikzvalof{tripoles/njfet/gate height 2}\pgf at circ@res at up}}
+
+    \pgfpathmoveto{\pgfpoint
+        {\ctikzvalof{tripoles/njfet/gate width}\pgf at circ@res at left}
+    {\ctikzvalof{tripoles/njfet/gate height 2}\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+    {\ctikzvalof{tripoles/njfet/gate height 2}\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+    \pgfusepath{draw}
+
+    \pgfscope
+        \pgfpathmoveto{\pgfpoint
+            {\ctikzvalof{tripoles/njfet/gate width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/njfet/gate height}\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/njfet/gate width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/njfet/gate height}\pgf at circ@res at down}}
+        \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+        \pgfusepath{draw}
+    \endpgfscope
+
+    % arrow
+    \pgfscope
+        \pgfslopedattimetrue
+        \pgfallowupsidedownattimetrue
+        \pgfresetnontranslationattimefalse
+        \ifpgf at circuit@trans at arrowatend
+            \edef\@@anchor{tip}\edef\@@pos{1.0}
+        \else
+            \edef\@@anchor{center}\edef\@@pos{0.6}
+        \fi
+        \pgftransformlineattime{\@@pos}{%
+            \pgfpoint{\pgf at circ@res at left}%
+            {\ctikzvalof{tripoles/njfet/gate height 2}\pgf at circ@res at down}%
+            }{%
+            \pgfpoint
+            {\ctikzvalof{tripoles/njfet/gate width}\pgf at circ@res at left}%
+            {\ctikzvalof{tripoles/njfet/gate height 2}\pgf at circ@res at down}%
+        }
+        \pgfnode{trarrow}{\@@anchor}{}{}{\pgfusepath{stroke}}
+    \endpgfscope
+
+    \pgfpathmoveto{\pgfpoint
+        {\ctikzvalof{tripoles/njfet/gate width}\pgf at circ@res at left}
+    {\ctikzvalof{tripoles/njfet/gate height 2}\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+    {\ctikzvalof{tripoles/njfet/gate height 2}\pgf at circ@res at down}}
+    \pgfusepath{draw}
+}
+
+\pgfcircdeclaretransistor{pjfet}{
+        \anchor{inner up}{
+            \northeast
+            \pgf at y=\ctikzvalof{tripoles/pjfet/gate height 2}\pgf at y
+        }
+        \anchor{inner down}{
+            \northeast
+            \pgf at y=-\ctikzvalof{tripoles/pjfet/gate height 2}\pgf at y
+        }
+    }{%
+    % add the circle if requested (before everything else, so we can fill it)
+    \pgfcirc at transistorcircle
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+    {\ctikzvalof{tripoles/pjfet/gate height 2}\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint
+        {\ctikzvalof{tripoles/pjfet/gate width}\pgf at circ@res at left}
+    {\ctikzvalof{tripoles/pjfet/gate height 2}\pgf at circ@res at up}}
+
+    \pgfpathmoveto{\pgfpoint
+        {\ctikzvalof{tripoles/pjfet/gate width}\pgf at circ@res at left}
+    {\ctikzvalof{tripoles/pjfet/gate height 2}\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+    {\ctikzvalof{tripoles/pjfet/gate height 2}\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+    \pgfusepath{draw}
+
+    \pgfscope
+        \pgfpathmoveto{\pgfpoint
+            {\ctikzvalof{tripoles/pjfet/gate width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/pjfet/gate height}\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/pjfet/gate width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/pjfet/gate height}\pgf at circ@res at down}}
+        \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+        \pgfusepath{draw}
+    \endpgfscope
+
+    \pgfscope
+        \pgfslopedattimetrue
+        \pgfallowupsidedownattimetrue
+        \pgfresetnontranslationattimefalse
+        \ifpgf at circuit@trans at arrowatend
+            \edef\@@anchor{btip}\edef\@@pos{1.0}
+        \else
+            \edef\@@anchor{center}\edef\@@pos{0.4}
+        \fi
+        \pgftransformlineattime{\@@pos}{%
+            \pgfpoint%
+            {\ctikzvalof{tripoles/pjfet/gate width}\pgf at circ@res at left}%
+            {\ctikzvalof{tripoles/pjfet/gate height 2}\pgf at circ@res at up}%
+            }{%
+            \pgfpoint{\pgf at circ@res at left}%
+            {\ctikzvalof{tripoles/pjfet/gate height 2}\pgf at circ@res at up}%
+        }
+        \pgfnode{trarrow}{\@@anchor}{}{}{\pgfusepath{stroke}}
+    \endpgfscope
+
+    \pgfpathmoveto{\pgfpoint
+        {\ctikzvalof{tripoles/pjfet/gate width}\pgf at circ@res at left}
+    {\ctikzvalof{tripoles/pjfet/gate height 2}\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+    {\ctikzvalof{tripoles/pjfet/gate height 2}\pgf at circ@res at up}}
+    \pgfusepath{draw}
+}
+
+\pgfdeclaretransistorwrapperaddbulk{isfet}{
+    }{%
+    % add the circle if requested (before everything else, so we can fill it)
+    \pgfcirc at transistorcircle
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+    % DRAIN CONNECTION
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+    {\ctikzvalof{tripoles/isfet/gate height}\pgf at circ@res at up}}
+    % DRAIN
+    \pgfpathlineto{\pgfpoint
+        {\ctikzvalof{tripoles/isfet/base width}\pgf at circ@res at left}
+    {\ctikzvalof{tripoles/isfet/gate height}\pgf at circ@res at up}}
+    \pgfusepath{draw}
+
+    % GATE, DEPLETION TYPE
+    \pgfscope %% added
+        \pgfpathmoveto{\pgfpoint
+            {\ctikzvalof{tripoles/isfet/base width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/isfet/base height}\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/isfet/base width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/isfet/base height}\pgf at circ@res at down}}
+        \pgf at circ@setlinewidth{tripoles}{\pgflinewidth} %% added
+        \pgfusepath{draw} %% added
+    \endpgfscope %% added
+
+    % BULK
+    \pgfpathmoveto{\pgfpoint
+        {\ctikzvalof{tripoles/isfet/base width}\pgf at circ@res at left}
+    {\pgf at circ@res at up+\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right+.5\pgflinewidth}
+    {\pgf at circ@res at up+\pgf at circ@res at down}}
+
+    % SOURCE
+    \pgfpathmoveto{\pgfpoint
+        {\ctikzvalof{tripoles/isfet/base width}\pgf at circ@res at left}
+    {\ctikzvalof{tripoles/isfet/gate height}\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+    {\ctikzvalof{tripoles/isfet/gate height}\pgf at circ@res at down}}
+    % SOURCE CONNECTION
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+    \pgfusepath{draw}
+
+    % SOLDER DOT at source-bulk connection
+    \ifpgf at circuit@fet at solderdot
+        \pgfscope
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at right}{
+            \ctikzvalof{tripoles/nigfete/gate height}\pgf at circ@res at down}}
+            \pgfnode{circ}{center}{}{}{}
+        \endpgfscope{}
+    \fi
+    % ARROW
+    \pgfscope
+        \pgfslopedattimetrue
+        \pgfallowupsidedownattimetrue
+        \pgfresetnontranslationattimefalse
+        \ifpgf at circuit@trans at arrowatend
+            \edef\@@anchor{tip}\edef\@@pos{1.0}
+        \else
+            \edef\@@anchor{center}\edef\@@pos{0.6}
+        \fi
+        \pgftransformlineattime{\@@pos}{%
+            \pgfpoint
+            {\pgf at circ@res at right}%
+            {\pgf at circ@res at up+\pgf at circ@res at down}%
+            }{%
+            \pgfpoint%
+            {\ctikzvalof{tripoles/isfet/base width}\pgf at circ@res at left}%
+            {\pgf at circ@res at up+\pgf at circ@res at down}%
+        }
+        \pgfnode{trarrow}{\@@anchor}{}{}{\pgfusepath{stroke}}
+    \endpgfscope
+    \pgfusepath{draw}
+
+    % Wavy lines
+    \pgfscope
+        \pgfpathmoveto{\pgfpoint{-\ctikzvalof{tripoles/isfet/waves x sep}\pgf at circ@res at up}{\ctikzvalof{tripoles/isfet/waves y sep}\pgf at circ@res at up}}
+        \pgfpathsine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf at circ@res at up}{-\ctikzvalof{tripoles/isfet/wave amp}\pgf at circ@res at up}}
+        \pgfpathcosine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf at circ@res at up}{\ctikzvalof{tripoles/isfet/wave amp}\pgf at circ@res at up}}
+        \pgfpathsine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf at circ@res at up}{\ctikzvalof{tripoles/isfet/wave amp}\pgf at circ@res at up}}
+        \pgfpathcosine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf at circ@res at up}{-\ctikzvalof{tripoles/isfet/wave amp}\pgf at circ@res at up}}
+        \pgfusepath{draw}
+
+        \pgfpathmoveto{\pgfpoint{-\ctikzvalof{tripoles/isfet/waves x sep}\pgf at circ@res at up}{0cm}}
+        \pgfpathsine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf at circ@res at up}{-\ctikzvalof{tripoles/isfet/wave amp}\pgf at circ@res at up}}
+        \pgfpathcosine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf at circ@res at up}{\ctikzvalof{tripoles/isfet/wave amp}\pgf at circ@res at up}}
+        \pgfpathsine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf at circ@res at up}{\ctikzvalof{tripoles/isfet/wave amp}\pgf at circ@res at up}}
+        \pgfpathcosine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf at circ@res at up}{-\ctikzvalof{tripoles/isfet/wave amp}\pgf at circ@res at up}}
+        \pgfusepath{draw}
+
+        \pgfpathmoveto{\pgfpoint{-\ctikzvalof{tripoles/isfet/waves x sep}\pgf at circ@res at up}{-\ctikzvalof{tripoles/isfet/waves y sep}\pgf at circ@res at up}}
+        \pgfpathsine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf at circ@res at up}{-\ctikzvalof{tripoles/isfet/wave amp}\pgf at circ@res at up}}
+        \pgfpathcosine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf at circ@res at up}{\ctikzvalof{tripoles/isfet/wave amp}\pgf at circ@res at up}}
+        \pgfpathsine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf at circ@res at up}{\ctikzvalof{tripoles/isfet/wave amp}\pgf at circ@res at up}}
+        \pgfpathcosine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf at circ@res at up}{-\ctikzvalof{tripoles/isfet/wave amp}\pgf at circ@res at up}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+% end of transistors
+
+%%%%%%%%%%%%%
+%% Switches
+%%%%%%%%%%%%%
+
+\pgfcircdeclarebipole{
+	\anchor{out 1}{
+		\northeast
+		\pgf at y=0cm
+	}
+	\anchor{out 2}{
+		\northeast
+		\pgf at y=.8\pgf at y
+	}
+}
+{\ctikzvalof{tripoles/toggleswitch/height 2}}
+{toggleswitch}
+{\ctikzvalof{tripoles/toggleswitch/height}}
+{\ctikzvalof{tripoles/toggleswitch/width}}
+{
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+    \pgfpathlineto{\pgfpoint{.3\pgf at circ@res at left}{0pt}}
+    \pgfusepath{draw}
+    \pgfscope
+        \pgfpathmoveto{\pgfpoint{.3\pgf at circ@res at left}{0pt}}
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgfpathlineto{\pgfpoint{.7\pgf at circ@res at right}{.5\pgf at circ@res at up}}
+        \pgfusepath{draw}
+    \endpgfscope
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+    \pgfpathlineto{\pgfpoint{.5\pgf at circ@res at right}{0}}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{.8\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{.5\pgf at circ@res at right}{.8\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{.5\pgf at circ@res at right}{.15\pgf at circ@res at up}}
+    \pgfusepath{draw}
+
+
+    \pgfpathmoveto{\pgfpoint{.2\pgf at circ@res at left}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{.2\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfusepath{draw}
+
+    \pgfsetdash{{.08\pgf at circ@res at up}{.04\pgf at circ@res at up}{.7\pgf at circ@res at up}{.04\pgf at circ@res at up}{.8\pgf at circ@res at up}}{0cm}
+    \pgfpathmoveto{\pgfpoint{0}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{0}{.8\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{.2\pgf at circ@res at left}{.6\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{0}{.4\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{0}{.2\pgf at circ@res at up}}
+    \pgfusepath{draw}
+    \pgfsetdash{}{0cm}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% operational and instrumentation amplifiers
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\pgfdeclareshape{op amp}
+{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \anchor{center}{\pgfpointorigin}
+    \savedanchor\northwest{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/op amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/op amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    }
+    \savedanchor\left{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at x=-\ctikzvalof{tripoles/op amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at y=0pt
+    }
+    \anchor{south}{
+        \northwest
+        \pgf at y=-\pgf at y
+        \pgf at x=0pt
+    }
+    \anchor{north}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \savedanchor\left{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at x=-\ctikzvalof{tripoles/op amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at y=0pt
+    }
+    \savedanchor\inOneFixed{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/op amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at y=\ctikzvalof{tripoles/op amp/input height}\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/op amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    }
+    \anchor{in up}{
+        \inOneFixed
+    }
+    \anchor{in down}{
+        \inOneFixed
+        \pgf at y=-\pgf at y
+    }
+    \savedanchor\inOne{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/op amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at y=\ctikzvalof{tripoles/op amp/input height}\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/op amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    \ifpgf at circuit@oa at iplusup\pgf at y=-\pgf at y\fi
+    }
+    \anchor{-}{
+        \inOne
+    }
+    \anchor{+}{
+        \inOne
+        \pgf at y=-\pgf at y
+    }
+    \savedanchor\up{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/op amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/op amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        \pgfpointlineattime{
+            \ctikzvalof{tripoles/op amp/up pos}}{
+            \pgfpoint{
+            \ctikzvalof{tripoles/op amp/port width}\pgf at circ@res at left}
+        {\pgf at circ@res at up}}
+        {\pgfpoint{\ctikzvalof{tripoles/op amp/port width}\pgf at circ@res at right}{0pt}}
+    }
+    \anchor{up}{
+        \up
+    }
+    \anchor{down}{
+        \up
+        \pgf at y=-\pgf at y
+    }
+    \anchor{out}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{west}{
+        \left
+    }
+    \anchor{east}{
+        \left
+        \pgf at x=-\pgf at x
+    }
+
+    % support for border anchors
+    \savedanchor\leftedge{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at x=-\ctikzvalof{tripoles/op amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at x = \ctikzvalof{tripoles/op amp/port width}\pgf at x
+        \pgf at y=0pt
+    }
+    \anchor{leftedge}{\leftedge}
+    \anchor{rightedge}{\leftedge \pgf at x =-\pgf at x }
+    \anchor{bin up}{
+        \inOneFixed
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{bin down}{
+        \inOneFixed
+        \pgf at y=-\pgf at y
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{b-}{
+        \inOne
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{b+}{
+        \inOne
+        \pgf at y=-\pgf at y
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{bout}{
+        \leftedge
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    % end border anchors
+    \anchor{south west}{ \northwest \pgf at y=-\pgf at y }
+    \anchor{north east}{ \northwest \pgf at x=-\pgf at x }
+    \anchor{north west}{ \northwest }
+    \anchor{south east}{ \northwest \pgf at x=-\pgf at x \pgf at y=-\pgf at y }
+
+    \anchor{text}{
+        \ifpgf at circ@center at text
+            \pgf at x=\dimexpr -.6\wd\pgfnodeparttextbox\relax
+        \else
+            \leftedge
+            \pgfmathsetlength{\pgf at x}{\pgf at x + \ctikzvalof{left text distance}}
+        \fi
+        \pgf at y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+    }
+
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+
+        \northwest
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        \pgf at circ@scaled at Rlen=\scaledRlen
+
+				% Triangle
+        \pgfscope
+            \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+            \pgftransformxshift{\ctikzvalof{tripoles/op amp/port width}\pgf at circ@res at left}
+            \pgf at circ@res at step=\pgf at circ@res at right
+            \advance\pgf at circ@res at step by -\pgf at circ@res at left
+            \pgf at circ@res at step=\ctikzvalof{tripoles/op amp/port width}\pgf at circ@res at step
+
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{0pt}}
+            \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down}}
+            \pgfpathclose
+            \pgf at circ@draworfill
+        \endpgfscope
+
+				% Negative input terminal
+        \pgfpathmoveto{\pgfpoint
+            {\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/op amp/input height}\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/op amp/port width}\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/op amp/input height}\pgf at circ@res at up}}
+        \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/op amp/port width}\pgf at circ@res at left}{\ctikzvalof{tripoles/op amp/input height}\pgf at circ@res at up}]{\ctikzvalof{tripoles/op amp/font} \ifpgf at circuit@oa at iplusup\pgf at circ@ampli at plus\else\pgf at circ@ampli at minus\fi}
+
+				% Positive input terminal
+        \pgfpathmoveto{\pgfpoint
+            {\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/op amp/input height}\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/op amp/port width}\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/op amp/input height}\pgf at circ@res at down}}
+        \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/op amp/port width}\pgf at circ@res at left}{\ctikzvalof{tripoles/op amp/input height}\pgf at circ@res at down}]{\ctikzvalof{tripoles/op amp/font} \ifpgf at circuit@oa at iplusup\pgf at circ@ampli at minus\else\pgf at circ@ampli at plus\fi}
+
+        % Output terminal
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+        \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/op amp/port width}\pgf at circ@res at right}{0pt}}
+        \pgfsetrectcap
+        \pgfusepath{draw}
+    }
+}
+
+% Op amp shape as in european standard EN 60617
+\pgfdeclareshape{en amp}
+{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \anchor{center}{\pgfpointorigin}
+    \savedanchor\northwest{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/en amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/en amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    }
+    \savedanchor\left{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at x=-\ctikzvalof{tripoles/en amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at y=0pt
+    }
+    \anchor{south}{
+        \northwest
+        \pgf at y=-\pgf at y
+        \pgf at x=0pt
+    }
+    \anchor{north}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \savedanchor\inOneFixed{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/en amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at y=\ctikzvalof{tripoles/en amp/input height}\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/en amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    }
+    \anchor{in up}{
+        \inOneFixed
+    }
+    \anchor{in down}{
+        \inOneFixed
+        \pgf at y=-\pgf at y
+    }
+    \savedanchor\inOne{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/en amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at y=\ctikzvalof{tripoles/en amp/input height}\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/en amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    \ifpgf at circuit@oa at iplusup\pgf at y=-\pgf at y\fi
+    }
+    \anchor{-}{
+        \inOne
+    }
+    \anchor{+}{
+        \inOne
+        \pgf at y=-\pgf at y
+    }
+    \anchor{up}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{down}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{out}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{west}{
+        \left
+    }
+    \anchor{east}{
+        \left
+        \pgf at x=-\pgf at x
+    }
+    % support for border anchors
+    \savedanchor\leftedge{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at x=-\ctikzvalof{tripoles/en amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at x = \ctikzvalof{tripoles/en amp/port width}\pgf at x
+        \pgf at y=0pt
+    }
+    \anchor{leftedge}{\leftedge}
+    \anchor{rightedge}{\leftedge \pgf at x =-\pgf at x }
+    \anchor{bin up}{
+        \inOneFixed
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{bin down}{
+        \inOneFixed
+        \pgf at y=-\pgf at y
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{b-}{
+        \inOne
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{b+}{
+        \inOne
+        \pgf at y=-\pgf at y
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{bout}{
+        \leftedge
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    % end border anchors
+    \anchor{south west}{ \northwest \pgf at y=-\pgf at y }
+    \anchor{north east}{ \northwest \pgf at x=-\pgf at x }
+    \anchor{north west}{ \northwest }
+    \anchor{south east}{ \northwest \pgf at x=-\pgf at x \pgf at y=-\pgf at y }
+    \anchor{text}{
+        \ifpgf at circ@center at text
+            \pgf at x=\dimexpr -.6\wd\pgfnodeparttextbox\relax
+        \else
+            \leftedge
+            \pgfmathsetlength{\pgf at x}{\pgf at x + \ctikzvalof{left text distance}}
+        \fi
+        \pgf at y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+    }
+
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+        \northwest
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        \pgf at circ@scaled at Rlen=\scaledRlen
+
+        \pgfscope
+            \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+            \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf at circ@res at left}{\pgf at circ@res at down}}
+            \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf at circ@res at left}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf at circ@res at right}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf at circ@res at right}{\pgf at circ@res at down}}
+            \pgfpathclose
+            \pgf at circ@draworfill
+        \endpgfscope
+
+        \pgfpathmoveto{\pgfpoint
+            {\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/en amp/input height}\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/en amp/port width}\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/en amp/input height}\pgf at circ@res at up}}
+        \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf at circ@res at left}{\ctikzvalof{tripoles/en amp/input height}\pgf at circ@res at up}]{\ctikzvalof{tripoles/en amp/font} \ifpgf at circuit@oa at iplusup\pgf at circ@ampli at plus\else\pgf at circ@ampli at minus\fi}
+
+        \pgfpathmoveto{\pgfpoint
+            {\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/en amp/input height}\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/en amp/port width}\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/en amp/input height}\pgf at circ@res at down}}
+        \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf at circ@res at left}{\ctikzvalof{tripoles/en amp/input height}\pgf at circ@res at down}]{\ctikzvalof{tripoles/en amp/font} \ifpgf at circuit@oa at iplusup\pgf at circ@ampli at minus\else\pgf at circ@ampli at plus\fi}
+
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+        \pgfpathlineto{\pgfpoint{.7\pgf at circ@res at right}{0pt}}
+        \pgfsetrectcap
+        \pgfusepath{draw}
+
+
+        \pgftext[top, y=-.5ex, at=\pgfpoint{0pt}{\pgf at circ@res at up}]{\hbox{\ctikzvalof{tripoles/en amp/font2}\ctikzvalof{tripoles/en amp/text}}}
+        % \pgftext[top, y=-.5ex, at=\pgfpoint{0pt}{\pgf at circ@res at up}]{\ctikzvalof{tripoles/en amp/font2}$\mathstrut{\triangleright}\,\mathrm{A}$}
+    }
+}
+
+% Fully differential output op amp
+% Contributed by Kristofer M. Monisit
+\pgfdeclareshape{fd op amp}
+{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \anchor{center}{\pgfpointorigin}
+    \savedanchor\northwest{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/fd op amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/fd op amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    }
+    \savedanchor\outline{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/fd op amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/fd op amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    \ifpgf at circuit@oa at oplusup\else\pgf at y=-\pgf at y\fi
+    }
+    \anchor{south}{
+        \northwest
+        \pgf at y=-\pgf at y\pgf at x=0pt\relax
+    }
+    \anchor{north}{
+        \northwest\pgf at x=0pt\relax
+    }
+    \savedanchor\left{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at x=-\ctikzvalof{tripoles/fd op amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at y=0pt
+    }
+    \savedanchor\inOneFixed{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/fd op amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at y=\ctikzvalof{tripoles/fd op amp/input height}\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/fd op amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    }
+    \anchor{in up}{
+        \inOneFixed
+    }
+    \anchor{in down}{
+        \inOneFixed
+        \pgf at y=-\pgf at y
+    }
+    \savedanchor\inOne{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/fd op amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at y=\ctikzvalof{tripoles/fd op amp/input height}\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/fd op amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    \ifpgf at circuit@oa at iplusup\pgf at y=-\pgf at y\fi
+    }
+    \anchor{-}{
+        \inOne
+    }
+    \anchor{+}{
+        \inOne
+        \pgf at y=-\pgf at y
+    }
+    \savedanchor\up{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/fd op amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/fd op amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        \pgfpointlineattime{
+            \ctikzvalof{tripoles/fd op amp/up pos}}{
+            \pgfpoint{
+            \ctikzvalof{tripoles/fd op amp/port width}\pgf at circ@res at left}
+        {\pgf at circ@res at up}}
+        {\pgfpoint{\ctikzvalof{tripoles/fd op amp/port width}\pgf at circ@res at right}{0pt}}
+    }
+    \anchor{up}{
+        \up
+    }
+    \anchor{down}{
+        \up
+        \pgf at y=-\pgf at y
+    }
+    \anchor{out up}{
+        \northwest
+        \pgf at y=\ctikzvalof{tripoles/fd op amp/output height}\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/fd op amp/port width}\pgf at x
+    }
+    \anchor{out down}{
+        \northwest
+        \pgf at y=-\ctikzvalof{tripoles/fd op amp/output height}\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/fd op amp/port width}\pgf at x
+    }
+    \anchor{out +}{
+        \outline
+        \pgf at y=\ctikzvalof{tripoles/fd op amp/output height}\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/fd op amp/port width}\pgf at x
+    }
+    \anchor{out -}{
+        \outline
+        \pgf at y=-\ctikzvalof{tripoles/fd op amp/output height}\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/fd op amp/port width}\pgf at x
+    }
+    % support for border anchors
+    \savedanchor\leftedge{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at x=-\ctikzvalof{tripoles/fd op amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at x = \ctikzvalof{tripoles/fd op amp/port width}\pgf at x
+        \pgf at y=0pt
+    }
+    \anchor{leftedge}{\leftedge}
+    \anchor{rightedge}{\leftedge \pgf at x =-\pgf at x }
+    \anchor{bin up}{
+        \inOneFixed
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{bin down}{
+        \inOneFixed
+        \pgf at y=-\pgf at y
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{b-}{
+        \inOne
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{b+}{
+        \inOne
+        \pgf at y=-\pgf at y
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{bout}{
+        \leftedge
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{bout +}{
+        \outline
+        \pgf at xa=\pgf at x\pgf at ya=\pgf at y
+        \pgfpointlineattime{\ctikzvalof{tripoles/fd op amp/output height}}
+            {\pgfpoint{\pgf at xa}{0pt}}
+            {\pgfpoint{0pt}{\pgf at ya}}
+    }
+    \anchor{bout -}{
+        \outline
+        \pgf at xa=\pgf at x\pgf at ya=\pgf at y
+        \pgfpointlineattime{\ctikzvalof{tripoles/fd op amp/output height}}
+            {\pgfpoint{\pgf at xa}{0pt}}
+            {\pgfpoint{0pt}{\pgf at ya}}
+        \pgf at y=-\pgf at y
+    }
+    \anchor{bout up}{
+        \northwest
+        \pgf at xa=\pgf at x\pgf at ya=\pgf at y
+        \pgfpointlineattime{\ctikzvalof{tripoles/fd op amp/output height}}
+            {\pgfpoint{\pgf at xa}{0pt}}
+            {\pgfpoint{0pt}{\pgf at ya}}
+    }
+    \anchor{bout down}{
+        \northwest
+        \pgf at xa=\pgf at x\pgf at ya=\pgf at y
+        \pgfpointlineattime{\ctikzvalof{tripoles/fd op amp/output height}}
+            {\pgfpoint{\pgf at xa}{0pt}}
+            {\pgfpoint{0pt}{\pgf at ya}}
+        \pgf at y=-\pgf at y
+    }
+    % end border anchors
+    \anchor{west}{
+        \left
+    }
+    \anchor{east}{
+        \left
+        \pgf at x=-\ctikzvalof{tripoles/fd op amp/port width}\pgf at x
+    }
+    \anchor{out}{% should not be used
+        \left
+        \pgf at x=-\ctikzvalof{tripoles/fd op amp/port width}\pgf at x
+    }
+    \anchor{south west}{ \northwest \pgf at y=-\pgf at y }
+    \anchor{north east}{ \northwest \pgf at x=-\ctikzvalof{tripoles/fd op amp/port width}\pgf at x }
+    \anchor{north west}{ \northwest }
+    \anchor{south east}{ \northwest \pgf at x=-\ctikzvalof{tripoles/fd op amp/port width}\pgf at x \pgf at y=-\pgf at y }
+    \anchor{text}{
+        \ifpgf at circ@center at text
+            \pgf at x=\dimexpr -.6\wd\pgfnodeparttextbox\relax
+        \else
+            \leftedge
+            \pgfmathsetlength{\pgf at x}{\pgf at x + \ctikzvalof{left text distance}}
+        \fi
+        \pgf at y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+    }
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+
+        \northwest
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        \pgf at circ@scaled at Rlen=\scaledRlen
+
+        % Triangle
+        % Includes output terminals in the traingular shape
+        % to ensure that diagonal joins are properly displayed
+        % we first draw the main triangle and the leads with normal thickness,
+        % and the redraw the main triangle with the component shape
+        \pgfscope
+            % shift origin a bit to ease calculations
+            \pgftransformxshift{\ctikzvalof{tripoles/fd op amp/port width}\pgf at circ@res at left}
+            \pgf at circ@res at step=\pgf at circ@res at right
+            \advance\pgf at circ@res at step by -\pgf at circ@res at left
+            \pgf at circ@res at step=\ctikzvalof{tripoles/fd op amp/port width}\pgf at circ@res at step
+
+            % Initial point (right vertex)
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{0pt}}
+
+            % Negative output terminal
+            \pgfpathlineto{\pgfpointlineattime{\ctikzvalof{tripoles/fd op amp/output height}}{\pgfpoint{\pgf at circ@res at step}{0pt}}{\pgfpoint{0pt}{\pgf at circ@res at up}}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{\ctikzvalof{tripoles/fd op amp/output height}\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpointlineattime{\ctikzvalof{tripoles/fd op amp/output height}}{\pgfpoint{\pgf at circ@res at step}{0pt}}{\pgfpoint{0pt}{\pgf at circ@res at up}}}
+
+            % Top vertex
+            \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+
+            % Bottom vertex
+            \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down}}
+
+            % Positive output terminal
+            \pgfpathlineto{\pgfpointlineattime{\ctikzvalof{tripoles/fd op amp/output height}}{\pgfpoint{\pgf at circ@res at step}{0pt}}{\pgfpoint{0pt}{\pgf at circ@res at down}}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{\ctikzvalof{tripoles/fd op amp/output height}\pgf at circ@res at down}}
+            \pgfpathlineto{\pgfpointlineattime{\ctikzvalof{tripoles/fd op amp/output height}}{\pgfpoint{\pgf at circ@res at step}{0pt}}{\pgfpoint{0pt}{\pgf at circ@res at down}}}
+
+            % Right vertex
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{0pt}}
+
+            \pgfpathclose
+            \pgfusepath{stroke}
+
+            % ok, now we'll redraw the triangle with the class specific
+            % thickness and optionally fill
+
+            \pgfscope
+                \pgf at circ@setlinewidth{quadpoles}{\pgflinewidth}
+
+                % Initial point (right vertex)
+                \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{0pt}}
+                % Top vertex
+                \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+                % Bottom vertex
+                \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down}}
+
+                \pgfpathclose
+                \pgf at circ@draworfill
+            \endpgfscope % thick and fill
+        \endpgfscope % shift
+
+        % Negative input terminal
+        \pgfpathmoveto{\pgfpoint
+            {\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/fd op amp/input height}\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/fd op amp/port width}\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/fd op amp/input height}\pgf at circ@res at up}}
+        \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/fd op amp/port width}\pgf at circ@res at left}{\ctikzvalof{tripoles/fd op amp/input height}\pgf at circ@res at up}]{\ctikzvalof{tripoles/fd op amp/font} \ifpgf at circuit@oa at iplusup\pgf at circ@ampli at plus\else\pgf at circ@ampli at minus\fi}
+
+        % Positive input terminal
+        \pgfpathmoveto{\pgfpoint
+            {\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/fd op amp/input height}\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/fd op amp/port width}\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/fd op amp/input height}\pgf at circ@res at down}}
+        \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/fd op amp/port width}\pgf at circ@res at left}{\ctikzvalof{tripoles/fd op amp/input height}\pgf at circ@res at down}]{\ctikzvalof{tripoles/fd op amp/font} \ifpgf at circuit@oa at iplusup\pgf at circ@ampli at minus\else\pgf at circ@ampli at plus\fi}
+
+        % Negative output terminal label
+        \pgftext[right, bottom, x=3pt, y=1pt, at=\pgfpoint{0pt}{0.425\pgf at circ@res at down}]{\ctikzvalof{tripoles/fd op amp/font} \ifpgf at circuit@oa at oplusup\pgf at circ@ampli at minus\else\pgf at circ@ampli at plus\fi}
+
+        % Positive output terminal label
+        \pgftext[right, top, x=3pt, y=-1pt, at=\pgfpoint{0pt}{0.425\pgf at circ@res at up}]{\ctikzvalof{tripoles/fd op amp/font} \ifpgf at circuit@oa at oplusup\pgf at circ@ampli at plus\else\pgf at circ@ampli at minus\fi}
+
+        \pgfsetrectcap
+        \pgfusepath{draw}
+    }
+}
+
+
+% Instrumentation amplifier with differential output
+\pgfdeclareshape{fd inst amp}
+{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    % when tikz calls the anchor it wants the relative position in the lengths
+    % \pgf at x  \pgf at y
+    % \pgfpoint* functions set that variables
+    % anchors are visible outside and run on use
+    \anchor{center}{\pgfpointorigin}
+    % savedanchors are internals and run on node creation (not use)
+    % bounding-box top left
+    \savedanchor\northwest{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/fd inst amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/fd inst amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    }
+    \anchor{nw}{
+        \northwest
+    }
+    \anchor{south}{
+        \northwest
+        \pgf at y=-\pgf at y\pgf at x=0pt\relax
+    }
+    \anchor{north}{
+        \northwest\pgf at x=0pt\relax
+    }
+    \savedanchor\left{%
+        \pgf at y=0pt
+    }
+    \anchor{leftedge}
+    {\left
+        \pgf at x = \ctikzvalof{tripoles/fd inst amp/port width}\pgf at x
+    }
+    \savedanchor\inOneFixed{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+          \pgf at y=\ctikzvalof{tripoles/fd inst amp/height}\pgf at circ@scaled at Rlen
+          \pgf at y=.5\pgf at y
+          \pgf at y=\ctikzvalof{tripoles/fd inst amp/input height}\pgf at y
+          \pgf at x=-\ctikzvalof{tripoles/fd inst amp/width}\pgf at circ@scaled at Rlen
+          \pgf at x=.5\pgf at x
+    }
+    \anchor{in up}{
+        \inOneFixed
+    }
+    \anchor{in down}{
+        \inOneFixed
+        \pgf at y=-\pgf at y
+    }
+    \savedanchor\inOne{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/fd inst amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at y=\ctikzvalof{tripoles/fd inst amp/input height}\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/fd inst amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \ifpgf at circuit@oa at iplusup\pgf at y=-\pgf at y\fi
+    }
+    \anchor{-}{
+        \inOne
+    }
+    \anchor{+}{
+        \inOne
+        \pgf at y=-\pgf at y
+    }
+    \savedanchor\up{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/fd inst amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/fd inst amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        \pgfpointlineattime{
+            \ctikzvalof{tripoles/fd inst amp/up pos}}{
+            \pgfpoint{
+            \ctikzvalof{tripoles/fd inst amp/port width}\pgf at circ@res at left}
+        {\pgf at circ@res at up}}
+        {\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf at circ@res at right}{\ctikzvalof{tripoles/fd inst amp/height 2}\pgf at circ@res at up}}
+    }
+    \anchor{up}{
+        \up
+    }
+    \anchor{down}{
+        \up
+        \pgf at y=-\pgf at y
+    }
+    % reference voltage input anchors.
+    \savedanchor\refv{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/fd inst amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/fd inst amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        \pgfpointlineattime{
+            \ctikzvalof{tripoles/fd inst amp/refv pos}}{
+            \pgfpoint{
+            \ctikzvalof{tripoles/fd inst amp/port width}\pgf at circ@res at left}
+        {\pgf at circ@res at up}}
+        {\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf at circ@res at right}{\ctikzvalof{tripoles/fd inst amp/height 2}\pgf at circ@res at up}}
+    }
+    % we need both because they are normally drawn under the amp, and if you
+    % mirror it vertically you need them
+    \anchor{refv up}{
+        \refv
+    }
+    \anchor{refv down}{
+        \refv
+        \pgf at y=-\pgf at y
+    }
+    \savedanchor\outport{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/fd inst amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at y=\ctikzvalof{tripoles/fd inst amp/input height}\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/fd inst amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=-.5\pgf at x
+        \ifpgf at circuit@oa at oplusup\else\pgf at y=-\pgf at y\fi
+    }
+    \anchor{out}{
+        \outport
+        \pgf at y=0pt
+    }
+    \anchor{out +}{
+        \outport
+    }
+    \anchor{out -}{
+        \outport
+        \pgf at y=-\pgf at y
+    }
+    \savedanchor\outportfixed{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/fd inst amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at y=\ctikzvalof{tripoles/fd inst amp/input height}\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/fd inst amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=-.5\pgf at x
+    }
+    \anchor{out up}{
+        \outportfixed
+    }
+    \anchor{out down}{
+        \outportfixed
+        \pgf at y=-\pgf at y
+    }
+    % support for border anchors
+    \savedanchor\leftedge{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at x=-\ctikzvalof{tripoles/fd inst amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at x = \ctikzvalof{tripoles/fd inst amp/port width}\pgf at x
+        \pgf at y=0pt
+    }
+    \anchor{leftedge}{\leftedge}
+    \anchor{rightedge}{\leftedge \pgf at x =-\pgf at x }
+    \anchor{bin up}{
+        \inOneFixed
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{bin down}{
+        \inOneFixed
+        \pgf at y=-\pgf at y
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{b-}{
+        \inOne
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{b+}{
+        \inOne
+        \pgf at y=-\pgf at y
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{bout}{
+        \leftedge
+        \pgf at x=-\pgf at x \pgf at y=0pt
+    }
+    \anchor{bout +}{
+        \outport
+        \pgf at ya=\pgf at y \leftedge \pgf at x=-\pgf at x \pgf at y=\pgf at ya
+    }
+    \anchor{bout -}{
+        \outport
+        \pgf at y=-\pgf at y
+        \pgf at ya=\pgf at y \leftedge \pgf at x=-\pgf at x \pgf at y=\pgf at ya
+    }
+    \anchor{bout up}{
+        \outportfixed
+        \pgf at ya=\pgf at y \leftedge \pgf at x=-\pgf at x \pgf at y=\pgf at ya
+    }
+    \anchor{bout down}{
+        \outportfixed
+        \pgf at y=-\pgf at y
+        \pgf at ya=\pgf at y \leftedge \pgf at x=-\pgf at x \pgf at y=\pgf at ya
+    }
+    % end border anchors
+    %
+    \anchor{west}{
+        \left
+    }
+    \anchor{east}{
+        \left
+        \pgf at x=-\pgf at x
+    }
+    \anchor{south west}{ \northwest \pgf at y=-\pgf at y }
+    \anchor{north east}{ \northwest \pgf at x=-\pgf at x }
+    \anchor{north west}{ \northwest }
+    \anchor{south east}{ \northwest \pgf at x=-\pgf at x \pgf at y=-\pgf at y }
+    \anchor{text}{
+        \ifpgf at circ@center at text
+            \pgf at x=\dimexpr -.6\wd\pgfnodeparttextbox\relax
+        \else
+            \leftedge
+            \pgfmathsetlength{\pgf at x}{\pgf at x + \ctikzvalof{left text distance}}
+        \fi
+        \pgf at y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+    }
+
+    % let's start drawing the component
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+        %
+        \northwest
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        \pgf at circ@scaled at Rlen=\scaledRlen
+        % main component, normally in thicker lines
+        \pgfscope
+            \newdimen\pgf at circ@res at right@double
+						\pgf at circ@res at right@double=2\pgf at circ@res at right
+
+            \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+            \pgftransformxshift{\ctikzvalof{tripoles/fd inst amp/port width}\pgf at circ@res at left}
+            \pgf at circ@res at step=\pgf at circ@res at right
+            \advance\pgf at circ@res at step by -\pgf at circ@res at left
+            \pgf at circ@res at step=\ctikzvalof{tripoles/fd inst amp/port width}\pgf at circ@res at step
+            %first point (near output)
+            \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf at circ@res at right@double}{0}}
+            %from the exit to the top (short side)... (note that the .6 must be copied in \up and \refv anchors
+            \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf at circ@res at right@double}{\ctikzvalof{tripoles/fd inst amp/height 2}\pgf at circ@res at up}}
+            % and then to the input "front up", "down", to the output short side "down"
+            \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down}}
+            \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf at circ@res at right@double}{\ctikzvalof{tripoles/fd inst amp/height 2}\pgf at circ@res at down}}
+            % ...and close
+            \pgfpathclose
+            \pgf at circ@draworfill
+        \endpgfscope
+
+        % input terminal up
+        \pgfpathmoveto{\pgfpoint
+            {\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/fd inst amp/input height}\pgf at circ@res at up}}
+        %
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/fd inst amp/port width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/fd inst amp/input height}\pgf at circ@res at up}}
+        %
+        \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf at circ@res at left}{\ctikzvalof{tripoles/fd inst amp/input height}\pgf at circ@res at up}]{\ctikzvalof{tripoles/fd inst amp/font} \ifpgf at circuit@oa at iplusup\pgf at circ@ampli at plus\else\pgf at circ@ampli at minus\fi}
+
+        % input terminal down
+        \pgfpathmoveto{\pgfpoint
+            {\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/fd inst amp/input height}\pgf at circ@res at down}}
+        %
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/fd inst amp/port width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/fd inst amp/input height}\pgf at circ@res at down}}
+        \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf at circ@res at left}{\ctikzvalof{tripoles/fd inst amp/input height}\pgf at circ@res at down}]{\ctikzvalof{tripoles/fd inst amp/font} \ifpgf at circuit@oa at iplusup\pgf at circ@ampli at minus\else\pgf at circ@ampli at plus\fi}
+
+        % output leads down and up
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\ctikzvalof{tripoles/fd inst amp/output height}\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf at circ@res at right}{\ctikzvalof{tripoles/fd inst amp/output height}\pgf at circ@res at down}} %
+        \pgftext[right, at=\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf at circ@res at right}{\ctikzvalof{tripoles/fd inst amp/output height}\pgf at circ@res at down}]{\ctikzvalof{tripoles/fd inst amp/font}\ifpgf at circuit@oa at oplusup$-\;$\else$+\;$\fi}
+
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\ctikzvalof{tripoles/fd inst amp/output height}\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf at circ@res at right}{\ctikzvalof{tripoles/fd inst amp/output height}\pgf at circ@res at up}} %
+        \pgftext[right, at=\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf at circ@res at right}{\ctikzvalof{tripoles/fd inst amp/output height}\pgf at circ@res at up}]{\ctikzvalof{tripoles/fd inst amp/font}\ifpgf at circuit@oa at oplusup$+\;$\else$-\;$\fi}
+        %
+        \pgfsetrectcap
+        \pgfusepath{draw}
+    }
+}
+
+% Transconductance amplifier (Transkonduktanzverstärker)
+\pgfdeclareshape{gm amp}
+{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \anchor{center}{\pgfpointorigin}
+    \savedanchor\northwest{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/gm amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/gm amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    }
+    \anchor{south}{
+        \northwest
+        \pgf at y=-\pgf at y
+    }
+    \anchor{north}{
+        \northwest
+    }
+    \savedanchor\left{%
+        \pgf at y=0pt
+    }
+    \anchor{leftedge}
+    {\left
+        \pgf at x = \ctikzvalof{tripoles/op amp/port width}\pgf at x
+    }
+    \savedanchor\inOneFixed{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/gm amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at y=\ctikzvalof{tripoles/gm amp/input height}\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/gm amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    }
+    \anchor{in up}{
+        \inOneFixed
+    }
+    \anchor{in down}{
+        \inOneFixed
+        \pgf at y=-\pgf at y
+    }
+    \savedanchor\inOne{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/gm amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at y=\ctikzvalof{tripoles/gm amp/input height}\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/gm amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \ifpgf at circuit@oa at iplusup\pgf at y=-\pgf at y\fi
+    }
+    \anchor{-}{
+        \inOne
+    }
+    \anchor{+}{
+        \inOne
+        \pgf at y=-\pgf at y
+    }
+        \savedanchor\up{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/gm amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/gm amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        \pgfpointlineattime{
+            \ctikzvalof{tripoles/gm amp/up pos}}{
+            \pgfpoint{
+            \ctikzvalof{tripoles/gm amp/port width}\pgf at circ@res at left}
+        {\pgf at circ@res at up}}
+        {\pgfpoint{\ctikzvalof{tripoles/gm amp/port width}\pgf at circ@res at right}{\ctikzvalof{tripoles/gm amp/height 2}\pgf at circ@res at up}}
+    }
+    \anchor{up}{
+        \up
+    }
+    \anchor{down}{
+        \up
+        \pgf at y=-\pgf at y
+    }
+    \anchor{out}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    % support for border anchors
+    \savedanchor\leftedge{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at x=-\ctikzvalof{tripoles/gm amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at x = \ctikzvalof{tripoles/gm amp/port width}\pgf at x
+        \pgf at y=0pt
+    }
+    \anchor{leftedge}{\leftedge}
+    \anchor{rightedge}{\leftedge \pgf at x =-\pgf at x }
+    \anchor{bin up}{
+        \inOneFixed
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{bin down}{
+        \inOneFixed
+        \pgf at y=-\pgf at y
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{b-}{
+        \inOne
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{b+}{
+        \inOne
+        \pgf at y=-\pgf at y
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{bout}{
+        \leftedge
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    % end border anchors
+    \anchor{west}{
+        \left
+    }
+    \anchor{east}{
+        \left
+        \pgf at x=-\pgf at x
+    }
+    \anchor{south west}{ \northwest \pgf at y=-\pgf at y }
+    \anchor{north east}{ \northwest \pgf at x=-\pgf at x }
+    \anchor{north west}{ \northwest }
+    \anchor{south east}{ \northwest \pgf at x=-\pgf at x \pgf at y=-\pgf at y }
+
+    \anchor{text}{
+        \ifpgf at circ@center at text
+            \pgf at x=\dimexpr -.6\wd\pgfnodeparttextbox\relax
+        \else
+            \leftedge
+            \pgfmathsetlength{\pgf at x}{\pgf at x + \ctikzvalof{left text distance}}
+        \fi
+        \pgf at y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+    }
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+
+        \northwest
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        \pgf at circ@scaled at Rlen=\scaledRlen
+
+        \pgfscope
+            \newdimen\pgf at circ@res at right@double
+						\pgf at circ@res at right@double=2\pgf at circ@res at right
+
+            \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+            \pgftransformxshift{\ctikzvalof{tripoles/gm amp/port width}\pgf at circ@res at left}
+            \pgf at circ@res at step=\pgf at circ@res at right
+            \advance\pgf at circ@res at step by -\pgf at circ@res at left
+            \pgf at circ@res at step=\ctikzvalof{tripoles/gm amp/port width}\pgf at circ@res at step
+            %Umrandung:
+            \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/gm amp/port width}\pgf at circ@res at right@double}{0}} %geändert startpunkt neu am ausgangsstrich
+            \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/gm amp/port width}\pgf at circ@res at right@double}{\ctikzvalof{tripoles/gm amp/height 2}\pgf at circ@res at up}}%vom Ausgang nach oben
+            \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up}} %neu ecke links oben nach rechts oben
+            \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down}} %bei deneigängen runter
+            \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/gm amp/port width}\pgf at circ@res at right@double}{\ctikzvalof{tripoles/gm amp/height 2}\pgf at circ@res at down}}%ecke links unten nach rechts unten
+            \pgfpathclose
+            \pgf at circ@draworfill
+        \endpgfscope
+
+        \pgfpathmoveto{\pgfpoint
+            {\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/gm amp/input height}\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/gm amp/port width}\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/gm amp/input height}\pgf at circ@res at up}}
+        \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/gm amp/port width}\pgf at circ@res at left}{\ctikzvalof{tripoles/gm amp/input height}\pgf at circ@res at up}]{\ctikzvalof{tripoles/gm amp/font} \ifpgf at circuit@oa at iplusup\pgf at circ@ampli at plus\else\pgf at circ@ampli at minus\fi}
+
+
+        \pgfpathmoveto{\pgfpoint
+            {\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/gm amp/input height}\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/gm amp/port width}\pgf at circ@res at left}
+            {\ctikzvalof{tripoles/gm amp/input height}\pgf at circ@res at down}}
+        \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/gm amp/port width}\pgf at circ@res at left}{\ctikzvalof{tripoles/gm amp/input height}\pgf at circ@res at down}]{\ctikzvalof{tripoles/gm amp/font} \ifpgf at circuit@oa at iplusup\pgf at circ@ampli at minus\else\pgf at circ@ampli at plus\fi}
+
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+        \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/gm amp/port width}\pgf at circ@res at right}{0pt}} %
+        \pgfsetrectcap
+        \pgfusepath{draw}
+
+    }
+}
+
+% Instrumentation amplifier
+\pgfdeclareshape{inst amp}
+{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    % when tikz calls the anchor it wants the relative position in the lengths
+    % \pgf at x  \pgf at y
+    % \pgfpoint* functions set that variables
+    % anchors are visible outside and run on use
+    \anchor{center}{\pgfpointorigin}
+    % savedanchors are internals and run on node creation (not use)
+    % bounding-box top left
+    \savedanchor\northwest{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/inst amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/inst amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    }
+    \anchor{nw}{
+        \northwest
+    }
+    \anchor{south}{
+        \northwest
+        \pgf at y=-\pgf at y
+    }
+    \anchor{north}{
+        \northwest
+    }
+    \savedanchor\left{%
+        \pgf at y=0pt
+    }
+    \anchor{leftedge}
+    {\left
+        \pgf at x = \ctikzvalof{tripoles/op amp/port width}\pgf at x
+    }
+    \savedanchor\inOneFixed{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+          \pgf at y=\ctikzvalof{tripoles/inst amp/height}\pgf at circ@scaled at Rlen
+          \pgf at y=.5\pgf at y
+          \pgf at y=\ctikzvalof{tripoles/inst amp/input height}\pgf at y
+          \pgf at x=-\ctikzvalof{tripoles/inst amp/width}\pgf at circ@scaled at Rlen
+          \pgf at x=.5\pgf at x
+    }
+    \anchor{in up}{
+        \inOneFixed
+    }
+    \anchor{in down}{
+        \inOneFixed
+        \pgf at y=-\pgf at y
+    }
+    \savedanchor\inOne{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/inst amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at y=\ctikzvalof{tripoles/inst amp/input height}\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/inst amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \ifpgf at circuit@oa at iplusup\pgf at y=-\pgf at y\fi
+    }
+    \anchor{-}{
+        \inOne
+    }
+    \anchor{+}{
+        \inOne
+        \pgf at y=-\pgf at y
+    }
+    \savedanchor\up{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/inst amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/inst amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        \pgfpointlineattime{
+            \ctikzvalof{tripoles/inst amp/up pos}}{
+            \pgfpoint{
+            \ctikzvalof{tripoles/inst amp/port width}\pgf at circ@res at left}
+        {\pgf at circ@res at up}}
+        {\pgfpoint{\ctikzvalof{tripoles/inst amp/port width}\pgf at circ@res at right}{\ctikzvalof{tripoles/inst amp/height 2}\pgf at circ@res at up}}
+    }
+    \anchor{up}{
+        \up
+    }
+    \anchor{down}{
+        \up
+        \pgf at y=-\pgf at y
+    }
+    % reference voltage input anchors.
+    \savedanchor\refv{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/inst amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/inst amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        \pgfpointlineattime{
+            \ctikzvalof{tripoles/inst amp/refv pos}}{
+            \pgfpoint{
+            \ctikzvalof{tripoles/inst amp/port width}\pgf at circ@res at left}
+        {\pgf at circ@res at up}}
+        {\pgfpoint{\ctikzvalof{tripoles/inst amp/port width}\pgf at circ@res at right}{\ctikzvalof{tripoles/inst amp/height 2}\pgf at circ@res at up}}
+    }
+    % we need both because they are normally drawn under the amp, and if you
+    % mirror it vertically you need them
+    \anchor{refv up}{
+        \refv
+    }
+    \anchor{refv down}{
+        \refv
+        \pgf at y=-\pgf at y
+    }
+    \anchor{out}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    % support for border anchors
+    \savedanchor\leftedge{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at x=-\ctikzvalof{tripoles/inst amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at x = \ctikzvalof{tripoles/inst amp/port width}\pgf at x
+        \pgf at y=0pt
+    }
+    \anchor{leftedge}{\leftedge}
+    \anchor{rightedge}{\leftedge \pgf at x =-\pgf at x }
+    \anchor{bin up}{
+        \inOneFixed
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{bin down}{
+        \inOneFixed
+        \pgf at y=-\pgf at y
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{b-}{
+        \inOne
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{b+}{
+        \inOne
+        \pgf at y=-\pgf at y
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{bout}{
+        \leftedge
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    % end border anchors
+    \anchor{west}{
+        \left
+    }
+    \anchor{east}{
+        \left
+        \pgf at x=-\pgf at x
+    }
+    \anchor{south west}{ \northwest \pgf at y=-\pgf at y }
+    \anchor{north east}{ \northwest \pgf at x=-\pgf at x }
+    \anchor{north west}{ \northwest }
+    \anchor{south east}{ \northwest \pgf at x=-\pgf at x \pgf at y=-\pgf at y }
+
+    \anchor{text}{
+        \ifpgf at circ@center at text
+            \pgf at x=\dimexpr -.6\wd\pgfnodeparttextbox\relax
+        \else
+            \leftedge
+            \pgfmathsetlength{\pgf at x}{\pgf at x + \ctikzvalof{left text distance}}
+        \fi
+        \pgf at y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+    }
+
+    % let's start drawing the component
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+        %
+        \northwest
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        \pgf at circ@scaled at Rlen=\scaledRlen
+
+        % main component, normally in thicker lines
+        \pgfscope
+            \newdimen\pgf at circ@res at right@double
+						\pgf at circ@res at right@double=2\pgf at circ@res at right
+
+            \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+            \pgftransformxshift{\ctikzvalof{tripoles/inst amp/port width}\pgf at circ@res at left}
+            \pgf at circ@res at step=\pgf at circ@res at right
+            \advance\pgf at circ@res at step by -\pgf at circ@res at left
+            \pgf at circ@res at step=\ctikzvalof{tripoles/inst amp/port width}\pgf at circ@res at step
+            %first point (near output)
+            \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/inst amp/port width}\pgf at circ@res at right@double}{0}}
+            %from the exit to the top (short side)... (note that the .6 must be copied in \up and \refv anchors
+            \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/inst amp/port width}\pgf at circ@res at right@double}{\ctikzvalof{tripoles/inst amp/height 2}\pgf at circ@res at up}}
+            % and then to the input "front up", "down", to the output short side "down"
+            \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down}}
+            \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/inst amp/port width}\pgf at circ@res at right@double}{\ctikzvalof{tripoles/inst amp/height 2}\pgf at circ@res at down}}
+            % ...and close
+            \pgfpathclose
+            \pgf at circ@draworfill
+        \endpgfscope
+
+        % Negative input terminal
+        \pgfpathmoveto{\pgfpoint
+            {\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/inst amp/input height}\pgf at circ@res at up}}
+        %
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/inst amp/port width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/inst amp/input height}\pgf at circ@res at up}}
+        %
+        \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/inst amp/port width}\pgf at circ@res at left}{\ctikzvalof{tripoles/inst amp/input height}\pgf at circ@res at up}]{\ctikzvalof{tripoles/inst amp/font} \ifpgf at circuit@oa at iplusup\pgf at circ@ampli at plus\else\pgf at circ@ampli at minus\fi}
+
+        % Positive input terminal
+        \pgfpathmoveto{\pgfpoint
+            {\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/inst amp/input height}\pgf at circ@res at down}}
+        %
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/inst amp/port width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/inst amp/input height}\pgf at circ@res at down}}
+    \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/inst amp/port width}\pgf at circ@res at left}{\ctikzvalof{tripoles/inst amp/input height}\pgf at circ@res at down}]{\ctikzvalof{tripoles/inst amp/font} \ifpgf at circuit@oa at iplusup\pgf at circ@ampli at minus\else\pgf at circ@ampli at plus\fi}
+
+        % Output terminal
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+        \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/inst amp/port width}\pgf at circ@res at right}{0pt}} %
+        %
+        \pgfsetrectcap
+        \pgfusepath{draw}
+    }
+}
+
+% Instrumentation amplifier with terminals for gain resistance between inputs
+\pgfdeclareshape{inst amp ra}
+{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \anchor{center}{\pgfpointorigin}
+    % bounding-box top left
+    \savedanchor\northwest{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/inst amp ra/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/inst amp ra/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    }
+    \anchor{nw}{
+        \northwest
+    }
+    \anchor{south}{
+        \northwest
+        \pgf at y=-\pgf at y\pgf at x=0pt\relax
+    }
+    \anchor{north}{
+        \northwest\pgf at x=0pt\relax
+    }
+    \savedanchor\left{%
+        \pgf at y=0pt
+    }
+    \anchor{leftedge}
+    {\left
+        \pgf at x = \ctikzvalof{tripoles/op amp/port width}\pgf at x
+    }
+    % inputs (+-)
+    \savedanchor\inOneFixed{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+          \pgf at y=\ctikzvalof{tripoles/inst amp ra/height}\pgf at circ@scaled at Rlen
+          \pgf at y=.5\pgf at y
+          \pgf at y=\ctikzvalof{tripoles/inst amp ra/input height}\pgf at y
+          \pgf at x=-\ctikzvalof{tripoles/inst amp ra/width}\pgf at circ@scaled at Rlen
+          \pgf at x=.5\pgf at x
+    }
+    \anchor{in up}{
+        \inOneFixed
+    }
+    \anchor{in down}{
+        \inOneFixed
+        \pgf at y=-\pgf at y
+    }
+    \savedanchor\inOne{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/inst amp ra/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at y=\ctikzvalof{tripoles/inst amp ra/input height}\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/inst amp ra/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \ifpgf at circuit@oa at iplusup\pgf at y=-\pgf at y\fi
+    }
+    \anchor{-}{
+        \inOne
+    }
+    \anchor{+}{
+        \inOne
+        \pgf at y=-\pgf at y
+    }
+    % R ampli anchors. They are by default at 20% more than R-length distance
+    % you can change that with the `ra pos` key (use 0.5 for one-R).
+    \savedanchor\raOneFixed{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\pgf at circ@scaled at Rlen
+        \pgf at y=\ctikzvalof{tripoles/inst amp ra/ra pos}\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/inst amp ra/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    }
+    \anchor{ra up}{
+        \raOneFixed
+    }
+    \anchor{ra down}{
+        \raOneFixed
+        \pgf at y=-\pgf at y
+    }
+    \savedanchor\raOne{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\pgf at circ@scaled at Rlen
+        \pgf at y=\ctikzvalof{tripoles/inst amp ra/ra pos}\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/inst amp ra/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \ifpgf at circuit@oa at iplusup\pgf at y=-\pgf at y\fi
+    }
+    \anchor{ra-}{
+        \raOne
+    }
+    \anchor{ra+}{
+        \raOne
+        \pgf at y=-\pgf at y
+    }
+    % power supplies
+    \savedanchor\up{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/inst amp ra/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/inst amp ra/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        \pgfpointlineattime{
+            \ctikzvalof{tripoles/inst amp ra/up pos}}{
+            \pgfpoint{
+            \ctikzvalof{tripoles/inst amp ra/port width}\pgf at circ@res at left}
+        {\pgf at circ@res at up}}
+        {\pgfpoint{\ctikzvalof{tripoles/inst amp ra/port width}\pgf at circ@res at right}{\ctikzvalof{tripoles/inst amp ra/height 2}\pgf at circ@res at up}}
+    }
+    \anchor{up}{
+        \up
+    }
+    \anchor{down}{
+        \up
+        \pgf at y=-\pgf at y
+    }
+    % reference voltage input anchors.
+    \savedanchor\refv{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/inst amp ra/height}\pgf at circ@scaled at Rlen
+        \pgf at y=0.5\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/inst amp ra/width}\pgf at circ@scaled at Rlen
+        \pgf at x=0.5\pgf at x
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        \pgfpointlineattime{
+            \ctikzvalof{tripoles/inst amp ra/refv pos}}{
+            \pgfpoint{
+            \ctikzvalof{tripoles/inst amp ra/port width}\pgf at circ@res at left}
+        {\pgf at circ@res at up}}
+        {\pgfpoint{\ctikzvalof{tripoles/inst amp ra/port width}\pgf at circ@res at right}{\ctikzvalof{tripoles/inst amp ra/height 2}\pgf at circ@res at up}}
+    }
+    % we need both because they are normally drawn under the amp, and if you
+    % mirror it vertically you need them
+    \anchor{refv up}{
+        \refv
+    }
+    \anchor{refv down}{
+        \refv
+        \pgf at y=-\pgf at y
+    }
+    \anchor{out}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    % support for border anchors
+    \savedanchor\leftedge{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at x=-\ctikzvalof{tripoles/inst amp ra/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at x = \ctikzvalof{tripoles/inst amp ra/port width}\pgf at x
+        \pgf at y=0pt
+    }
+    \anchor{leftedge}{\leftedge}
+    \anchor{rightedge}{\leftedge \pgf at x =-\pgf at x }
+    \anchor{bin up}{
+        \inOneFixed
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{bin down}{
+        \inOneFixed
+        \pgf at y=-\pgf at y
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{b-}{
+        \inOne
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{b+}{
+        \inOne
+        \pgf at y=-\pgf at y
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{bra up}{
+        \raOneFixed
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{bra down}{
+        \raOneFixed
+        \pgf at y=-\pgf at y
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{bra-}{
+        \raOne
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{bra+}{
+        \raOne
+        \pgf at y=-\pgf at y
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{bout}{
+        \leftedge
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    % end border anchors
+    \anchor{west}{
+        \left
+    }
+    \anchor{east}{
+        \left
+        \pgf at x=-\pgf at x
+    }
+    \anchor{south west}{ \northwest \pgf at y=-\pgf at y }
+    \anchor{north east}{ \northwest \pgf at x=-\pgf at x }
+    \anchor{north west}{ \northwest }
+    \anchor{south east}{ \northwest \pgf at x=-\pgf at x \pgf at y=-\pgf at y }
+
+    \anchor{text}{
+        \ifpgf at circ@center at text
+            \pgf at x=\dimexpr -.6\wd\pgfnodeparttextbox\relax
+        \else
+            \leftedge
+            \pgfmathsetlength{\pgf at x}{\pgf at x + \ctikzvalof{left text distance}}
+        \fi
+        \pgf at y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+    }
+
+    % drawing of the component
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+
+        \northwest
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        \pgf at circ@scaled at Rlen=\scaledRlen
+
+        \newdimen\pgf at circ@res at right@double
+				\pgf at circ@res at right@double=2\pgf at circ@res at right
+
+        % main component, normally in thicker lines
+        \pgfscope
+            \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+            \pgftransformxshift{\ctikzvalof{tripoles/inst amp ra/port width}\pgf at circ@res at left}
+            \pgf at circ@res at step=\pgf at circ@res at right
+            \advance\pgf at circ@res at step by -\pgf at circ@res at left
+            \pgf at circ@res at step=\ctikzvalof{tripoles/inst amp ra/port width}\pgf at circ@res at step
+            %primer punto: la linea de salida (lado componente)
+            \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/inst amp ra/port width}\pgf at circ@res at right@double}{0}}
+            %from the exit to the top (short side)... (note that the .6 must be copied in \up anchor
+            \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/inst amp ra/port width}\pgf at circ@res at right@double}{\ctikzvalof{tripoles/inst amp ra/height 2}\pgf at circ@res at up}}
+            % and then to the input "front up", "down", to the output short side "down"
+            \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down}}
+            \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/inst amp ra/port width}\pgf at circ@res at right@double}{\ctikzvalof{tripoles/inst amp ra/height 2}\pgf at circ@res at down}}
+            % ...and close
+            \pgfpathclose
+            \pgf at circ@draworfill
+        \endpgfscope
+
+        % ra terminal -
+        \pgfpathmoveto{\pgfpoint
+            {\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/inst amp ra/ra pos}\pgf at circ@Rlen}}
+        %
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/inst amp ra/port width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/inst amp ra/ra pos}\pgf at circ@Rlen}}
+        % ra terminal +
+        \pgfpathmoveto{\pgfpoint
+            {\pgf at circ@res at left}
+        {-\ctikzvalof{tripoles/inst amp ra/ra pos}\pgf at circ@Rlen}}
+        %
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/inst amp ra/port width}\pgf at circ@res at left}
+        {-\ctikzvalof{tripoles/inst amp ra/ra pos}\pgf at circ@Rlen}}
+
+        % Negative input terminal
+        \pgfpathmoveto{\pgfpoint
+            {\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/inst amp ra/input height}\pgf at circ@res at up}}
+        %
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/inst amp ra/port width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/inst amp ra/input height}\pgf at circ@res at up}}
+        %
+        \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/inst amp ra/port width}\pgf at circ@res at left}{\ctikzvalof{tripoles/inst amp ra/input height}\pgf at circ@res at up}]{\ctikzvalof{tripoles/inst amp ra/font} \ifpgf at circuit@oa at iplusup\pgf at circ@ampli at plus\else\pgf at circ@ampli at minus\fi}
+
+        % Positive input terminal
+        \pgfpathmoveto{\pgfpoint
+            {\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/inst amp ra/input height}\pgf at circ@res at down}}
+        %
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/inst amp ra/port width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/inst amp ra/input height}\pgf at circ@res at down}}
+        \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/inst amp ra/port width}\pgf at circ@res at left}{\ctikzvalof{tripoles/inst amp ra/input height}\pgf at circ@res at down}]{\ctikzvalof{tripoles/inst amp ra/font} \ifpgf at circuit@oa at iplusup\pgf at circ@ampli at minus\else\pgf at circ@ampli at plus\fi}
+
+        % Output terminal
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+        \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/inst amp ra/port width}\pgf at circ@res at right}{0pt}} %
+        %
+        \pgfsetrectcap
+        \pgfusepath{draw}
+    }
+}
+
+% Buffer
+% Contributed by Danilo Piazzalunga
+\pgfdeclareshape{buffer}
+{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \anchor{center}{\pgfpointorigin}
+    \savedanchor\northwest{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{bipoles/buffer/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{bipoles/buffer/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    }
+    \anchor{east}{ \northwest \pgf at y=0pt \pgf at x=-\pgf at x  }
+    \anchor{west}{ \northwest \pgf at y=0pt }
+    \anchor{south}{ \northwest \pgf at x=0pt \pgf at y=-\pgf at y }
+    \anchor{north}{ \northwest \pgf at x=0pt }
+    \anchor{south west}{ \northwest \pgf at y=-\pgf at y }
+    \anchor{north east}{ \northwest \pgf at x=-\pgf at x }
+    \anchor{north west}{ \northwest }
+    \anchor{south east}{ \northwest \pgf at x=-\pgf at x \pgf at y=-\pgf at y }
+    \savedanchor\left{%
+        \pgf at y=0pt
+    }
+    \anchor{in}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{out}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{bin}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=0.7\pgf at x
+    }
+    \anchor{bout}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-0.7\pgf at x
+    }
+
+    \anchor{text}{
+        \ifpgf at circ@center at text
+            \pgf at x=\dimexpr -.6\wd\pgfnodeparttextbox\relax
+        \else
+            \northwest
+            \pgfmathsetlength{\pgf at x}{0.7*\pgf at x + \ctikzvalof{left text distance}}
+        \fi
+        \pgf at y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+    }
+
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+
+        \northwest
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        \pgf at circ@scaled at Rlen=\scaledRlen
+        \pgfscope
+            \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+            \pgftransformxshift{.7\pgf at circ@res at left}
+            \pgf at circ@res at step=\pgf at circ@res at right
+            \advance\pgf at circ@res at step by -\pgf at circ@res at left
+            \pgf at circ@res at step=.7\pgf at circ@res at step
+
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{0pt}}
+            \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down}}
+            \pgfpathclose
+            \pgf at circ@draworfill
+        \endpgfscope
+
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+        \pgfpathlineto{\pgfpoint{.7\pgf at circ@res at left}{0pt}}
+
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+        \pgfpathlineto{\pgfpoint{.7\pgf at circ@res at right}{0pt}}
+
+        \pgfusepath{draw}
+    }
+}
+
+% plain amplifier, no symbols
+\pgfdeclareshape{plain amp}
+{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \anchor{center}{\pgfpointorigin}
+    \savedanchor\northwest{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/plain amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/plain amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    }
+    \anchor{east}{ \northwest \pgf at y=0pt \pgf at x=-\pgf at x  }
+    \anchor{west}{ \northwest \pgf at y=0pt }
+    \anchor{south}{ \northwest \pgf at x=0pt \pgf at y=-\pgf at y }
+    \anchor{north}{ \northwest \pgf at x=0pt }
+    \anchor{south west}{ \northwest \pgf at y=-\pgf at y }
+    \anchor{north east}{ \northwest \pgf at x=-\pgf at x }
+    \anchor{north west}{ \northwest }
+    \anchor{south east}{ \northwest \pgf at x=-\pgf at x \pgf at y=-\pgf at y }
+    \savedanchor\left{%
+        \pgf at y=0pt
+    }
+    \savedanchor\inOne{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/plain amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at y=\ctikzvalof{tripoles/plain amp/input height}\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/plain amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \ifpgf at circuit@oa at iplusup\pgf at y=-\pgf at y\fi
+    }
+    \savedanchor\inOneFixed{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/plain amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at y=\ctikzvalof{tripoles/plain amp/input height}\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/plain amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    }
+    \anchor{-}{
+        \inOne
+    }
+    \anchor{+}{
+        \inOne
+        \pgf at y=-\pgf at y
+    }
+    \anchor{in up}{
+        \inOneFixed
+    }
+    \anchor{in down}{
+        \inOneFixed
+        \pgf at y=-\pgf at y
+    }
+    % support for border anchors
+    \savedanchor\leftedge{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at x=-\ctikzvalof{tripoles/plain amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at x = \ctikzvalof{tripoles/plain amp/port width}\pgf at x
+        \pgf at y=0pt
+    }
+    \anchor{leftedge}{\leftedge}
+    \anchor{rightedge}{\leftedge \pgf at x =-\pgf at x }
+    \anchor{bin up}{
+        \inOneFixed
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{bin down}{
+        \inOneFixed
+        \pgf at y=-\pgf at y
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{b-}{
+        \inOne
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{b+}{
+        \inOne
+        \pgf at y=-\pgf at y
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{bout}{
+        \leftedge
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    % end border anchors
+    \savedanchor\up{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/plain amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/plain amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        \pgfpointlineattime{
+            \ctikzvalof{tripoles/plain amp/up pos}}{
+            \pgfpoint{
+            \ctikzvalof{tripoles/plain amp/port width}\pgf at circ@res at left}
+        {\pgf at circ@res at up}}
+        {\pgfpoint{\ctikzvalof{tripoles/plain amp/port width}\pgf at circ@res at right}{0pt}}
+    }
+    \anchor{up}{
+        \up
+    }
+    \anchor{down}{
+        \up
+        \pgf at y=-\pgf at y
+    }
+    \anchor{out}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+
+    \anchor{text}{
+        \ifpgf at circ@center at text
+            \pgf at x=\dimexpr -.6\wd\pgfnodeparttextbox\relax
+        \else
+            \leftedge
+            \pgfmathsetlength{\pgf at x}{\pgf at x + \ctikzvalof{left text distance}}
+        \fi
+        \pgf at y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+    }
+
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+
+        \northwest
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+
+        \pgfscope
+            \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+            \pgftransformxshift{\ctikzvalof{tripoles/plain amp/port width}\pgf at circ@res at left}
+            \pgf at circ@res at step=\pgf at circ@res at right
+            \advance\pgf at circ@res at step by -\pgf at circ@res at left
+            \pgf at circ@res at step=\ctikzvalof{tripoles/plain amp/port width}\pgf at circ@res at step
+
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{0pt}}
+            \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down}}
+            \pgfpathclose
+            \pgf at circ@draworfill
+        \endpgfscope
+        \pgfpathmoveto{\pgfpoint
+            {\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/plain amp/input height}\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/plain amp/port width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/plain amp/input height}\pgf at circ@res at up}}
+
+
+        \pgfpathmoveto{\pgfpoint
+            {\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/plain amp/input height}\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/plain amp/port width}\pgf at circ@res at left}
+        {\ctikzvalof{tripoles/plain amp/input height}\pgf at circ@res at down}}
+
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+        \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/plain amp/port width}\pgf at circ@res at right}{0pt}}
+
+        \pgfusepath{draw}
+    }
+}
+
+% plain amplifier, no symbols, one input
+\pgfdeclareshape{plain mono amp}
+{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \anchor{center}{\pgfpointorigin}
+    \savedanchor\northwest{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/plain amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/plain amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    }
+    \anchor{east}{ \northwest \pgf at y=0pt \pgf at x=-\pgf at x  }
+    \anchor{west}{ \northwest \pgf at y=0pt }
+    \anchor{south}{ \northwest \pgf at x=0pt \pgf at y=-\pgf at y }
+    \anchor{north}{ \northwest \pgf at x=0pt }
+    \anchor{south west}{ \northwest \pgf at y=-\pgf at y }
+    \anchor{north east}{ \northwest \pgf at x=-\pgf at x }
+    \anchor{north west}{ \northwest }
+    \anchor{south east}{ \northwest \pgf at x=-\pgf at x \pgf at y=-\pgf at y }
+    \savedanchor\left{%
+        \pgf at y=0pt
+    }
+    \savedanchor\inOne{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at x=-\ctikzvalof{tripoles/plain amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at y=0pt\relax
+    }
+    \anchor{in}{
+        \inOne
+    }
+    % support for border anchors
+    \savedanchor\leftedge{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at x=-\ctikzvalof{tripoles/plain amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at x = \ctikzvalof{tripoles/plain amp/port width}\pgf at x
+        \pgf at y=0pt
+    }
+    \anchor{leftedge}{\leftedge}
+    \anchor{rightedge}{\leftedge \pgf at x =-\pgf at x }
+    \anchor{bin}{
+        \inOne
+        \pgf at ya=\pgf at y \leftedge \pgf at y=\pgf at ya
+    }
+    \anchor{bout}{
+        \leftedge
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    % end border anchors
+    \savedanchor\up{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/plain amp/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/plain amp/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        \pgfpointlineattime{
+            \ctikzvalof{tripoles/plain amp/up pos}}{
+            \pgfpoint{
+            \ctikzvalof{tripoles/plain amp/port width}\pgf at circ@res at left}
+        {\pgf at circ@res at up}}
+        {\pgfpoint{\ctikzvalof{tripoles/plain amp/port width}\pgf at circ@res at right}{0pt}}
+    }
+    \anchor{up}{
+        \up
+    }
+    \anchor{down}{
+        \up
+        \pgf at y=-\pgf at y
+    }
+    \anchor{out}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+
+    \anchor{text}{
+        \ifpgf at circ@center at text
+            \pgf at x=\dimexpr -.6\wd\pgfnodeparttextbox\relax
+        \else
+            \leftedge
+            \pgfmathsetlength{\pgf at x}{\pgf at x + \ctikzvalof{left text distance}}
+        \fi
+        \pgf at y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+    }
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+
+        \northwest
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+
+        \pgfscope
+            \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+            \pgftransformxshift{\ctikzvalof{tripoles/plain amp/port width}\pgf at circ@res at left}
+            \pgf at circ@res at step=\pgf at circ@res at right
+            \advance\pgf at circ@res at step by -\pgf at circ@res at left
+            \pgf at circ@res at step=\ctikzvalof{tripoles/plain amp/port width}\pgf at circ@res at step
+
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at step}{0pt}}
+            \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down}}
+            \pgfpathclose
+            \pgf at circ@draworfill
+        \endpgfscope
+        \pgfpathmoveto{\pgfpoint
+            {\pgf at circ@res at left}
+        {0pt}}
+        \pgfpathlineto{\pgfpoint
+            {\ctikzvalof{tripoles/plain amp/port width}\pgf at circ@res at left}
+        {0pt}}
+
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+        \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/plain amp/port width}\pgf at circ@res at right}{0pt}}
+
+        \pgfusepath{draw}
+    }
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% electromechanical device (motor/generator)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\pgfdeclareshape{elmech}
+{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{electromechanicals}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \savedanchor\northwest{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/elmech/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/elmech/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    }
+    \anchor{center}{
+        \pgfpointorigin
+    }
+    \anchor{text}{
+        \pgfpointorigin
+        \advance \pgf at x by -.5\wd\pgfnodeparttextbox
+        \advance \pgf at y by -.5\ht\pgfnodeparttextbox
+    }
+    \anchor{left}{%
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{right}{%
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{top}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{pathstart}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{pathend}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{bottom}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{center}{
+        \pgf at y=0pt
+        \pgf at x=0pt
+    }
+    \anchor{east}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{west}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{south}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{north}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{south west}{ \northwest \pgf at y=-\pgf at y }
+    \anchor{north east}{ \northwest \pgf at x=-\pgf at x }
+    \anchor{north west}{ \northwest }
+    \anchor{south east}{ \northwest \pgf at x=-\pgf at x \pgf at y=-\pgf at y }
+    \anchorborder{%
+        \@tempdima=\pgf at x\@tempdimb=\pgf at y
+        \northwest\pgf at circ@res at other=-\pgf at x
+        \pgfpointborderellipse{\pgfqpoint{\@tempdima}{\@tempdimb}}{\pgfqpoint{\pgf at circ@res at other}{\pgf at circ@res at other}}
+    }
+    \anchor{block north west}{\northwest\pgf at x=0.5\pgf at x}
+    \anchor{block south west}{\northwest\pgf at x=0.5\pgf at x\pgf at y=-\pgf at y}
+    \anchor{block north east}{\northwest\pgf at x=-0.5\pgf at x}
+    \anchor{block south east}{\northwest\pgf at x=-0.5\pgf at x\pgf at y=-\pgf at y}
+    \anchor{block up right}{
+        \northwest
+        % remember that pgf at x is negative
+        % center of the block is at 0.5*H+W*cos(30)/2
+        \pgf at y=\dimexpr0.5\pgf at y - 0.433\pgf at x\relax
+        \pgf at x=-0.5\pgf at x
+    }
+    \anchor{block up left}{
+        \northwest
+        % remember that pgf at x is negative
+        % center of the block is at 0.5*H+W*cos(30)/2
+        \pgf at y=\dimexpr0.5\pgf at y - 0.433\pgf at x\relax
+        \pgf at x=0.5\pgf at x
+    }
+    \anchor{block down right}{
+        \northwest
+        % remember that pgf at x is negative
+        % center of the block is at 0.5*H+W*cos(30)/2
+        \pgf at y=\dimexpr0.5\pgf at y - 0.433\pgf at x\relax
+        \pgf at y=-\pgf at y
+        \pgf at x=-0.5\pgf at x
+    }
+    \anchor{block down left}{
+        \northwest
+        % remember that pgf at x is negative
+        % center of the block is at 0.5*H+W*cos(30)/2
+        \pgf at y=\dimexpr0.5\pgf at y - 0.433\pgf at x\relax
+        \pgf at y=-\pgf at y
+        \pgf at x=0.5\pgf at x
+    }
+    \behindbackgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+        \pgf at circ@scaled at Rlen=\scaledRlen
+        \pgf at circ@res at step=\ctikzvalof{tripoles/elmech/width}\pgf at circ@scaled at Rlen
+        \pgf at circ@res at up=\ctikzvalof{tripoles/elmech/height}\pgf at circ@scaled at Rlen
+        \pgfscope
+            \pgfstartlinewidth=\pgflinewidth
+            \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+            \pgfscope % clip the bar: whole size minus the circle
+                \pgfpathrectanglecorners{\pgfpoint{-.5\pgf at circ@res at step}{-.5\pgf at circ@res at up}}{\pgfpoint{.5\pgf at circ@res at step}{.5\pgf at circ@res at up}}
+                \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf at circ@res at step}
+                \pgfseteorule
+                \pgfusepath{clip}
+                \pgfpathrectangle{\pgfpoint{-.25\pgf at circ@res at step}{-.5\pgf at circ@res at up}}{\pgfpoint{.5\pgf at circ@res at step}{\pgf at circ@res at up}}
+                \pgfsetfillcolor{\ctikzvalof{color}}
+                \pgfusepath{fill, draw}
+            \endpgfscope
+            \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf at circ@res at step}
+            \ifx\tikz at fillcolor\pgfutil at empty
+                % set the default fill color to white
+                \pgfsetfillcolor{white}
+                % ...but override it if the class is defined!
+                \pgf at circ@setifdefinedfill{draw, fill}{draw, fill}
+            \else
+                \pgfsetfillcolor{\tikz at fillcolor}
+                \pgfusepath{draw, fill}
+            \fi
+        \endpgfscope
+    }
+}
+
+%%%%%%%%%%%%%%%%%%%
+%% Magnetron
+%%%%%%%%%%%%%%%%%%%
+
+\pgfdeclareshape{magnetron}
+{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{tubes}}  % class of these components
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \savedanchor\northwest{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/magnetron/width}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/magnetron/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    }
+    \anchor{center}{
+        \pgfpointorigin
+    }
+    \anchor{anode}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{cathode1}{
+        \northwest
+        \pgf at circ@res at step=\pgf at y
+        \pgfmathparse{cos(105)}
+        \pgf at x=\pgfmathresult\pgf at circ@res at step
+        \pgfmathparse{sin(105)}
+        \pgf at y=\pgfmathresult\pgf at circ@res at step
+        %\pgfpointorigin
+        %\pgfpathmoveto{\pgfpointpolar{105}{\pgf at circ@res at step}}%not working in a scaled tikzpicture
+    }
+    \anchor{cathode2}{
+        \northwest
+        \pgf at circ@res at step=\pgf at y
+        \pgfmathparse{cos(75)}
+        \pgf at x=\pgfmathresult\pgf at circ@res at step
+        \pgfmathparse{sin(75)}
+        \pgf at y=\pgfmathresult\pgf at circ@res at step
+        %\pgfpointorigin
+        %\pgfpathmoveto{\pgfpointpolar{75}{\pgf at circ@res at step}}%not working in a scaled tikzpicture
+    }
+    \anchor{text}{
+        \pgfpointorigin
+        \advance \pgf at x by -.5\wd\pgfnodeparttextbox
+        \advance \pgf at y by -.5\ht\pgfnodeparttextbox
+    }
+    \anchor{left}{%
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{right}{%
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{top}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{pathstart}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{pathend}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{bottom}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{center}{
+        \pgf at y=0pt
+        \pgf at x=0pt
+    }
+    \anchor{east}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{west}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{south}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{north}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{south west}{ \northwest \pgf at y=-\pgf at y }
+    \anchor{north east}{ \northwest \pgf at x=-\pgf at x }
+    \anchor{north west}{ \northwest }
+    \anchor{south east}{ \northwest \pgf at x=-\pgf at x \pgf at y=-\pgf at y }
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+        \pgf at circ@scaled at Rlen=\scaledRlen
+        \pgf at circ@res at step=\ctikzvalof{tripoles/magnetron/width}\pgf at circ@scaled at Rlen
+        \northwest
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        \pgfmathsetlength{\pgf at circ@res at other}{sin(15)*\pgf at circ@res at up}
+
+        \pgfscope
+            \pgfstartlinewidth=\pgflinewidth
+            \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+            %create outer circle
+            \pgfpathcircle{\pgfpoint{0}{0}} {\pgf at circ@res at right}
+            \pgf at circ@draworfill
+            %create chambers
+            \foreach \angle in {45,135,225,315}{
+                \pgfpathmoveto{ \pgfpointpolar{\angle}{0.6\pgf at circ@res at right}}
+                \pgfpathlineto{ \pgfpointpolar{\angle}{\pgf at circ@res at right}}
+            }
+            \pgfsetroundcap
+            \pgfusepath{draw}
+            \pgfscope
+                %draw connection from outside
+                %anode
+                \pgfsetlinewidth{\pgfstartlinewidth}
+                \pgfpathmoveto{\pgfpoint{0\pgf at circ@res at left}{\pgf at circ@res at down}}
+                \pgfpathlineto{\pgfpoint{0\pgf at circ@res at right}{.5\pgf at circ@res at down}}
+                %cathodes
+                \pgfpathmoveto{\pgfpointpolar{105}{\pgf at circ@res at up}}
+                \pgfpathlineto{\pgfpoint{-\pgf at circ@res at other}{.5\pgf at circ@res at up}}
+                \pgfpathmoveto{\pgfpointpolar{75}{\pgf at circ@res at up}}
+                \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{.5\pgf at circ@res at up}}
+                \pgfsetbuttcap
+                \pgfusepath{draw}
+            \endpgfscope
+            %create cathode
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at other}{.5\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{0}{.15\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{-\pgf at circ@res at other}{.5\pgf at circ@res at up}}
+            \pgfusepath{draw}
+            %create anode
+            \pgfpathmoveto{\pgfpoint{0.3\pgf at circ@res at left}{.5\pgf at circ@res at down}}
+            \pgfpathlineto{\pgfpoint{0.3\pgf at circ@res at right}{.5\pgf at circ@res at down}}
+
+            \pgfsetbuttcap
+            \pgfusepath{draw}
+        \endpgfscope
+    }
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Electronic tubes, submitted by J. op den Brouw
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Draw tube outline
+\def\pgf at circ@tubes at drawtube{%
+	\ifdim\ctikzvalof{tubes/width}pt>\ctikzvalof{tubes/height}pt\relax
+	\pgfpathmoveto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+	\pgfutil at tempdima=\pgf at circ@res at right
+	\advance\pgfutil at tempdima by -\pgf at circ@res at up
+	\pgfpathlineto{\pgfpoint{\pgfutil at tempdima}{\pgf at circ@res at up}}
+	\pgfpatharc{90}{-90}{\pgf at circ@res at up}
+	\pgfpathlineto{\pgfpoint{-\pgfutil at tempdima}{-\pgf at circ@res at up}}
+	\pgfpatharc{270}{90}{\pgf at circ@res at up}
+	\else
+	\pgfpathmoveto{\pgfpoint{-\pgf at circ@res at right}{0pt}}
+	\pgfutil at tempdima=\pgf at circ@res at up
+	\advance\pgfutil at tempdima by -\pgf at circ@res at right
+	\pgfpathlineto{\pgfpoint{-\pgf at circ@res at right}{\pgfutil at tempdima}}
+	\pgfpatharc{180}{0}{\pgf at circ@res at right}
+	\pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{-\pgfutil at tempdima}}
+	\pgfpatharc{180}{0}{-\pgf at circ@res at right}
+	\fi
+	\pgfpathclose
+}
+
+%% The diode (tube), triode, tetrode and pentode only differ in the
+%% number of grids. So we construct a generic declare function in
+%% which we can put code for the grid anchors and grid drawing code
+%% \pgfcircdeclaretube{tube name}{grid anchors}{grid drawing code}
+\long\def\pgfcircdeclaretube#1#2#3{%
+    \pgfdeclareshape{#1}{
+        \savedmacro{\ctikzclass}{\edef\ctikzclass{tubes}}
+        \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+        \anchor{center}{
+            \pgfpointorigin
+        }
+        \savedanchor\northwest{%
+            \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            \pgf at circ@res at up=\ctikzvalof{tubes/height}\pgf at circ@scaled at Rlen
+            \pgf at circ@res at right=\ctikzvalof{tubes/width}\pgf at circ@scaled at Rlen
+            % x and y should be half the Rlen
+            \pgf at y=\pgf at circ@res at up
+            \pgf at y=.5\pgf at y
+            \pgf at x=-\pgf at circ@res at right
+            \pgf at x=.5\pgf at x
+        }
+        \anchor{north} {%
+            \northwest
+            \pgf at x=0pt
+        }
+        \anchor{east}{%
+            \northwest
+            \pgf at x=-\pgf at x
+            \pgf at y=0pt
+        }
+        \anchor{south}{%
+            \northwest
+            \pgf at y=-\pgf at y
+            \pgf at x=0pt
+        }
+        \anchor{west}{%
+            \northwest
+            \pgf at y=0pt
+        }
+        \anchor{north west}{%
+            \northwest
+        }
+        \anchor{north east}{%
+            \northwest
+            \pgf at x=-\pgf at x
+        }
+        \anchor{south east}{
+            \northwest
+            \pgf at x=-\pgf at x
+            \pgf at y=-\pgf at y
+        }
+        \anchor{south west}{
+            \northwest
+            \pgf at y=-\pgf at y
+        }
+        \anchor{anode} {%
+            \northwest
+            \pgf at x=0pt
+        }
+        \anchor{cathode}{%
+            \northwest
+            \pgf at y=-\pgf at y
+            \pgf at x=\ctikzvalof{tubes/cathode width}\pgf at x
+        }
+        \anchor{cathode 1}{%
+            \northwest
+            \pgf at y=-\pgf at y
+            \pgf at x=\ctikzvalof{tubes/cathode width}\pgf at x
+        }
+        \anchor{cathode 2}{%
+            \northwest
+            \pgf at y=-\pgf at y
+            \pgf at x=-\ctikzvalof{tubes/cathode width}\pgf at x
+        }
+        \anchor{filament 1}{%
+            \northwest
+            \pgfmathparse{(\ctikzvalof{tubes/tube radius}*sin(\ctikzvalof{tubes/filament angle})}
+            \pgf at x=\pgfmathresult\pgf at x
+            \pgf at y=-\pgf at y
+        }
+        \anchor{filament 2}{%
+            \northwest
+            \pgfmathparse{(\ctikzvalof{tubes/tube radius}*sin(\ctikzvalof{tubes/filament angle})}
+            \pgf at x=-\pgfmathresult\pgf at x
+            \pgf at y=-\pgf at y
+        }
+
+        % Extra anchors
+        #2
+
+        \backgroundpath{
+            \pgfscope
+                % Line width for tripoles
+                \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+                \pgf at circ@scaled at Rlen=\scaledRlen
+
+                % Setup to draw tube
+                \pgf at circ@res at up=\ctikzvalof{tubes/height}\pgf at circ@scaled at Rlen
+                \pgf at circ@res at right=\ctikzvalof{tubes/width}\pgf at circ@scaled at Rlen
+                \pgf at circ@res at up=\ctikzvalof{tubes/tube radius}\pgf at circ@res at up
+                \pgf at circ@res at right=\ctikzvalof{tubes/tube radius}\pgf at circ@res at right
+
+                % Tube outline
+                \pgf at circ@tubes at drawtube
+
+                % Setup to draw grid, filament, anode and cathode
+                \pgf at circ@res at up=\ctikzvalof{tubes/height}\pgf at circ@scaled at Rlen
+                \pgf at circ@res at right=\ctikzvalof{tubes/width}\pgf at circ@scaled at Rlen
+                \pgf at circ@res at up=0.5\pgf at circ@res at up
+                \pgf at circ@res at right=0.5\pgf at circ@res at right
+
+                % Tube fill color (if any)
+                \pgf at circ@draworfill
+
+                % Grid drawing
+                #3
+
+                % Filament (is not drawn by default)
+                \ifpgf at circuit@tubes at filament
+                    \pgf at circ@res at temp=-\ctikzvalof{tubes/cathode distance}\pgf at circ@res at up
+                    \advance\pgf at circ@res at temp by -\ctikzvalof{tubes/filament distance}\pgf at circ@res at up
+                    \pgfmathparse{(\ctikzvalof{tubes/tube radius}*sin(\ctikzvalof{tubes/filament angle})}
+                    \pgf at xa=\pgfmathresult\pgf at circ@res at right
+                    \pgfmathparse{\ctikzvalof{tubes/tube radius}+\ctikzvalof{tubes/tube radius}*cos(\ctikzvalof{tubes/filament angle}}
+                    \pgf at ya=\pgfmathresult\pgf at circ@res at up
+                    \pgfpathmoveto{\pgfpoint{0pt}{\pgf at circ@res at temp}}
+                    \pgfpathlineto{\pgfpoint{-\pgf at xa}{-\pgf at ya}}
+                    \pgfpathlineto{\pgfpoint{-\pgf at xa}{-\pgf at circ@res at up}}
+                    \pgfpathmoveto{\pgfpoint{0pt}{\pgf at circ@res at temp}}
+                    \pgfpathlineto{\pgfpoint{\pgf at xa}{-\pgf at ya}}
+                    \pgfpathlineto{\pgfpoint{\pgf at xa}{-\pgf at circ@res at up}}
+                    \pgf at circuit@tubes at filamentfalse
+                \fi
+
+                % Anode (or plate)
+                \pgfpathmoveto{\pgfpoint{0pt}{\pgf at circ@res at up}} % north
+                \pgfpathlineto{\pgfpoint{0pt}{\ctikzvalof{tubes/anode distance}\pgf at circ@res at up}}
+                \pgfpathmoveto{\pgfpoint{-\ctikzvalof{tubes/anode width}\pgf at circ@res at right}{\ctikzvalof{tubes/anode distance}\pgf at circ@res at up}}
+                \pgfpathlineto{\pgfpoint{\ctikzvalof{tubes/anode width}\pgf at circ@res at right}{\ctikzvalof{tubes/anode distance}\pgf at circ@res at up}}
+
+                % Cathode
+                \ifpgf at circuit@tubes at nocathode
+                    \pgf at circuit@tubes at nocathodefalse
+                \else
+                    \pgfsetcornersarced{\pgfpoint{\ctikzvalof{tubes/cathode corners}\pgf at circ@res at up}{\ctikzvalof{tubes/cathode corners}\pgf at circ@res at up}}
+                    \pgfpathmoveto{\pgfpoint{-\ctikzvalof{tubes/cathode width}\pgf at circ@res at right}{-\pgf at circ@res at up}}
+                    \pgfpathlineto{\pgfpoint{-\ctikzvalof{tubes/cathode width}\pgf at circ@res at right}{-\ctikzvalof{tubes/cathode distance}\pgf at circ@res at up}}
+                    \pgfpathlineto{\pgfpoint{\ctikzvalof{tubes/cathode width}\pgf at circ@res at right}{-\ctikzvalof{tubes/cathode distance}\pgf at circ@res at up}}
+                    \ifpgf at circuit@tubes at fullcathode
+                        \pgfpathlineto{\pgfpoint{\ctikzvalof{tubes/cathode width}\pgf at circ@res at right}{-\pgf at circ@res at up}}
+                        \pgf at circuit@tubes at fullcathodefalse
+                    \else
+                        \pgfpathlineto{\pgfpoint{\ctikzvalof{tubes/cathode width}\pgf at circ@res at right}{-\ctikzvalof{tubes/cathode distance}\pgf at circ@res at up-\ctikzvalof{tubes/cathode right extend}\pgf at circ@res at up}}
+                    \fi
+                \fi
+
+                % Draw the background
+                \pgfusepath{draw}
+            \endpgfscope
+        }
+    }
+}
+
+\pgfcircdeclaretube{diodetube}{}{} % shape diode already exists
+
+\pgfcircdeclaretube{triode}
+{
+	\anchor{grid} {% should not be used
+		\northwest
+		\pgf at y=\ctikzvalof{tubes/grid shift}\pgf at y
+	}
+	\anchor{control} {%
+		\northwest
+		\pgf at y=\ctikzvalof{tubes/grid shift}\pgf at y
+	}
+}
+{
+	% Grid protrusion
+	\pgf at xa=-\ctikzvalof{tubes/tube radius}\pgf at circ@res at right
+	\advance\pgf at xa by -\ctikzvalof{tubes/grid protrusion}\pgf at circ@res at right
+	\pgfpathmoveto{\pgfpoint{-\pgf at circ@res at right}{\ctikzvalof{tubes/grid shift}\pgf at circ@res at up}}
+	\pgfpathlineto{\pgfpoint{\pgf at xa}{\ctikzvalof{tubes/grid shift}\pgf at circ@res at up}}
+	% Grid dashes: calculations
+	\pgf at xb=2\pgf at circ@res at right
+	\pgf at circ@res at step=\ctikzvalof{tubes/tube radius}\pgf at xb
+	\pgf at circ@count at a=\ctikzvalof{tubes/grid dashes}  % dashes*2+1
+	\multiply\pgf at circ@count at a by 2\relax
+	\advance\pgf at circ@count at a by 1\relax
+	\advance\pgf at circ@res at step by -\pgf at xa
+	\divide\pgf at circ@res at step by \pgf at circ@count at a
+	% Grid dashes: draw
+	\pgf at circ@res at temp=\pgf at xa
+	\pgf at circ@count at a=\ctikzvalof{tubes/grid dashes}
+	\loop
+	\advance\pgf at circ@res at temp by\pgf at circ@res at step
+	\pgfpathmoveto{\pgfpoint{\pgf at circ@res at temp}{\ctikzvalof{tubes/grid shift}\pgf at circ@res at up}}
+	\advance\pgf at circ@res at temp by\pgf at circ@res at step
+	\pgfpathlineto{\pgfpoint{\pgf at circ@res at temp}{\ctikzvalof{tubes/grid shift}\pgf at circ@res at up}}
+	\advance\pgf at circ@count at a by-1
+	\ifnum\pgf at circ@count at a>0\relax
+	\repeat
+}
+
+\pgfcircdeclaretube{tetrode}
+{
+	\anchor{grid} {% should not be used
+		\northwest
+		\pgfutil at tempdima=\pgf at y
+		\pgf at y=-\ctikzvalof{tubes/grid separation}\pgf at y
+		\pgf at y=0.5\pgf at y
+		\advance\pgf at y by \ctikzvalof{tubes/grid shift}\pgfutil at tempdima
+	}
+	\anchor{control} {%
+		\northwest
+		\pgfutil at tempdima=\pgf at y
+		\pgf at y=-\ctikzvalof{tubes/grid separation}\pgf at y
+		\pgf at y=0.5\pgf at y
+		\advance\pgf at y by \ctikzvalof{tubes/grid shift}\pgfutil at tempdima
+	}
+	\anchor{screen} {%
+		\northwest
+		\pgfutil at tempdima=\pgf at y
+		\pgf at y=\ctikzvalof{tubes/grid separation}\pgf at y
+		\pgf at y=0.5\pgf at y
+		\advance\pgf at y by \ctikzvalof{tubes/grid shift}\pgfutil at tempdima
+	}
+}
+{
+	% Grid x/y points
+	\pgf at xa=-\ctikzvalof{tubes/tube radius}\pgf at circ@res at right
+	\advance\pgf at xa by -\ctikzvalof{tubes/grid protrusion}\pgf at circ@res at right
+	\pgfutil at tempdima=\ctikzvalof{tubes/grid separation}\pgf at circ@res at up
+	\pgfutil at tempdimb=-\pgfutil at tempdima
+	\pgfutil at tempdima=0.5\pgfutil at tempdima
+	\advance\pgfutil at tempdima by \ctikzvalof{tubes/grid shift}\pgf at circ@res at up
+	\pgfutil at tempdimb=0.5\pgfutil at tempdimb
+	\advance\pgfutil at tempdimb by \ctikzvalof{tubes/grid shift}\pgf at circ@res at up
+	% Grid protrusion
+	\pgfpathmoveto{\pgfpoint{-\pgf at circ@res at right}{\pgfutil at tempdimb}}
+	\pgfpathlineto{\pgfpoint{\pgf at xa}{\pgfutil at tempdimb}}
+	\pgfpathmoveto{\pgfpoint{-\pgf at circ@res at right}{\pgfutil at tempdima}}
+	\pgfpathlineto{\pgfpoint{\pgf at xa}{\pgfutil at tempdima}}
+	% Grid dashes: calculations
+	\pgf at xb=2\pgf at circ@res at right
+	\pgf at circ@res at step=\ctikzvalof{tubes/tube radius}\pgf at xb
+	\pgf at circ@count at a=\ctikzvalof{tubes/grid dashes}  % dashes*2+1
+	\multiply\pgf at circ@count at a by 2\relax
+	\advance\pgf at circ@count at a by 1\relax
+	\advance\pgf at circ@res at step by -\pgf at xa
+	\divide\pgf at circ@res at step by \pgf at circ@count at a
+	% Grid dashes: draw
+	\pgf at circ@res at temp=\pgf at xa
+	\pgf at circ@count at a=\ctikzvalof{tubes/grid dashes}
+	\loop
+	\advance\pgf at circ@res at temp by\pgf at circ@res at step
+	\pgfpathmoveto{\pgfpoint{\pgf at circ@res at temp}{\pgfutil at tempdima}}
+	\pgfpathlineto{\pgfpoint{\pgf at circ@res at temp+\pgf at circ@res at step}{\pgfutil at tempdima}}
+	\pgfpathmoveto{\pgfpoint{\pgf at circ@res at temp}{\pgfutil at tempdimb}}
+	\pgfpathlineto{\pgfpoint{\pgf at circ@res at temp+\pgf at circ@res at step}{\pgfutil at tempdimb}}
+	\advance\pgf at circ@res at temp by\pgf at circ@res at step
+	\advance\pgf at circ@count at a by-1
+	\ifnum\pgf at circ@count at a>0\relax
+	\repeat
+}
+
+\pgfcircdeclaretube{pentode}
+{
+	\anchor{grid} {% should not be used
+		\northwest
+		\pgfutil at tempdima=\pgf at y
+		\pgf at y=-\ctikzvalof{tubes/grid separation}\pgf at y
+		\advance\pgf at y by \ctikzvalof{tubes/grid shift}\pgfutil at tempdima
+	}
+	\anchor{control} {%
+		\northwest
+		\pgfutil at tempdima=\pgf at y
+		\pgf at y=-\ctikzvalof{tubes/grid separation}\pgf at y
+		\advance\pgf at y by \ctikzvalof{tubes/grid shift}\pgfutil at tempdima
+	}
+	\anchor{screen} {%
+		\northwest
+		\pgf at y=\ctikzvalof{tubes/grid shift}\pgf at y
+	}
+	\anchor{suppressor} {%
+		\northwest
+		\pgfutil at tempdima=\pgf at y
+		\pgf at y=\ctikzvalof{tubes/grid separation}\pgf at y
+		\advance\pgf at y by \ctikzvalof{tubes/grid shift}\pgfutil at tempdima
+	}
+}
+{
+	% Grid x/y points
+	\pgf at xa=-\ctikzvalof{tubes/tube radius}\pgf at circ@res at right
+	\advance\pgf at xa by -\ctikzvalof{tubes/grid protrusion}\pgf at circ@res at right
+	\pgfutil at tempdima=\ctikzvalof{tubes/grid separation}\pgf at circ@res at up
+	\pgfutil at tempdimb=-\pgfutil at tempdima
+	\advance\pgfutil at tempdima by \ctikzvalof{tubes/grid shift}\pgf at circ@res at up
+	\advance\pgfutil at tempdimb by \ctikzvalof{tubes/grid shift}\pgf at circ@res at up
+	\pgf at circ@res at other=\ctikzvalof{tubes/grid shift}\pgf at circ@res at up
+	% Grid protrusion
+	\pgfpathmoveto{\pgfpoint{-\pgf at circ@res at right}{\pgfutil at tempdimb}}
+	\pgfpathlineto{\pgfpoint{\pgf at xa}{\pgfutil at tempdimb}}
+	\pgfpathmoveto{\pgfpoint{-\pgf at circ@res at right}{\pgfutil at tempdima}}
+	\pgfpathlineto{\pgfpoint{\pgf at xa}{\pgfutil at tempdima}}
+	\pgfpathmoveto{\pgfpoint{-\pgf at circ@res at right}{\pgf at circ@res at other}}
+	\pgfpathlineto{\pgfpoint{\pgf at xa}{\pgf at circ@res at other}}
+	% Grid dashes: calculations
+	\pgf at xb=2\pgf at circ@res at right
+	\pgf at circ@res at step=\ctikzvalof{tubes/tube radius}\pgf at xb
+	\pgf at circ@count at a=\ctikzvalof{tubes/grid dashes}  % dashes*2+1
+	\multiply\pgf at circ@count at a by 2\relax
+	\advance\pgf at circ@count at a by 1\relax
+	\advance\pgf at circ@res at step by -\pgf at xa
+	\divide\pgf at circ@res at step by \pgf at circ@count at a
+	% Grid dashes: draw
+	\pgf at circ@res at temp=\pgf at xa
+	\pgf at circ@count at a=\ctikzvalof{tubes/grid dashes}
+	\loop
+	\advance\pgf at circ@res at temp by\pgf at circ@res at step
+	\pgfpathmoveto{\pgfpoint{\pgf at circ@res at temp}{\pgfutil at tempdima}}
+	\pgfpathlineto{\pgfpoint{\pgf at circ@res at temp+\pgf at circ@res at step}{\pgfutil at tempdima}}
+	\pgfpathmoveto{\pgfpoint{\pgf at circ@res at temp}{\pgfutil at tempdimb}}
+	\pgfpathlineto{\pgfpoint{\pgf at circ@res at temp+\pgf at circ@res at step}{\pgfutil at tempdimb}}
+	\pgfpathmoveto{\pgfpoint{\pgf at circ@res at temp}{\pgf at circ@res at other}}
+	\pgfpathlineto{\pgfpoint{\pgf at circ@res at temp+\pgf at circ@res at step}{\pgf at circ@res at other}}
+	\advance\pgf at circ@res at temp by\pgf at circ@res at step
+	\advance\pgf at circ@count at a by-1
+	\ifnum\pgf at circ@count at a>0\relax
+	\repeat
+}
+
+\pgfcircdeclaretube{pentode suppressor to cathode}
+{
+	\anchor{grid} {% should not be used
+		\northwest
+		\pgfutil at tempdima=\pgf at y
+		\pgf at y=-\ctikzvalof{tubes/grid separation}\pgf at y
+		\advance\pgf at y by \ctikzvalof{tubes/grid shift}\pgfutil at tempdima
+	}
+	\anchor{control} {%
+		\northwest
+		\pgfutil at tempdima=\pgf at y
+		\pgf at y=-\ctikzvalof{tubes/grid separation}\pgf at y
+		\advance\pgf at y by \ctikzvalof{tubes/grid shift}\pgfutil at tempdima
+	}
+	\anchor{screen} {%
+		\northwest
+		\pgf at y=\ctikzvalof{tubes/grid shift}\pgf at y
+	}
+}
+{
+	% Grid x/y points
+	\pgf at xa=-\ctikzvalof{tubes/tube radius}\pgf at circ@res at right
+	\advance\pgf at xa by -\ctikzvalof{tubes/grid protrusion}\pgf at circ@res at right
+	\pgfutil at tempdima=\ctikzvalof{tubes/grid separation}\pgf at circ@res at up
+	\pgfutil at tempdimb=-\pgfutil at tempdima
+	\advance\pgfutil at tempdima by \ctikzvalof{tubes/grid shift}\pgf at circ@res at up
+	\advance\pgfutil at tempdimb by \ctikzvalof{tubes/grid shift}\pgf at circ@res at up
+	\pgf at circ@res at other=\ctikzvalof{tubes/grid shift}\pgf at circ@res at up
+	% Grid protrusion
+	\pgfpathmoveto{\pgfpoint{-\pgf at circ@res at right}{\pgfutil at tempdimb}}
+	\pgfpathlineto{\pgfpoint{\pgf at xa}{\pgfutil at tempdimb}}
+	\pgfpathmoveto{\pgfpoint{-\pgf at circ@res at right}{\pgf at circ@res at other}}
+	\pgfpathlineto{\pgfpoint{\pgf at xa}{\pgf at circ@res at other}}
+	% Grid dashes: calculations
+	\pgf at xb=2\pgf at circ@res at right
+	\pgf at circ@res at step=\ctikzvalof{tubes/tube radius}\pgf at xb
+	\pgf at circ@count at a=\ctikzvalof{tubes/grid dashes}  % dashes*2+1
+	\multiply\pgf at circ@count at a by 2\relax
+	\advance\pgf at circ@count at a by 1\relax
+	\advance\pgf at circ@res at step by -\pgf at xa
+	\divide\pgf at circ@res at step by \pgf at circ@count at a
+	% Grid dashes: draw
+	\pgf at circ@res at temp=\pgf at xa
+	\pgf at circ@count at a=\ctikzvalof{tubes/grid dashes}
+	\loop
+	\advance\pgf at circ@res at temp by\pgf at circ@res at step
+	\ifnum\pgf at circ@count at a>1\relax
+	\pgfpathmoveto{\pgfpoint{\pgf at circ@res at temp}{\pgfutil at tempdimb}}
+	\pgfpathlineto{\pgfpoint{\pgf at circ@res at temp+\pgf at circ@res at step}{\pgfutil at tempdimb}}
+	\pgfpathmoveto{\pgfpoint{\pgf at circ@res at temp}{\pgf at circ@res at other}}
+	\pgfpathlineto{\pgfpoint{\pgf at circ@res at temp+\pgf at circ@res at step}{\pgf at circ@res at other}}
+	\fi
+	\pgfpathmoveto{\pgfpoint{\pgf at circ@res at temp}{\pgfutil at tempdima}}
+	\pgfpathlineto{\pgfpoint{\pgf at circ@res at temp+\pgf at circ@res at step}{\pgfutil at tempdima}}
+	\advance\pgf at circ@res at temp by\pgf at circ@res at step
+	\advance\pgf at circ@count at a by-1
+	\ifnum\pgf at circ@count at a>0\relax
+	\repeat
+	% Grid: connection from suppressor to cathode
+	\pgfsetcornersarced{\pgfpoint{\ctikzvalof{tubes/cathode corners}\pgf at circ@res at up}{\ctikzvalof{tubes/cathode corners}\pgf at circ@res at up}}
+	\pgfpathlineto{\pgfpoint{\pgf at circ@res at temp}{\pgfutil at tempdima-2*\ctikzvalof{tubes/grid separation}\pgf at circ@res at up}}
+	\pgfpathlineto{\pgfpoint{\ctikzvalof{tubes/cathode width}\pgf at circ@res at right-0.4142136*\ctikzvalof{tubes/cathode corners}\pgf at circ@res at right}{-\ctikzvalof{tubes/cathode distance}\pgf at circ@res at up-0.4142136*\ctikzvalof{tubes/cathode corners}\pgf at circ@res at up}}
+
+}
+
+%%%---------- close: tex/pgfcirctripoles
+%%%%%%%%%%% Springe nach tex/pgfcircquadpoles
+%%%---------- open: tex/pgfcircquadpoles.tex
+% Copyright 2018-2020 by Romano Giannetti
+% Copyright 2015-2020 by Stefan Lindner
+% Copyright 2013-2020 by Stefan Erhardt
+% Copyright 2007-2020 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Quadripoles
+
+\long\def\pgfcircdeclarequadpole#1#2#3{
+    \pgfdeclareshape{#1}
+    {
+        \savedmacro{\ctikzclass}{\edef\ctikzclass{inductors}}
+        \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+        % shapename
+        \savedmacro{\thisshape}{\def\thisshape{\tikz at fig@name}}
+        \anchor{center}{
+            \northwest
+            \pgf at x=0pt
+            \pgf at y=0pt
+        }
+        \savedmacro{\stretto}{\def\stretto{\ctikzvalof{quadpoles/#1/inner}}}
+        \savedanchor\northwest{%
+            \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            \pgf at y=\ctikzvalof{quadpoles/#1/height}\pgf at circ@scaled at Rlen
+            \pgf at y=.5\pgf at y
+            \pgf at x=.5\pgf at circ@scaled at Rlen
+            \pgf at x=-\ctikzvalof{quadpoles/#1/width}\pgf at x
+        }
+        %% we define the upper right (positive coord) dot (which is B1)
+        \savedanchor{\innerdot}{%
+            \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            \pgf at xa=.5\pgf at circ@scaled at Rlen
+            \pgf at xa=-\ctikzvalof{quadpoles/#1/width}\pgf at xa
+            % by default use the cute inductor size
+            \pgfmathsetlength\pgf at x{-\stretto*\pgf at xa-\ctikzvalof{bipoles/cuteinductor/height}*\pgf at circ@scaled at Rlen/2}
+            % check if it's american
+            \edef\pgf at circ@temp{\ctikzvalof{inductor}}
+            \edef\pgf at temp{american}
+            \ifx\pgf at circ@temp\pgf at temp
+                \pgfmathsetlength\pgf at x{-\stretto*\pgf at xa-\ctikzvalof{bipoles/americaninductor/height}*\pgf at circ@scaled at Rlen/2}
+            \fi
+            % check if it's european
+            \edef\pgf at temp{european}
+            \ifx\pgf at circ@temp\pgf at temp
+                \pgfmathsetlength\pgf at x{-\stretto*\pgf at xa-\ctikzvalof{bipoles/fullgeneric/height}*\pgf at circ@scaled at Rlen/2}
+            \fi
+            \pgfmathsetlength\pgf at y{0.5*\pgf at circ@scaled at Rlen}
+        }
+        \savedanchor{\outerdot}{%
+            \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            \pgf at xa=.5\pgf at circ@scaled at Rlen
+            \pgf at xa=-\ctikzvalof{quadpoles/#1/width}\pgf at xa
+            % by default use the cute inductor size
+            \pgfmathsetlength\pgf at x{-\stretto*\pgf at xa+\ctikzvalof{bipoles/cuteinductor/height}*\pgf at circ@scaled at Rlen/2}
+            % check if it's american
+            \edef\pgf at circ@temp{\ctikzvalof{inductor}}
+            \edef\pgf at temp{american}
+            \ifx\pgf at circ@temp\pgf at temp
+                \pgfmathsetlength\pgf at x{-\stretto*\pgf at xa+\ctikzvalof{bipoles/americaninductor/height}*\pgf at circ@scaled at Rlen/2}
+            \fi
+            % check if it's european
+            \edef\pgf at temp{european}
+            \ifx\pgf at circ@temp\pgf at temp
+                \pgfmathsetlength\pgf at x{-\stretto*\pgf at xa+\ctikzvalof{bipoles/fullgeneric/height}*\pgf at circ@scaled at Rlen/2}
+            \fi
+            \pgfmathsetlength\pgf at y{0.5*\pgf at circ@scaled at Rlen}
+        }
+        \anchor{A2}{
+            \northwest
+            \pgf at y=-\pgf at y
+        }
+        \anchor{B1}{
+            \northwest
+            \pgf at x=-\pgf at x
+        }
+        \anchor{A1}{
+            \northwest
+        }
+        \anchor{B2}{
+            \northwest
+            \pgf at x=-\pgf at x
+            \pgf at y=-\pgf at y
+        }
+        %% dot's anchors
+        \anchor{inner dot A1}{\innerdot\pgf at x=-\pgf at x}
+        \anchor{outer dot A1}{\outerdot\pgf at x=-\pgf at x}
+        \anchor{inner dot A2}{\innerdot\pgf at x=-\pgf at x\pgf at y=-\pgf at y}
+        \anchor{outer dot A2}{\outerdot\pgf at x=-\pgf at x\pgf at y=-\pgf at y}
+        \anchor{inner dot B1}{\innerdot}
+        \anchor{outer dot B1}{\outerdot}
+        \anchor{inner dot B2}{\innerdot\pgf at y=-\pgf at y}
+        \anchor{outer dot B2}{\outerdot\pgf at y=-\pgf at y}
+        % geographical
+        \anchor{north}{
+            \northwest
+            \pgf at x=0pt
+        }
+        \anchor{south}{
+            \northwest
+            \pgf at x=0pt
+            \pgf at y=-\pgf at y
+        }
+        \anchor{west}{
+            \northwest
+            \pgf at y=0pt
+        }
+        \anchor{east}{
+            \northwest
+            \pgf at y=0pt
+            \pgf at x=-\pgf at x
+        }
+        \anchor{south west}{
+            \northwest
+            \pgf at y=-\pgf at y
+        }
+        \anchor{north east}{
+            \northwest
+            \pgf at x=-\pgf at x
+        }
+        \anchor{north west}{
+            \northwest
+        }
+        \anchor{south east}{
+            \northwest
+            \pgf at x=-\pgf at x
+            \pgf at y=-\pgf at y
+        }
+        \anchor{base}{
+            \northwest
+            \pgf at x=0pt
+        }
+        #3
+        \backgroundpath{
+            \pgfsetcolor{\ctikzvalof{color}}
+
+            \northwest
+            \pgf at circ@res at up = \pgf at y
+            \pgf at circ@res at down = -\pgf at y
+            \pgf at circ@res at right = -\pgf at x
+            \pgf at circ@res at left = \pgf at x
+            #2
+        }
+    }
+}
+
+
+\def\pgf at circ@drawtransformerbasicanchor{
+    \ctikzvalof{quadpoles/trans/height}
+    \anchor{AA2}{
+        \northwest
+        \pgf at x=\ctikzvalof{quadpoles/transformer/width1}\pgf at x
+        \pgf at x=.7\pgf at x
+        \pgf at y=-\pgf at y
+        \pgf at y=\ctikzvalof{quadpoles/transformer/height1}\pgf at y
+    }
+    \anchor{BB1}{
+        \northwest
+        \pgf at x=-\pgf at x
+        \pgf at x=\ctikzvalof{quadpoles/transformer/width1}\pgf at x
+        \pgf at x=.7\pgf at x
+        \pgf at y=\ctikzvalof{quadpoles/transformer/height1}\pgf at y
+    }
+    \anchor{AA1}{
+        \northwest
+        \pgf at x=\ctikzvalof{quadpoles/transformer/width1}\pgf at x
+        \pgf at x=.7\pgf at x
+        \pgf at y=\ctikzvalof{quadpoles/transformer/height1}\pgf at y
+    }
+    \anchor{BB2}{
+        \northwest
+        \pgf at x=-\pgf at x
+        \pgf at x=\ctikzvalof{quadpoles/transformer/width1}\pgf at x
+        \pgf at x=.7\pgf at x
+        \pgf at y=-\pgf at y
+        \pgf at y=\ctikzvalof{quadpoles/transformer/height1}\pgf at y
+    }
+}
+
+%% Null styles that can be used to change individually the L1 and L2
+%% inductors of the transformer.
+
+\ctikzset{transformer L1/.style={}}
+\ctikzset{transformer L2/.style={}}
+
+\def\pgf at circ@drawtransformerbasicbody{
+    \pgfscope
+        \pgfslopedattimetrue
+        \pgfallowupsidedownattimetrue
+        \pgftransformlineattime{.5}{%
+            \pgfpoint%
+            {\stretto\pgf at circ@res at left}%
+            {\pgf at circ@res at up}%
+            }{%
+            \pgfpoint
+            {\stretto\pgf at circ@res at left}%
+            {\pgf at circ@res at down}%
+        }
+
+        \pgfkeys{\circuitikzbasekey/.cd, transformer L1}
+        \edef\pgf at circ@temp{\ctikzvalof{inductor}}%
+        \def\pgf at temp{european}%
+        \ifx\pgf at temp\pgf at circ@temp%
+            \pgfnode{fullgenericshape}{center}{}{\thisshape-L1}{\pgfusepath{stroke}}
+        \else%
+            \def\pgf at temp{cute}
+            \ifx\pgf at temp\pgf at circ@temp%
+                \pgfnode{cuteinductorshape}{center}{}{\thisshape-L1}{\pgfusepath{stroke}}
+            \else%
+                \pgfnode{americaninductorshape}{center}{}{\thisshape-L1}{\pgfusepath{stroke}}
+            \fi%
+        \fi%
+
+
+    \endpgfscope
+    \pgfscope
+        \pgfslopedattimetrue
+        \pgfallowupsidedownattimetrue
+        \pgftransformlineattime{.5}{%
+            \pgfpoint%
+            {\stretto\pgf at circ@res at right}%
+            {\pgf at circ@res at down}%
+            }{%
+            \pgfpoint
+            {\stretto\pgf at circ@res at right}%
+            {\pgf at circ@res at up}%
+        }
+
+        \pgfkeys{\circuitikzbasekey/.cd, transformer L2}
+        \edef\pgf at circ@temp{\ctikzvalof{inductor}}%
+        \def\pgf at temp{european}%
+        \ifx\pgf at temp\pgf at circ@temp%
+            \pgfnode{fullgenericshape}{center}{}{\thisshape-L2}{\pgfusepath{stroke}}
+        \else%
+            \def\pgf at temp{cute}
+            \ifx\pgf at temp\pgf at circ@temp%
+                \pgfnode{cuteinductorshape}{center}{}{\thisshape-L2}{\pgfusepath{stroke}}
+            \else%
+                \pgfnode{americaninductorshape}{center}{}{\thisshape-L2}{\pgfusepath{stroke}}
+            \fi%
+        \fi%
+
+    \endpgfscope
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\stretto\pgf at circ@res at left}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpointanchor{\thisshape-L1}{b}}
+
+    \pgfpathmoveto{\pgfpointanchor{\thisshape-L1}{a}}
+    \pgfpathlineto{\pgfpoint{\stretto\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\stretto\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpointanchor{\thisshape-L2}{a}}
+
+    \pgfpathmoveto{\pgfpointanchor{\thisshape-L2}{b}}
+    \pgfpathlineto{\pgfpoint{\stretto\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+
+    \pgfusepath{draw}
+
+}
+
+
+\pgfcircdeclarequadpole{transformer}{
+    \pgf at circ@drawtransformerbasicbody
+}{\pgf at circ@drawtransformerbasicanchor}
+
+\pgfcircdeclarequadpole{transformer core}{
+
+    \pgf at circ@drawtransformerbasicbody
+
+    % use the chocke line thickness
+    \pgfsetlinewidth{\ctikzvalof{bipoles/cutechoke/cthick}\pgflinewidth}
+
+    % Find the distance from center for the lines representing the core
+    % the 2.5 is for backward compatibility --- the distance was calculated as a fraction
+    % of the whole component, now as a fraction of the distance between coils, to be
+    % compatible with the quadpoles "inner" style.
+    \pgfmathsetlength{\pgf at circ@res at other}{2.5*\stretto*\ctikzvalof{quadpoles/transformer core/core width}*\pgf at circ@res at right}
+
+    \pgfmoveto{\pgfpoint%
+        {\pgf at circ@res at other}%
+        {\ctikzvalof{quadpoles/transformer core/core height}\pgf at circ@res at down}%
+    }
+    \pgflineto{
+        \pgfpoint%
+        {\pgf at circ@res at other}%
+        {\ctikzvalof{quadpoles/transformer core/core height}\pgf at circ@res at up}%
+    }
+
+    %% this should be just -\pgf at circ@res at other, but in case someone define an asymmetric trafo someday...
+    \pgfmathsetlength{\pgf at circ@res at other}{2.5*\stretto*\ctikzvalof{quadpoles/transformer core/core width}*\pgf at circ@res at left}
+    \pgfmoveto{\pgfpoint%
+        {\pgf at circ@res at other}%
+        {\ctikzvalof{quadpoles/transformer core/core height}\pgf at circ@res at down}%
+    }
+    \pgflineto{
+        \pgfpoint%
+        {\pgf at circ@res at other}%
+        {\ctikzvalof{quadpoles/transformer core/core height}\pgf at circ@res at up}%
+    }
+
+    \pgf at circ@setlinewidth{bipoles}{\pgflinewidth}
+    \pgfusepath{draw}
+}{\pgf at circ@drawtransformerbasicanchor}
+
+
+\pgfcircdeclarequadpole{gyrator}{
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\stretto\pgf at circ@res at left}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\stretto\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\stretto\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\stretto\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+
+    \pgfusepath{draw}
+
+    \pgf at circ@setlinewidth{quadpoles}{\pgflinewidth}
+    \pgfmathsetlength{\pgf at circ@res at other}{min(.7*\stretto*\pgf at circ@res at up, .8*\pgf at circ@res at right)} % radius
+    \pgfpathmoveto{\pgfpoint{\stretto\pgf at circ@res at left}{-\pgf at circ@res at other}}
+    \pgfpatharc{-90}{90}{\pgf at circ@res at other}
+    \pgfpathclose
+    \pgf at circ@draworfill
+
+    \pgfpathmoveto{\pgfpoint{\stretto\pgf at circ@res at right}{\pgf at circ@res at other}}
+    \pgfpatharc{90}{270}{\pgf at circ@res at other}
+    \pgfpathclose
+    \pgf at circ@draworfill
+}{}
+
+%%%%%%%%%%%%%%%%%%%%
+%% Block elements
+%%%%%%%%%%%%%%%%%%%%
+
+\pgfdeclareshape{mixer}
+{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{blocks}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \savedanchor\northwest{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \ifpgf at circuit@boxed
+            \pgf at y=\ctikzvalof{bipoles/twoport/width}\pgf at circ@scaled at Rlen
+            \pgf at y=.5\pgf at y
+            \pgf at x=-\ctikzvalof{bipoles/twoport/width}\pgf at circ@scaled at Rlen
+            \pgf at x=.5\pgf at x
+        \else
+            \pgf at y=\ctikzvalof{tripoles/mixer/width}\pgf at circ@scaled at Rlen
+            \pgf at y=.5\pgf at y
+            \pgf at x=-\ctikzvalof{tripoles/mixer/width}\pgf at circ@scaled at Rlen
+            \pgf at x=.5\pgf at x
+        \fi
+    }
+    \anchor{center}{
+        \pgfpointorigin
+    }
+    \anchor{left}{%
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{right}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{1}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{2}{
+        \northwest
+        \pgf at y=-\pgf at y
+        \pgf at x=0pt
+    }
+    \anchor{3}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{4}{
+        \northwest
+        \pgf at y=\pgf at y
+        \pgf at x=0pt
+    }
+    \anchor{in 1}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{in1}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{in}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{in 2}{
+        \northwest
+        \pgf at y=-\pgf at y
+        \pgf at x=0pt
+    }
+    \anchor{in2}{
+        \northwest
+        \pgf at y=-\pgf at y
+        \pgf at x=0pt
+    }
+    \anchor{out}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{center}{
+        \pgf at y=0pt
+        \pgf at x=0pt
+    }
+    \anchor{east}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{west}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{south}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{north}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{e}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{w}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{s}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{n}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{down}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{up}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{south west}{
+        \northwest
+        \pgf at y=-\pgf at y
+    }
+    \anchor{north east}{
+        \northwest
+        \pgf at x=-\pgf at x
+    }
+    \anchor{north west}{
+        \northwest
+    }
+    \anchor{south east}{
+        \northwest
+        \pgf at x=-\pgf at x
+        \pgf at y=-\pgf at y
+    }
+    \anchorborder{
+        \pgf at circ@res at left=\pgf at x
+        \pgf at circ@res at up=\pgf at y
+        \pgfpointborderellipse{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}
+        }{\pgfpoint{\ctikzvalof{tripoles/mixer/width}*\scaledRlen/2}{\ctikzvalof{tripoles/mixer/width}*\scaledRlen/2}}
+    }
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+        \pgf at circ@scaled at Rlen=\scaledRlen
+
+        \pgf at circ@res at step=\ctikzvalof{tripoles/mixer/width}\pgf at circ@scaled at Rlen
+
+        \pgfscope
+            \pgfstartlinewidth=\pgflinewidth
+
+            % draw outer box
+            \ifpgf at circuit@boxed
+                \pgfnode{blockbox}{center}{}{pgf at box}{\pgfusepath{draw}}
+            \fi
+
+            % draw outer circle
+            \ifpgf at circuit@boxed
+                \pgf at circ@res at step=.7\pgf at circ@res at step
+                \pgfsetdash{}{0pt}	% draw solid circle if boxed
+            \else
+                \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+            \fi
+            \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf at circ@res at step}
+            \pgf at circ@draworfill
+
+            % draw inner stuff
+            \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+            \pgfsetlinewidth{\pgfstartlinewidth}
+            \pgfpathmoveto{\pgfpointorigin}
+            \pgfpathmoveto{\pgfpointpolar{135}{0.5\pgf at circ@res at step}}
+            \pgfpathlineto{\pgfpointpolar{-45}{0.5\pgf at circ@res at step}}
+            \pgfpathmoveto{\pgfpointorigin}
+            \pgfpathmoveto{\pgfpointpolar{45}{0.5\pgf at circ@res at step}}
+            \pgfpathlineto{\pgfpointpolar{-135}{0.5\pgf at circ@res at step}}
+            \pgfusepath{draw}
+
+        \endpgfscope
+    }
+}
+
+\pgfdeclareshape{adder}
+{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{blocks}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \savedanchor\northwest{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \ifpgf at circuit@boxed
+            \pgf at y=\ctikzvalof{bipoles/twoport/width}\pgf at circ@scaled at Rlen
+            \pgf at y=.5\pgf at y
+            \pgf at x=-\ctikzvalof{bipoles/twoport/width}\pgf at circ@scaled at Rlen
+            \pgf at x=.5\pgf at x
+        \else
+            \pgf at y=\ctikzvalof{tripoles/adder/width}\pgf at circ@scaled at Rlen
+            \pgf at y=.5\pgf at y
+            \pgf at x=-\ctikzvalof{tripoles/adder/width}\pgf at circ@scaled at Rlen
+            \pgf at x=.5\pgf at x
+        \fi
+    }
+    \anchor{center}{
+        \pgfpointorigin
+    }
+    \anchor{left}{%
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{right}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{1}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{2}{
+        \northwest
+        \pgf at y=-\pgf at y
+        \pgf at x=0pt
+    }
+    \anchor{3}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{4}{
+        \northwest
+        \pgf at y=\pgf at y
+        \pgf at x=0pt
+    }
+    \anchor{in 1}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{in1}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{in}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{in 2}{
+        \northwest
+        \pgf at y=-\pgf at y
+        \pgf at x=0pt
+    }
+    \anchor{in2}{
+        \northwest
+        \pgf at y=-\pgf at y
+        \pgf at x=0pt
+    }
+    \anchor{out}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{center}{
+        \pgf at y=0pt
+        \pgf at x=0pt
+    }
+    \anchor{east}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{west}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{south}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{north}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{e}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{w}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{s}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{n}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{down}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{up}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{south west}{
+        \northwest
+        \pgf at y=-\pgf at y
+    }
+    \anchor{north east}{
+        \northwest
+        \pgf at x=-\pgf at x
+    }
+    \anchor{north west}{
+        \northwest
+    }
+    \anchor{south east}{
+        \northwest
+        \pgf at x=-\pgf at x
+        \pgf at y=-\pgf at y
+    }
+    \anchorborder{
+        \pgf at circ@res at left=\pgf at x
+        \pgf at circ@res at up=\pgf at y
+        \pgfpointborderellipse{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}
+        }{\pgfpoint{\ctikzvalof{tripoles/adder/width}*\scaledRlen/2}{\ctikzvalof{tripoles/adder/width}*\scaledRlen/2}}
+    }
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+        \pgf at circ@scaled at Rlen=\scaledRlen
+
+        \pgf at circ@res at step=\ctikzvalof{tripoles/adder/width}\pgf at circ@scaled at Rlen
+
+        \pgfscope
+            \pgfstartlinewidth=\pgflinewidth
+
+            % draw outer box
+            \ifpgf at circuit@boxed
+                \pgfnode{blockbox}{center}{}{pgf at box}{\pgfusepath{draw}}
+            \fi
+
+            % draw outer circle
+            \ifpgf at circuit@boxed
+                \pgf at circ@res at step=.7\pgf at circ@res at step{}
+                \pgfsetdash{}{0pt}	% draw solid circle if boxed
+            \else
+                \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+            \fi
+            \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf at circ@res at step}
+            \pgf at circ@draworfill
+
+            % draw inner stuff
+            \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+            \pgfsetlinewidth{\pgfstartlinewidth}
+
+            \pgfpathmoveto{\pgfpointorigin}
+            \pgfpathmoveto{\pgfpointpolar{0}{0.3\pgf at circ@res at step}}
+            \pgfpathlineto{\pgfpointpolar{180}{0.3\pgf at circ@res at step}}
+            \pgfpathmoveto{\pgfpointorigin}
+            \pgfpathmoveto{\pgfpointpolar{90}{0.3\pgf at circ@res at step}}
+            \pgfpathlineto{\pgfpointpolar{270}{0.3\pgf at circ@res at step}}
+            \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+            \pgfusepath{draw}
+
+        \endpgfscope
+    }
+}
+
+\pgfdeclareshape{oscillator}
+{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{blocks}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \savedanchor\northwest{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \ifpgf at circuit@boxed
+            \pgf at y=\ctikzvalof{bipoles/twoport/width}\pgf at circ@scaled at Rlen
+            \pgf at y=.5\pgf at y
+            \pgf at x=-\ctikzvalof{bipoles/twoport/width}\pgf at circ@scaled at Rlen
+        \else
+            \pgf at y=\ctikzvalof{tripoles/oscillator/width}\pgf at circ@scaled at Rlen
+            \pgf at y=.5\pgf at y
+            \pgf at x=-\ctikzvalof{tripoles/oscillator/width}\pgf at circ@scaled at Rlen
+        \fi
+    }
+    \anchor{center}{
+        \pgfpointorigin
+    }
+    \anchor{north}{
+        \northwest
+        \pgf at x=.5\pgf at x
+    }
+    \anchor{south}{
+        \northwest
+        \pgf at x=.5\pgf at x
+        \pgf at y=-\pgf at y
+    }
+    \anchor{east}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=0pt
+    }
+    \anchor{west}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{up}{
+        \northwest
+        \pgf at x=.5\pgf at x
+    }
+    \anchor{down}{
+        \northwest
+        \pgf at x=.5\pgf at x
+        \pgf at y=-\pgf at y
+    }
+    \anchor{n}{
+        \northwest
+        \pgf at x=.5\pgf at x
+    }
+    \anchor{s}{
+        \northwest
+        \pgf at x=.5\pgf at x
+        \pgf at y=-\pgf at y
+    }
+    \anchor{e}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=0pt
+    }
+    \anchor{w}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{up}{
+        \northwest
+        \pgf at x=.5\pgf at x
+    }
+    \anchor{down}{
+        \northwest
+        \pgf at x=.5\pgf at x
+        \pgf at y=-\pgf at y
+    }
+    \anchor{right}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=0pt
+    }
+    \anchor{left}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{south west}{ \northwest \pgf at y=-\pgf at y}
+    \anchor{north east}{ \northwest \pgf at x=0pt\relax}
+    \anchor{north west}{ \northwest }
+    \anchor{south east}{ \northwest \pgf at x=0pt \pgf at y=-\pgf at y }
+    \anchor{text}{
+        \pgf at x=-2\pgf at x
+        \advance \pgf at x by -.5\wd\pgfnodeparttextbox
+        \advance \pgf at y by -1.5\ht\pgfnodeparttextbox
+    }
+    \anchorborder{
+        \pgf at circ@res at left=\pgf at x
+        \pgf at circ@res at up=\pgf at y
+        \pgfpointborderellipse{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}
+        }{\pgfpoint{\ctikzvalof{tripoles/oscillator/width}*\scaledRlen/2}{\ctikzvalof{tripoles/oscillator/width}*\scaledRlen/2}}
+        \pgfmathsetlength{\pgf at x}{\pgf at x-\ctikzvalof{tripoles/oscillator/width}*\scaledRlen/2}
+    }
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+        \pgf at circ@scaled at Rlen=\scaledRlen
+
+        \pgf at circ@res at step=\ctikzvalof{tripoles/oscillator/width}\pgf at circ@scaled at Rlen{}
+
+        \pgfscope
+            \pgfstartlinewidth=\pgflinewidth
+
+            \pgftransformxshift{-0.5\pgf at circ@res at step} % The oscillator is shifted to the left, so a connection comes out of the anchor "east"
+
+            % draw outer box
+            \ifpgf at circuit@boxed{}
+                \pgfnode{blockbox}{center}{}{pgf at box}{\pgfusepath{draw}}
+            \fi
+
+            % draw outer circle
+            \ifpgf at circuit@boxed
+                \pgf at circ@res at step=.7\pgf at circ@res at step{}
+                \pgfsetdash{}{0pt}	% draw solid circle if boxed
+            \else
+                \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+            \fi
+            \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf at circ@res at step}
+            \pgf at circ@draworfill
+
+            % draw inner sine waves
+            \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+            \pgfsetlinewidth{\pgfstartlinewidth}
+            \pgfsetcornersarced{\pgfpointorigin}% do not use rounded corners!
+            \pgfpathmoveto{\pgfpoint{-0.3\pgf at circ@res at step}{0\pgf at circ@res at step}}
+            \pgfpathsine{\pgfpoint{.15\pgf at circ@res at step}{.15\pgf at circ@res at step}}
+            \pgfpathcosine{\pgfpoint{.15\pgf at circ@res at step}{-.15\pgf at circ@res at step}}
+            \pgfpathsine{\pgfpoint{.15\pgf at circ@res at step}{-.15\pgf at circ@res at step}}
+            \pgfpathcosine{\pgfpoint{.15\pgf at circ@res at step}{.15\pgf at circ@res at step}}
+
+            \pgfusepath{draw}
+
+        \endpgfscope
+    }
+}
+
+\pgfdeclareshape{circulator}
+{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{blocks}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \savedanchor\northwest{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \ifpgf at circuit@boxed
+            \pgf at y=\ctikzvalof{bipoles/twoport/width}\pgf at circ@scaled at Rlen
+            \pgf at y=.5\pgf at y
+            \pgf at x=-\ctikzvalof{bipoles/twoport/width}\pgf at circ@scaled at Rlen
+            \pgf at x=.5\pgf at x
+        \else
+            \pgf at y=\ctikzvalof{tripoles/circulator/width}\pgf at circ@scaled at Rlen
+            \pgf at y=.5\pgf at y
+            \pgf at x=-\ctikzvalof{tripoles/circulator/width}\pgf at circ@scaled at Rlen
+            \pgf at x=.5\pgf at x
+        \fi
+    }
+    \anchor{center}{
+        \pgfpointorigin
+    }
+    \anchor{left}{%
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{right}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{1}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{2}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{3}{
+        \northwest
+        \pgf at y=-\pgf at y
+        \pgf at x=0pt
+    }
+    \anchor{east}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{west}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{south}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{north}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{e}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{w}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{s}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{n}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{down}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{up}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{south west}{
+        \northwest
+        \pgf at y=-\pgf at y
+    }
+    \anchor{north east}{
+        \northwest
+        \pgf at x=-\pgf at x
+    }
+    \anchor{north west}{
+        \northwest
+    }
+    \anchor{south east}{
+        \northwest
+        \pgf at x=-\pgf at x
+        \pgf at y=-\pgf at y
+    }
+    \anchorborder{
+        \pgf at circ@res at left=\pgf at x
+        \pgf at circ@res at up=\pgf at y
+        \pgfpointborderellipse{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}
+        }{\pgfpoint{\ctikzvalof{tripoles/circulator/width}*\scaledRlen/2}{\ctikzvalof{tripoles/circulator/width}*\scaledRlen/2}}
+    }
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+        \pgf at circ@scaled at Rlen=\scaledRlen
+
+        \pgf at circ@res at step=\ctikzvalof{tripoles/circulator/width}\pgf at circ@scaled at Rlen
+
+        \pgfscope
+            \pgfstartlinewidth=\pgflinewidth
+
+            % draw outer box
+            \ifpgf at circuit@boxed
+                \pgfnode{blockbox}{center}{}{pgf at box}{\pgfusepath{draw}}
+            \fi
+
+            % draw outer circle
+            \ifpgf at circuit@boxed{}
+                \pgf at circ@res at step=.7\pgf at circ@res at step{}
+                \pgfsetdash{}{0pt}	% draw solid circle if boxed
+            \else
+                \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+            \fi
+            \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf at circ@res at step}
+            \pgf at circ@draworfill
+
+            % inner arrow
+            \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+            \pgfsetlinewidth{\pgfstartlinewidth}
+
+            \pgfsetarrowsend{latex}
+            \pgfpathmoveto{\pgfpoint{-0.25\pgf at circ@res at step}{0}}
+            \pgfpatharc{180}{-90} {0.25\pgf at circ@res at step}
+            \pgfpathlineto{\pgfpoint{-5pt}{-0.2\pgf at circ@res at step}}
+            \pgfusepath{draw}
+
+            \endpgfscope
+        }
+}
+
+%% gridnode
+\pgfdeclareshape{gridnode}
+{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{blocks}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \savedanchor\northwest{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            \pgf at y=\ctikzvalof{quadpoles/gridnode/width}\pgf at circ@scaled at Rlen
+            \pgf at y=.5\pgf at y
+            \pgf at x=-\ctikzvalof{quadpoles/gridnode/width}\pgf at circ@scaled at Rlen
+            \pgf at x=.5\pgf at x
+    }
+    \anchor{center}{
+        \pgfpointorigin
+    }
+
+    \anchor{north}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{up}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{south}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{down}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{east}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{right}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{west}{
+        \northwest
+        \pgf at y=0pt
+    }    
+    \anchor{left}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{south west}{ 
+        \northwest 
+        \pgf at y=-\pgf at y
+    }
+    \anchor{north east}{
+        \northwest 
+        \pgf at x=-\pgf at x
+        \relax
+    }
+    \anchor{north west}{ 
+        \northwest 
+    }
+    \anchor{south east}{ 
+        \northwest 
+        \pgf at x=-\pgf at x
+        \pgf at y=-\pgf at y
+    }
+    \anchor{text}{
+        \pgf at x=-2\pgf at x
+        \advance \pgf at x by -.5\wd\pgfnodeparttextbox
+        \advance \pgf at y by -1.5\ht\pgfnodeparttextbox
+    }
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+        \pgf at circ@scaled at Rlen=\scaledRlen
+
+        \pgf at circ@res at step=\ctikzvalof{quadpoles/gridnode/width}\pgf at circ@scaled at Rlen
+    
+        \northwest
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        
+        \pgf at circ@res at step = \ctikzvalof{quadpoles/gridnode/width}\pgf at circ@scaled at Rlen
+        \divide \pgf at circ@res at step by 2
+
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+        \pgf at circ@res at other = \pgf at circ@res at left
+        \advance\pgf at circ@res at other by \pgf at circ@res at step
+
+        \ifpgf at circuit@dashed
+            \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+        \fi
+
+        % draw outer box
+        \pgf at circ@twoportbox
+        
+        
+        \ifpgf at circuit@inputarrow
+            {
+                \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+                \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+                \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
+            }
+        \fi
+    
+        \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+        \pgfsetarrows{-} %never draw arrows
+        \pgfsetlinewidth{0.05mm}
+        
+        % draw grid
+        \foreach \line in {-1,-.5,...,1}
+        {
+            \pgfpathmoveto{\pgfpoint{\line\pgf at circ@res at right}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\line\pgf at circ@res at up}}
+            
+            \pgfpathmoveto{\pgfpoint{\line\pgf at circ@res at right}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\line\pgf at circ@res at down}}
+        }
+        
+        %prevent from draw the inner cross twice
+        \foreach \line in {-.5,0,...,.5}
+        {
+            \pgfpathmoveto{\pgfpoint{\line\pgf at circ@res at right}{\pgf at circ@res at down}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\line\pgf at circ@res at up}}
+            
+            \pgfpathmoveto{\pgfpoint{\line\pgf at circ@res at right}{\pgf at circ@res at down}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\line\pgf at circ@res at down}}
+        }
+        \pgfusepath{draw}
+    }
+}
+    
+
+% Wilkinson divider
+\pgfdeclareshape{wilkinson}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{blocks}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \savedanchor\northwest{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/wilkinson/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x= \pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at x=-\ctikzvalof{tripoles/wilkinson/width}\pgf at x
+    }
+    \anchor{center}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=0pt
+    }
+    \anchor{north}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{south}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{west}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{east}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{south west}{
+        \northwest
+        \pgf at y=-\pgf at y
+    }
+    \anchor{north east}{
+        \northwest
+        \pgf at x=-\pgf at x
+    }
+    \anchor{north west}{
+        \northwest
+    }
+    \anchor{south east}{
+        \northwest
+        \pgf at x=-\pgf at x
+        \pgf at y=-\pgf at y
+    }
+    \anchor{in}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{out1}{
+        \northwest
+        \pgf at x=-\pgf at x
+        \pgf at y=-0.5\pgf at y
+    }
+    \anchor{out2}{
+        \northwest
+        \pgf at x=-\pgf at x
+        \pgf at y=0.5\pgf at y
+    }
+    \anchor{text}{
+        \northwest
+        \advance \pgf at y by 0.5\ht\pgfnodeparttextbox
+        \pgf at x=-.5\wd\pgfnodeparttextbox
+    }
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+        \pgf at circ@scaled at Rlen=\scaledRlen
+
+        \northwest
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+
+        \pgfstartlinewidth=\pgflinewidth
+
+        % draw outer box
+        \pgf at circ@twoportbox
+
+        % draw inner stuff
+        \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+        \pgfsetarrows{-} %never draw arrows
+        \pgfsetlinewidth{\pgfstartlinewidth}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+        \pgfpathlineto{\pgfpoint{0.5\pgf at circ@res at left}{0pt}}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0.5\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0.5\pgf at circ@res at right}{0.5\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0.5\pgf at circ@res at left}{0pt}}
+        \pgfpathlineto{\pgfpoint{0.5\pgf at circ@res at right}{0.5\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0.5\pgf at circ@res at down}}
+
+        \pgfusepath{draw}
+
+        \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+        % draw inner resisitor - european or american style is recognised
+        {
+            \pgftransformshift{\pgfpoint{0.5\pgf at circ@res at right}{0pt}}
+            \pgftransformrotate{90}
+
+            % calculate size of resistor
+            \ifpgf at circuit@europeanresistor
+                \pgfmathparse{\pgf at circ@res at up / \pgf at circ@scaled at Rlen / \ctikzvalof{bipoles/generic/width} / 2}
+                \pgftransformscale{\pgfmathresult}
+                \pgfnode{genericshape}{center}{}{wilk at int@R}{\pgfusepath{fill}}
+            \else
+                \pgfmathparse{\pgf at circ@res at up / \pgf at circ@scaled at Rlen / \ctikzvalof{bipoles/resistor/width} / 2}
+                \pgftransformscale{\pgfmathresult}
+                \pgfnode{resistorshape}{center}{}{wilk at int@R}{\pgfusepath{fill}}
+            \fi
+        }
+
+        \pgfpathmoveto{\pgfpoint{0.5\pgf at circ@res at right}{0.5\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpointanchor{wilk at int@R}{right}}
+
+        \pgfpathmoveto{\pgfpointanchor{wilk at int@R}{left}}
+        \pgfpathlineto{\pgfpoint{0.5\pgf at circ@res at right}{0.5\pgf at circ@res at down}}
+        \pgfusepath{draw}
+
+    }
+}
+
+%% resistive splitter
+\pgfdeclareshape{splitter}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{blocks}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \savedanchor\northwest{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/wilkinson/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x= \pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at x=-\ctikzvalof{tripoles/wilkinson/width}\pgf at x
+    }
+    \anchor{center}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=0pt
+    }
+    \anchor{north}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{south}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{west}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{east}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{south west}{
+        \northwest
+        \pgf at y=-\pgf at y
+    }
+    \anchor{north east}{
+        \northwest
+        \pgf at x=-\pgf at x
+    }
+    \anchor{north west}{
+        \northwest
+    }
+    \anchor{south east}{
+        \northwest
+        \pgf at x=-\pgf at x
+        \pgf at y=-\pgf at y
+    }
+    \anchor{in}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{out1}{
+        \northwest
+        \pgf at x=-\pgf at x
+        \pgf at y=-0.5\pgf at y
+    }
+    \anchor{out2}{
+        \northwest
+        \pgf at x=-\pgf at x
+        \pgf at y=0.5\pgf at y
+    }
+    \anchor{text}{
+        \northwest
+        \advance \pgf at y by 0.5\ht\pgfnodeparttextbox
+        \pgf at x=-.5\wd\pgfnodeparttextbox
+    }
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+        \pgf at circ@scaled at Rlen=\scaledRlen
+
+        \northwest
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+
+        \pgfstartlinewidth=\pgflinewidth
+
+        % draw outer box
+        \pgf at circ@twoportbox
+
+        % draw inner stuff
+        \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+        \pgfsetarrows{-} %never draw arrows
+        \pgfsetlinewidth{\pgfstartlinewidth}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+        \pgfpathlineto{\pgfpoint{0.5\pgf at circ@res at left}{0pt}}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0.5\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0.5\pgf at circ@res at right}{0.5\pgf at circ@res at up}}
+        \pgfpathmoveto{\pgfpoint{0.5\pgf at circ@res at left}{0pt}}
+        \pgfpathmoveto{\pgfpoint{0.5\pgf at circ@res at right}{0.5\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0.5\pgf at circ@res at down}}
+
+        \pgfusepath{draw}
+
+        \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+        % draw inner resisitors - european or american style is recognised
+        \foreach \respt/\resang/\linepta/\lineptb in %
+        { \pgfpoint{0.5\pgf at circ@res at right}{0pt}/90/%
+            \pgfpoint{0.5\pgf at circ@res at right}{0.5\pgf at circ@res at up}/\pgfpoint{0.5\pgf at circ@res at right}{0.5\pgf at circ@res at down},%
+          \pgfpoint{0}{0.25\pgf at circ@res at up}/25/%
+            \pgfpoint{0.5\pgf at circ@res at right}{0.5\pgf at circ@res at up}/\pgfpoint{0.5\pgf at circ@res at left}{0},%
+          \pgfpoint{0}{0.25\pgf at circ@res at down}/-25/%
+            \pgfpoint{0.5\pgf at circ@res at right}{0.5\pgf at circ@res at down}/\pgfpoint{0.5\pgf at circ@res at left}{0}}
+        {
+            {
+                \pgftransformshift{\respt}
+                \pgftransformrotate{\resang}
+
+                % calculate size of resistor
+                \ifpgf at circuit@europeanresistor
+                    \pgfmathparse{\pgf at circ@res at up / \pgf at circ@scaled at Rlen / \ctikzvalof{bipoles/generic/width} / 2}
+                    \pgftransformscale{\pgfmathresult}
+                    \pgfnode{genericshape}{center}{}{wilk at int@R}{\pgfusepath{fill}}
+                \else
+                    \pgfmathparse{\pgf at circ@res at up / \pgf at circ@scaled at Rlen / \ctikzvalof{bipoles/resistor/width} / 2}
+                    \pgftransformscale{\pgfmathresult}
+                    \pgfnode{resistorshape}{center}{}{wilk at int@R}{\pgfusepath{fill}}
+                \fi
+            }
+
+            \pgfpathmoveto{\linepta}
+            \pgfpathlineto{\pgfpointanchor{wilk at int@R}{right}}
+
+            \pgfpathmoveto{\pgfpointanchor{wilk at int@R}{left}}
+            \pgfpathlineto{\lineptb}
+            \pgfusepath{draw}
+        }
+    }
+}
+
+%% couplers generics
+\long\def\pgfcircdeclarefourport#1#2{
+
+    \pgfdeclareshape{#1}{
+        \savedmacro{\ctikzclass}{\edef\ctikzclass{blocks}}
+        \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+        \anchor{center}{
+            \northwest
+            \pgf at x=0pt
+            \pgf at y=0pt
+        }
+        \savedanchor\northwest{%
+            \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            \pgf at y=\ctikzvalof{quadpoles/#1/height}\pgf at circ@scaled at Rlen
+            \pgf at y=.5\pgf at y
+            \pgf at x=.5\pgf at circ@scaled at Rlen
+            \pgf at x=-\ctikzvalof{quadpoles/#1/width}\pgf at x
+        }
+        \anchor{north}{
+            \northwest
+            \pgf at x=0pt
+        }
+        \anchor{south}{
+            \northwest
+            \pgf at x=0pt
+            \pgf at y=-\pgf at y
+        }
+        \anchor{west}{
+            \northwest
+            \pgf at y=0pt
+        }
+        \anchor{east}{
+            \northwest
+            \pgf at y=0pt
+            \pgf at x=-\pgf at x
+        }
+        \anchor{south west}{
+            \northwest
+            \pgf at y=-\pgf at y
+        }
+        \anchor{north east}{
+            \northwest
+            \pgf at x=-\pgf at x
+        }
+        \anchor{north west}{
+            \northwest
+        }
+        \anchor{south east}{
+            \northwest
+            \pgf at x=-\pgf at x
+            \pgf at y=-\pgf at y
+        }
+        \anchor{port1}{
+            \northwest
+            \pgf at y=-0.5\pgf at y
+        }
+        \anchor{port2}{
+            \northwest
+            \pgf at x=-\pgf at x
+            \pgf at y=-0.5\pgf at y
+        }
+        \anchor{port3}{
+            \northwest
+            \pgf at x=-\pgf at x
+            \pgf at y=0.5\pgf at y
+        }
+        \anchor{port4}{
+            \northwest
+            \pgf at y=0.5\pgf at y
+        }
+        \anchor{left down}{
+            \northwest
+            \pgf at y=-0.5\pgf at y
+        }
+        \anchor{right down}{
+            \northwest
+            \pgf at x=-\pgf at x
+            \pgf at y=-0.5\pgf at y
+        }
+        \anchor{right up}{
+            \northwest
+            \pgf at x=-\pgf at x
+            \pgf at y=0.5\pgf at y
+        }
+        \anchor{left up}{
+            \northwest
+            \pgf at y=0.5\pgf at y
+        }
+        \anchor{1}{
+            \northwest
+            \pgf at y=-0.5\pgf at y
+        }
+        \anchor{2}{
+            \northwest
+            \pgf at x=-\pgf at x
+            \pgf at y=-0.5\pgf at y
+        }
+        \anchor{3}{
+            \northwest
+            \pgf at x=-\pgf at x
+            \pgf at y=0.5\pgf at y
+        }
+        \anchor{4}{
+            \northwest
+            \pgf at y=0.5\pgf at y
+        }
+
+        \anchor{text}{
+            \northwest
+            \advance \pgf at y by 0.5\ht\pgfnodeparttextbox
+            \pgf at x=-.5\wd\pgfnodeparttextbox
+        }
+        \backgroundpath{
+            \pgfsetcolor{\ctikzvalof{color}}
+
+            \northwest
+            \pgf at circ@res at up = \pgf at y
+            \pgf at circ@res at down = -\pgf at y
+            \pgf at circ@res at right = -\pgf at x
+            \pgf at circ@res at left = \pgf at x
+            \pgf at circ@scaled at Rlen=\scaledRlen
+
+            \pgfstartlinewidth=\pgflinewidth
+
+            % draw outer box
+            \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+            \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+            \pgf at circ@draworfill
+
+            % draw inner stuff
+            #2
+
+            % draw inner text
+            \pgftext[center,x=-0.15\pgf at circ@res at step,y=0]{\ctikzvalof{bipoles/twoport/text}}
+        }
+    }
+}
+
+% four-port
+\pgfcircdeclarefourport{fourport}{}
+
+% straight coupler
+\pgfcircdeclarefourport{coupler}{
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0.5\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0.5\pgf at circ@res at up}}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0.5\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0.5\pgf at circ@res at down}}
+    \pgfusepath{draw}
+
+    \pgfpathmoveto{\pgfpoint{0.7\pgf at circ@res at left}{0.4\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{0.7\pgf at circ@res at right}{0.4\pgf at circ@res at up}}
+    \pgfsetarrows{latex-latex}
+    \pgfusepath{draw}
+    \pgfpathmoveto{\pgfpoint{0.7\pgf at circ@res at left}{0.4\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{0.7\pgf at circ@res at right}{0.4\pgf at circ@res at down}}
+    \pgfsetarrows{latex-latex}
+    \pgfusepath{draw}
+}
+
+% "bended" coupler
+\pgfcircdeclarefourport{coupler2}{
+    \pgfsetlinewidth{\pgfstartlinewidth}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0.5\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0.5\pgf at circ@res at up}}
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0.5\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0.5\pgf at circ@res at down}}
+    \pgfusepath{draw}
+
+    \pgfscope
+        \pgfpathmoveto{\pgfpoint{0.1\pgf at circ@res at left}{0pt}}
+        \pgfpatharc{0}{90} {0.4\pgf at circ@res at up}
+        \pgfsetarrowsend{latex}
+        \pgfusepath{draw}
+    \endpgfscope
+    \pgfscope
+        \pgfpathmoveto{\pgfpoint{0.1\pgf at circ@res at left}{0pt}}
+        \pgfpatharc{0}{-90} {0.4\pgf at circ@res at up}
+        \pgfsetarrowsend{latex}
+        \pgfusepath{draw}
+    \endpgfscope
+    \pgfscope
+        \pgfpathmoveto{\pgfpoint{0.1\pgf at circ@res at right}{0pt}}
+        \pgfpatharc{180}{90} {0.4\pgf at circ@res at up}
+        \pgfsetarrowsend{latex}
+        \pgfusepath{draw}
+    \endpgfscope
+    \pgfscope
+        \pgfpathmoveto{\pgfpoint{0.1\pgf at circ@res at right}{0pt}}
+        \pgfpatharc{-180}{-90} {0.4\pgf at circ@res at up}
+        \pgfsetarrowsend{latex}
+        \pgfusepath{draw}
+    \endpgfscope
+}
+
+% mach zehnder modulator
+\pgfdeclareshape{mzm}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{blocks}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \savedanchor\northwest{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/mzm/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x= \pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+        \pgf at x=-\ctikzvalof{tripoles/mzm/width}\pgf at x
+    }
+    \anchor{center}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=0pt
+    }
+    \anchor{north}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{south}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{west}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{east}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{south west}{
+        \northwest
+        \pgf at y=-\pgf at y
+    }
+    \anchor{north east}{
+        \northwest
+        \pgf at x=-\pgf at x
+    }
+    \anchor{north west}{
+        \northwest
+    }
+    \anchor{south east}{
+        \northwest
+        \pgf at x=-\pgf at x
+        \pgf at y=-\pgf at y
+    }
+    \anchor{in}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{mod}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{out}{
+        \northwest
+        \pgf at x=-\pgf at x
+        \pgf at y=0pt
+    }
+    \anchor{text}{
+        \northwest
+        \advance \pgf at y by 0.5\ht\pgfnodeparttextbox
+        \pgf at x=-.5\wd\pgfnodeparttextbox
+    }
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+        \pgf at circ@scaled at Rlen=\scaledRlen
+
+        \northwest
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+
+        \pgfstartlinewidth=\pgflinewidth
+
+        % draw outer box
+        \pgf at circ@twoportbox
+
+        % draw inner stuff
+          % rotate inner symbol
+    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
+    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+        \pgftransformrotate{270}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225  % 134 degree, because >= 135 is not possible
+        \pgftransformrotate{180}
+    \fi\fi
+    \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+        \pgftransformrotate{90}
+    \fi\fi
+
+    % draw inner symbol
+     \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
+     \pgfsetarrows{-} %never draw arrows
+     \pgfsetlinewidth{\pgfstartlinewidth}
+	\pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+	\pgfpathlineto{\pgfpoint{0.75\pgf at circ@res at left}{\pgf at circ@res at zero}}
+     \pgfusepath{draw}
+
+	\pgfpathmoveto{\pgfpoint{0.75\pgf at circ@res at left}{\pgf at circ@res at zero}}
+	\pgfpathlineto{\pgfpoint{0.5\pgf at circ@res at left}{0.25\pgf at circ@res at up}}
+	\pgfusepath{draw}
+
+	\pgfpathmoveto{\pgfpoint{0.75\pgf at circ@res at left}{\pgf at circ@res at zero}}
+	\pgfpathlineto{\pgfpoint{0.5\pgf at circ@res at left}{0.25\pgf at circ@res at down}}
+	\pgfusepath{draw}
+
+	\pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at zero}}
+	\pgfpathlineto{\pgfpoint{0.75\pgf at circ@res at right}{\pgf at circ@res at zero}}
+     \pgfusepath{draw}
+
+	\pgfpathmoveto{\pgfpoint{0.75\pgf at circ@res at right}{\pgf at circ@res at zero}}
+	\pgfpathlineto{\pgfpoint{0.5\pgf at circ@res at right}{0.25\pgf at circ@res at up}}
+	\pgfusepath{draw}
+
+	\pgfpathmoveto{\pgfpoint{0.75\pgf at circ@res at right}{\pgf at circ@res at zero}}
+	\pgfpathlineto{\pgfpoint{0.5\pgf at circ@res at right}{0.25\pgf at circ@res at down}}
+	\pgfusepath{draw}
+
+	\pgfpathmoveto{\pgfpoint{0.5\pgf at circ@res at right}{0.25\pgf at circ@res at up}}
+	\pgfpathlineto{\pgfpoint{0.5\pgf at circ@res at left}{0.25\pgf at circ@res at up}}
+	\pgfusepath{draw}
+
+	\pgfpathmoveto{\pgfpoint{0.5\pgf at circ@res at right}{0.25\pgf at circ@res at down}}
+	\pgfpathlineto{\pgfpoint{0.5\pgf at circ@res at left}{0.25\pgf at circ@res at down}}
+	\pgfusepath{draw}
+	
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at zero}{\pgf at circ@res at up}}
+	\pgfpathlineto{\pgfpoint{\pgf at circ@res at zero}{0.35\pgf at circ@res at up}}
+	\pgfpathlineto{\pgfpoint{0.25\pgf at circ@res at right}{0.1\pgf at circ@res at up}}
+	\pgfusepath{draw}
+
+    }
+}
+%%%---------- close: tex/pgfcircquadpoles
+%%%%%%%%%%% Springe nach tex/pgfcircmultipoles
+%%%---------- open: tex/pgfcircmultipoles.tex
+% Copyright 2018-2020 by Romano Giannetti
+% Copyright 2015-2020 by Stefan Lindner
+% Copyright 2013-2020 by Stefan Erhardt
+% Copyright 2007-2020 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Multipoles by Romano Giannetti
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%
+%% Chips
+%%%%%%%%%
+
+% let's use the same shifts everywhere, no magic numbers
+\def\pgf at circ@dip at pin@shift{0.5}
+\def\pgf at circ@qfp at pin@shift{0.25}
+
+% derived from https://tex.stackexchange.com/a/146753/38080
+% original author Mark Wibrow
+% Thanks also to John Kormylo https://tex.stackexchange.com/a/372996/38080
+% a lot of thanks to @marmot  for the un-rotation hint
+% https://tex.stackexchange.com/a/473571/38080
+
+% DIP (dual in line package) chips
+
+\pgfdeclareshape{dipchip}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{chips}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \savedmacro\numpins{%
+            \pgf at circ@count at a=\ctikzvalof{multipoles/dipchip/num pins}%
+            \def\numpins{\the\pgf at circ@count at a}
+    }
+    \savedanchor\centerpoint{%
+        \pgf at x=-.5\wd\pgfnodeparttextbox%
+        \pgf at y=-.5\ht\pgfnodeparttextbox%
+        \advance\pgf at y by+.5\dp\pgfnodeparttextbox%
+    }%
+    \savedanchor\origin{\pgfpoint{0pt}{0pt}}
+    \anchor{center}{\origin}
+    \anchor{text}{\centerpoint}% to adjust text
+    \saveddimen\height{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgfmathsetlength\pgf at x{((\numpins)
+        *\ctikzvalof{multipoles/dipchip/pin spacing})*\pgf at circ@scaled at Rlen/2}%
+    }%
+    \saveddimen{\chipspacing}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgfmathsetlength\pgf at x{\pgf at circ@scaled at Rlen*\ctikzvalof{multipoles/dipchip/pin spacing}}}
+    \saveddimen{\width}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgfmathsetlength\pgf at x{\pgf at circ@scaled at Rlen*\ctikzvalof{multipoles/dipchip/width}}}
+    \saveddimen{\extshift}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgfmathsetlength\pgf at x{\pgf at circ@scaled at Rlen*\ctikzvalof{multipoles/external pins width}}}
+    % standard anchors
+    \savedanchor\northwest{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgfmathsetlength\pgf at y{0.5*((\numpins)
+        *\ctikzvalof{multipoles/dipchip/pin spacing})*\pgf at circ@scaled at Rlen/2}%
+        \pgfmathsetlength\pgf at x{-0.5*\pgf at circ@scaled at Rlen*\ctikzvalof{multipoles/dipchip/width}}
+    }
+    \anchor{dot}{\northwest
+        \pgfmathsetlength\pgf at x{\pgf at x + 0.3*\chipspacing}
+        \pgfmathsetlength\pgf at y{\pgf at y - 0.3*\chipspacing}
+    }
+    \anchor{nw}{\northwest}
+    \anchor{ne}{\northwest\pgf at x=-\pgf at x}
+    \anchor{se}{\northwest\pgf at x=-\pgf at x\pgf at y=-\pgf at y}
+    \anchor{sw}{\northwest\pgf at y=-\pgf at y}
+    \anchor{north west}{\northwest}
+    \anchor{north east}{\northwest\pgf at x=-\pgf at x}
+    \anchor{south east}{\northwest\pgf at x=-\pgf at x \pgf at y=-\pgf at y}
+    \anchor{south west}{\northwest\pgf at y=-\pgf at y}
+    \anchor{n}{\northwest\pgf at x=0pt }
+    \anchor{e}{\northwest\pgf at x=-\pgf at x\pgf at y=0pt }
+    \anchor{s}{\northwest\pgf at x=0pt\pgf at y=-\pgf at y}
+    \anchor{w}{\northwest\pgf at y=0pt }
+    \anchor{north}{\northwest\pgf at x=0pt }
+    \anchor{east}{\northwest\pgf at x=-\pgf at x\pgf at y=0pt }
+    \anchor{south}{\northwest\pgf at x=0pt\pgf at y=-\pgf at y}
+    \anchor{west}{\northwest\pgf at y=0pt }
+    % start drawing
+    \backgroundpath{%
+        \northwest
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        \pgf at circ@scaled at Rlen=\scaledRlen
+        \pgf at circ@res at step = \ctikzvalof{multipoles/dipchip/pin spacing}\pgf at circ@scaled at Rlen
+        \pgf at circ@res at other = \ctikzvalof{multipoles/external pins width}\pgf at circ@scaled at Rlen
+        \pgfscope% (for the line width)
+        \pgf at circ@setlinewidth{multipoles}{\pgflinewidth}
+        \pgfpathrectanglecorners{\pgfpoint{-\width/2}{-\height/2}}{\pgfpoint{\width/2}{\height/2}}%
+        \pgf at circ@draworfill
+        %% upside mark
+        \ifpgf at circuit@chip at topmark
+            \pgfpathmoveto{\pgfpoint{0.2*\pgf at circ@res at left}{\pgf at circ@res at up}}
+            \pgfpatharc{0}{180}{0.2*\pgf at circ@res at left}
+        \fi
+        \pgfusepath{stroke}%
+        \pgfsetcolor{\ctikzvalof{color}}
+        % Adding the pin number
+        \ifpgf at circuit@chip at shownumbers
+            \pgf at circ@count at a=\numpins\relax
+            \divide\pgf at circ@count at a by 2 \pgf at circ@count at b=\pgf at circ@count at a
+            % thanks to @marmot: https://tex.stackexchange.com/a/473571/38080
+            \ifpgf at circuit@chip at straightnumbers
+                \pgfgettransformentries\a\b\temp\temp\temp\temp
+                \pgfmathsetmacro{\rot}{-atan2(\b,\a)}
+                \pgfmathtruncatemacro{\quadrant}{mod(4+int(360+(\rot+45)/90),4)}
+            \else
+                \pgfmathsetmacro{\rot}{0}
+                \pgfmathsetmacro{\quadrant}{0}
+            \fi
+            \def\pgf at circ@strut{\vrule width 0pt height 1em depth 0.4em\relax}
+            \def\mytext{\ctikzvalof{multipoles/font}\space\pgf at circ@strut\the\pgf at circ@count at c\space}
+            \pgfmathloop%
+            \ifnum\pgf at circ@count at a>0
+                \ifcase\quadrant % rotation 0
+                    % left
+                    \pgf at circ@count at c=\pgf at circ@count at a
+                    \pgftext[left,
+                        at=\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step},
+                        rotate=\rot]{\mytext}
+                    % right
+                    \pgf at circ@count at c=\numexpr2*\pgf at circ@count at b-\pgf at circ@count at a+1\relax
+                    \pgftext[right,
+                        at=\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step},
+                        rotate=\rot]{\mytext}
+                \or % rotation -90
+                    % left
+                    \pgf at circ@count at c=\pgf at circ@count at a
+                    \pgftext[top,
+                        at=\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step},
+                        rotate=\rot]{\mytext}
+                    % right
+                    \pgf at circ@count at c=\numexpr2*\pgf at circ@count at b-\pgf at circ@count at a+1\relax
+                    \pgftext[bottom,
+                        at=\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step},
+                        rotate=\rot]{\mytext}
+                \or %rotation 180
+                    % left
+                    \pgf at circ@count at c=\pgf at circ@count at a
+                    \pgftext[right,
+                        at=\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step},
+                        rotate=\rot]{\mytext}
+                    % right
+                    \pgf at circ@count at c=\numexpr2*\pgf at circ@count at b-\pgf at circ@count at a+1\relax
+                    \pgftext[left,
+                        at=\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step},
+                        rotate=\rot]{\mytext}
+                \or % rotation +90
+                    % left
+                    \pgf at circ@count at c=\pgf at circ@count at a
+                    \pgftext[bottom,
+                        at=\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step},
+                        rotate=\rot]{\mytext}
+                    % right
+                    \pgf at circ@count at c=\numexpr2*\pgf at circ@count at b-\pgf at circ@count at a+1\relax
+                    \pgftext[top,
+                        at=\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step},
+                        rotate=\rot]{\mytext}
+                \fi
+                \advance\pgf at circ@count at a-1\relax%
+                \repeatpgfmathloop
+            \fi
+            \endpgfscope
+            \ifdim\pgf at circ@res at other>0pt
+            \pgfscope
+                \pgfsetlinewidth{\ctikzvalof{multipoles/external pins thickness}\pgflinewidth}
+                \pgf at circ@count at a=\numpins\relax
+                \divide\pgf at circ@count at a by 2 \pgf at circ@count at b=\pgf at circ@count at a
+                \pgfmathloop%
+                \ifnum\pgf at circ@count at a>0
+                    \edef\padfrac{\ctikzvalof{multipoles/external pad fraction}}
+                    \ifnum\padfrac>0
+                        \pgf at circ@res at temp=\pgf at circ@res at step\divide\pgf at circ@res at temp by \padfrac
+                        % left side pads
+                        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at temp+\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\pgf at circ@res at other}{\pgf at circ@res at temp+\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\pgf at circ@res at other}{-\pgf at circ@res at temp+\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{-\pgf at circ@res at temp+\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        % right side pads
+                        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at temp+\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right+\pgf at circ@res at other}{\pgf at circ@res at temp+\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right+\pgf at circ@res at other}{-\pgf at circ@res at temp+\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{-\pgf at circ@res at temp+\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                    \else
+                        % left side pins
+                        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\pgf at circ@res at other}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        % right side pins
+                        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right+\pgf at circ@res at other}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                    \fi
+                    \advance\pgf at circ@count at a by -1\relax%
+                \repeatpgfmathloop
+                \pgfusepath{stroke}
+            \endpgfscope
+            \fi
+        }%
+        % \pgf at sh@s@<name of the shape here> contains all the code for the shape
+        % and is executed just before a node is drawn.
+        \pgfutil at g@addto at macro\pgf at sh@s at dipchip{%
+            % Start with the maximum pin number and go backwards.
+            \pgf at circ@count at a=\numpins\relax
+            \pgfmathloop%
+            \ifnum\pgf at circ@count at a>0
+                % we will create two anchors per pin: the "normal one" like `pin 1` for the
+                % electrical contact, and the "border one" like `bpin 1` for labels.
+                % they will coincide if `external pins width` is set to 0.
+                \expandafter\xdef\csname pgf at anchor@dipchip at pin\space\the\pgf at circ@count at a\endcsname{%
+                    \noexpand\pgf at circ@dippinanchor{\the\pgf at circ@count at a}{1}%
+                }
+                \expandafter\xdef\csname pgf at anchor@dipchip at bpin\space\the\pgf at circ@count at a\endcsname{%
+                    \noexpand\pgf at circ@dippinanchor{\the\pgf at circ@count at a}{0}%
+                }
+                \advance\pgf at circ@count at a by -1\relax%
+                \repeatpgfmathloop%
+            }%
+        }
+
+% QFP (quad flat package) chips
+
+\pgfdeclareshape{qfpchip}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{chips}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \savedmacro\numpins{%
+            \pgf at circ@count at a=\ctikzvalof{multipoles/qfpchip/num pins}%
+            \def\numpins{\the\pgf at circ@count at a}
+    }
+    \savedanchor\centerpoint{%
+        \pgf at x=-.5\wd\pgfnodeparttextbox%
+        \pgf at y=-.5\ht\pgfnodeparttextbox%
+        \advance\pgf at y by+.5\dp\pgfnodeparttextbox%
+    }%
+    \savedanchor\origin{\pgfpoint{0pt}{0pt}}
+    \anchor{center}{\origin}
+    \anchor{text}{\centerpoint}% to adjust text
+    \saveddimen\height{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgfmathsetlength\pgf at x{((\numpins+2)
+        *\ctikzvalof{multipoles/qfpchip/pin spacing})*\pgf at circ@scaled at Rlen/4}%
+    }%
+    \saveddimen\width{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgfmathsetlength\pgf at x{((\numpins+2)
+        *\ctikzvalof{multipoles/qfpchip/pin spacing})*\pgf at circ@scaled at Rlen/4}%
+    }%
+    \saveddimen{\chipspacing}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgfmathsetlength\pgf at x{\pgf at circ@scaled at Rlen*\ctikzvalof{multipoles/qfpchip/pin spacing}}}
+    \saveddimen{\extshift}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgfmathsetlength\pgf at x{\pgf at circ@scaled at Rlen*\ctikzvalof{multipoles/external pins width}}}
+    % standard anchors
+    \savedanchor\northwest{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgfmathsetlength\pgf at y{0.5*((\numpins+2)
+        *\ctikzvalof{multipoles/qfpchip/pin spacing})*\pgf at circ@scaled at Rlen/4}%
+        \pgf at x=-\pgf at y
+    }
+    \anchor{dot}{\northwest
+        \pgfmathsetlength\pgf at x{\pgf at x + 0.3*\chipspacing}
+        \pgfmathsetlength\pgf at y{\pgf at y - 0.3*\chipspacing}
+    }
+    \anchor{nw}{\northwest}
+    \anchor{ne}{\northwest\pgf at x=-\pgf at x}
+    \anchor{se}{\northwest\pgf at x=-\pgf at x\pgf at y=-\pgf at y}
+    \anchor{sw}{\northwest\pgf at y=-\pgf at y}
+    \anchor{north west}{\northwest}
+    \anchor{north east}{\northwest\pgf at x=-\pgf at x}
+    \anchor{south east}{\northwest\pgf at x=-\pgf at x \pgf at y=-\pgf at y}
+    \anchor{south west}{\northwest\pgf at y=-\pgf at y}
+    \anchor{n}{\northwest\pgf at x=0pt }
+    \anchor{e}{\northwest\pgf at x=-\pgf at x\pgf at y=0pt }
+    \anchor{s}{\northwest\pgf at x=0pt\pgf at y=-\pgf at y}
+    \anchor{w}{\northwest\pgf at y=0pt }
+    \anchor{north}{\northwest\pgf at x=0pt }
+    \anchor{east}{\northwest\pgf at x=-\pgf at x\pgf at y=0pt }
+    \anchor{south}{\northwest\pgf at x=0pt\pgf at y=-\pgf at y}
+    \anchor{west}{\northwest\pgf at y=0pt }
+    % start drawing
+    \backgroundpath{%
+        \northwest
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        \pgf at circ@scaled at Rlen=\scaledRlen
+        \pgf at circ@res at step = \ctikzvalof{multipoles/qfpchip/pin spacing}\pgf at circ@scaled at Rlen
+        \pgf at circ@res at other = \ctikzvalof{multipoles/external pins width}\pgf at circ@scaled at Rlen
+        \pgfscope% (for the line width)
+        \pgf at circ@setlinewidth{multipoles}{\pgflinewidth}
+        %% upside mark
+        \ifpgf at circuit@chip at topmark
+            \pgfpathmoveto{\pgfpoint{-\width/2}{\height/2-\pgf at circ@res at step/2}}
+            \pgfpathlineto{\pgfpoint{-\width/2+\pgf at circ@res at step/2}{\height/2}}
+        \else
+            \pgfpathmoveto{\pgfpoint{-\width/2}{\height/2}}
+        \fi
+        %% rest of the shape
+        \pgfpathlineto{\pgfpoint{\width/2}{\height/2}}
+        \pgfpathlineto{\pgfpoint{\width/2}{-\height/2}}
+        \pgfpathlineto{\pgfpoint{-\width/2}{-\height/2}}
+        \pgfpathclose
+        \pgf at circ@draworfill
+        % Adding the pin number
+        \pgfsetcolor{\ctikzvalof{color}}
+        \ifpgf at circuit@chip at shownumbers
+            \pgf at circ@count at a=\numpins%
+            \divide\pgf at circ@count at a by 4 \pgf at circ@count at b=\pgf at circ@count at a
+            % thanks to @marmot: https://tex.stackexchange.com/a/473571/38080
+            \ifpgf at circuit@chip at straightnumbers
+                \pgfgettransformentries\a\b\temp\temp\temp\temp
+                \pgfmathsetmacro{\rot}{-atan2(\b,\a)}
+                \pgfmathtruncatemacro{\quadrant}{mod(4+int(360+(\rot+45)/90),4)}
+            \else
+                \pgfmathsetmacro{\rot}{0}
+                \pgfmathsetmacro{\quadrant}{0}
+            \fi
+            \def\pgf at circ@strut{\vrule width 0pt height 1em depth 0.4em\relax}
+            \def\mytext{\ctikzvalof{multipoles/font}\space\pgf at circ@strut\the\pgf at circ@count at c\space}
+            \pgfmathloop%
+            \ifnum\pgf at circ@count at a>0
+                \ifcase\quadrant % rotation 0
+                    % left
+                    \pgf at circ@count at c=\pgf at circ@count at a
+                    \pgftext[left,
+                        at=\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step},
+                        rotate=\rot]{\mytext}
+                    % bottom
+                    \pgf at circ@count at c=\numexpr\pgf at circ@count at b+\pgf at circ@count at a\relax
+                    \pgftext[bottom,
+                        at=\pgfpoint{\pgf at circ@res at left-(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}{\pgf at circ@res at down},
+                        rotate=\rot]{\mytext}
+                    % right
+                    \pgf at circ@count at c=\numexpr3*\pgf at circ@count at b-\pgf at circ@count at a+1\relax
+                    \pgftext[right,
+                        at=\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step},
+                        rotate=\rot]{\mytext}
+                    % top
+                    \pgf at circ@count at c=\numexpr3*\pgf at circ@count at b+\pgf at circ@count at a\relax
+                    \pgftext[top,
+                        at=\pgfpoint{\pgf at circ@res at right+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}{\pgf at circ@res at up},
+                        rotate=\rot]{\mytext}
+                \or % rotation -90
+                    % left
+                    \pgf at circ@count at c=\pgf at circ@count at a
+                    \pgftext[top,
+                        at=\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step},
+                        rotate=\rot]{\mytext}
+                    % bottom
+                    \pgf at circ@count at c=\numexpr\pgf at circ@count at b+\pgf at circ@count at a\relax
+                    \pgftext[left,
+                        at=\pgfpoint{\pgf at circ@res at left-(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}{\pgf at circ@res at down},
+                        rotate=\rot]{\mytext}
+                    % right
+                    \pgf at circ@count at c=\numexpr3*\pgf at circ@count at b-\pgf at circ@count at a+1\relax
+                    \pgftext[bottom,
+                        at=\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step},
+                        rotate=\rot]{\mytext}
+                    % top
+                    \pgf at circ@count at c=\numexpr3*\pgf at circ@count at b+\pgf at circ@count at a\relax
+                    \pgftext[right,
+                        at=\pgfpoint{\pgf at circ@res at right+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}{\pgf at circ@res at up},
+                        rotate=\rot]{\mytext}
+                \or %rotation 180
+                    % left
+                    \pgf at circ@count at c=\pgf at circ@count at a
+                    \pgftext[right,
+                        at=\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step},
+                        rotate=\rot]{\mytext}
+                    % bottom
+                    \pgf at circ@count at c=\numexpr\pgf at circ@count at b+\pgf at circ@count at a\relax
+                    \pgftext[top,
+                        at=\pgfpoint{\pgf at circ@res at left-(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}{\pgf at circ@res at down},
+                        rotate=\rot]{\mytext}
+                    % right
+                    \pgf at circ@count at c=\numexpr3*\pgf at circ@count at b-\pgf at circ@count at a+1\relax
+                    \pgftext[left,
+                        at=\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step},
+                        rotate=\rot]{\mytext}
+                    % top
+                    \pgf at circ@count at c=\numexpr3*\pgf at circ@count at b+\pgf at circ@count at a\relax
+                    \pgftext[bottom,
+                        at=\pgfpoint{\pgf at circ@res at right+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}{\pgf at circ@res at up},
+                        rotate=\rot]{\mytext}
+                \or % rotation +90
+                    % left
+                    \pgf at circ@count at c=\pgf at circ@count at a
+                    \pgftext[bottom,
+                        at=\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step},
+                        rotate=\rot]{\mytext}
+                    % bottom
+                    \pgf at circ@count at c=\numexpr\pgf at circ@count at b+\pgf at circ@count at a\relax
+                    \pgftext[right,
+                        at=\pgfpoint{\pgf at circ@res at left-(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}{\pgf at circ@res at down},
+                        rotate=\rot]{\mytext}
+                    % right
+                    \pgf at circ@count at c=\numexpr3*\pgf at circ@count at b-\pgf at circ@count at a+1\relax
+                    \pgftext[top,
+                        at=\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step},
+                        rotate=\rot]{\mytext}
+                    % top
+                    \pgf at circ@count at c=\numexpr3*\pgf at circ@count at b+\pgf at circ@count at a\relax
+                    \pgftext[left,
+                        at=\pgfpoint{\pgf at circ@res at right+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}{\pgf at circ@res at up},
+                        rotate=\rot]{\mytext}
+                \fi
+                \advance\pgf at circ@count at a-1\relax%
+                \repeatpgfmathloop
+            \fi
+            \endpgfscope
+            \ifdim\pgf at circ@res at other>0pt
+            \pgfscope
+                \pgfsetlinewidth{\ctikzvalof{multipoles/external pins thickness}\pgflinewidth}
+                \pgf at circ@count at a=\numpins%
+                \divide\pgf at circ@count at a by 4 \pgf at circ@count at b=\pgf at circ@count at a
+                \pgfmathloop%
+                \ifnum\pgf at circ@count at a>0
+                    \edef\padfrac{\ctikzvalof{multipoles/external pad fraction}}
+                    \ifnum\padfrac>0
+                        \pgf at circ@res at temp=\pgf at circ@res at step\divide\pgf at circ@res at temp by \padfrac
+                        % left side pads
+                        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at temp+\pgf at circ@res at up+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\pgf at circ@res at other}{\pgf at circ@res at temp+\pgf at circ@res at up+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\pgf at circ@res at other}{-\pgf at circ@res at temp+\pgf at circ@res at up+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{-\pgf at circ@res at temp+\pgf at circ@res at up+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        % bottom side pads
+                        \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at temp+\pgf at circ@res at left-(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}{\pgf at circ@res at down}}
+                        \pgfpathlineto{\pgfpoint{-\pgf at circ@res at temp+\pgf at circ@res at left-(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}{\pgf at circ@res at down-\pgf at circ@res at other}}
+                        \pgfpathlineto{\pgfpoint{\pgf at circ@res at temp+\pgf at circ@res at left-(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}{\pgf at circ@res at down-\pgf at circ@res at other}}
+                        \pgfpathlineto{\pgfpoint{\pgf at circ@res at temp+\pgf at circ@res at left-(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}{\pgf at circ@res at down}}
+                        % right side pads
+                        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at temp+\pgf at circ@res at up+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right+\pgf at circ@res at other}{\pgf at circ@res at temp+\pgf at circ@res at up+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right+\pgf at circ@res at other}{-\pgf at circ@res at temp+\pgf at circ@res at up+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{-\pgf at circ@res at temp+\pgf at circ@res at up+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        % top side pads
+                        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at temp+\pgf at circ@res at right+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}{\pgf at circ@res at up}}
+                        \pgfpathlineto{\pgfpoint{\pgf at circ@res at temp+\pgf at circ@res at right+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}{\pgf at circ@res at up+\pgf at circ@res at other}}
+                        \pgfpathlineto{\pgfpoint{-\pgf at circ@res at temp+\pgf at circ@res at right+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}{\pgf at circ@res at up+\pgf at circ@res at other}}
+                        \pgfpathlineto{\pgfpoint{-\pgf at circ@res at temp+\pgf at circ@res at right+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}{\pgf at circ@res at up}}
+                    \else
+                        % left side pins
+                        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\pgf at circ@res at other}{\pgf at circ@res at up+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        % bottom side pins
+                        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left-(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}{\pgf at circ@res at down}}
+                        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}{\pgf at circ@res at down-\pgf at circ@res at other}}
+                        % right side pins
+                        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right+\pgf at circ@res at other}{\pgf at circ@res at up+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        % top side pins
+                        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}{\pgf at circ@res at up}}
+                        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right+(\pgf at circ@qfp at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}{\pgf at circ@res at up+\pgf at circ@res at other}}
+                    \fi
+                    \advance\pgf at circ@count at a-1\relax%
+                \repeatpgfmathloop
+                \pgfusepath{stroke}
+            \endpgfscope
+            \fi
+        }%
+        % \pgf at sh@s@<name of the shape here> contains all the code for the shape
+        % and is executed just before a node is drawn.
+        \pgfutil at g@addto at macro\pgf at sh@s at qfpchip{%
+            % Start with the maximum pin number and go backwards.
+            \pgf at circ@count at a=\numpins%
+            \pgfmathloop%
+            \ifnum\pgf at circ@count at a>0
+                \expandafter\xdef\csname pgf at anchor@qfpchip at pin\space\the\pgf at circ@count at a\endcsname{%
+                    \noexpand\pgf at circ@qfppinanchor{\the\pgf at circ@count at a}{1}%
+                }
+                \expandafter\xdef\csname pgf at anchor@qfpchip at bpin\space\the\pgf at circ@count at a\endcsname{%
+                    \noexpand\pgf at circ@qfppinanchor{\the\pgf at circ@count at a}{0}%
+                }
+                \advance\pgf at circ@count at a-1\relax%
+                \repeatpgfmathloop%
+            }%
+        }
+
+%% anchors for DIP
+\def\pgf at circ@dippinanchor#1#2{% #1: pin number #2: 0 for border pin, 1 for external pin
+    \c at pgf@countc=\numpins\relax
+    \divide\c at pgf@countc by 2
+    \ifnum #1 > \the\c at pgf@countc
+        % right side
+        \pgfpoint{\width/2+#2*\extshift}{-\height/2+(\pgf at circ@dip at pin@shift-\c at pgf@countc+#1-1)*\chipspacing}
+    \else
+        \pgfpoint{-\width/2-#2*\extshift}{\height/2+(\pgf at circ@dip at pin@shift-#1)*\chipspacing}
+\fi
+}
+
+%% anchors for QFP
+\def\pgf at circ@qfppinanchor#1#2{% #1: pin number #2: 0 for border pin, 1 for external pin
+    \c at pgf@countc=\numpins\relax
+    \divide\c at pgf@countc by 4
+    \ifnum #1 > \the\c at pgf@countc
+        \c at pgf@countb=\c at pgf@countc \multiply \c at pgf@countb by 2
+        \ifnum #1 > \the\c at pgf@countb
+            \c at pgf@countb=\c at pgf@countc \multiply \c at pgf@countb by 3
+            \ifnum #1 > \the\c at pgf@countb
+                % 3*npins/4 < pin, top side
+                \pgfpoint{\width/2+(\pgf at circ@qfp at pin@shift+\c at pgf@countb-#1)*\chipspacing}{\height/2+#2*\extshift}%
+            \else
+                % 2*npins/4 < pin <= 3*npins/4, right side
+                \pgfpoint{\width/2+#2*\extshift}{\height/2+(\pgf at circ@qfp at pin@shift-\c at pgf@countb+#1-1)*\chipspacing}%
+            \fi
+        \else
+            %  npins/4 < pin <= 2*npins/4, bottom side
+            \pgfpoint{\width/2+(\pgf at circ@qfp at pin@shift-\c at pgf@countb+#1-1)*\chipspacing}{-\height/2-#2*\extshift}%
+        \fi
+    \else
+        % <= npins/4, left side
+        \pgfpoint{-\width/2-#2*\extshift}{\height/2+(\pgf at circ@qfp at pin@shift-#1)*\chipspacing}%
+    \fi
+}
+
+%%%%%%%%%%%%%%%%%
+%% Rotary Switch
+%%%%%%%%%%%%%%%%%
+
+\pgfdeclareshape{rotaryswitch}
+{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{switches}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \savedanchor\northeast{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        % this strange value makes the 2-pole rotary switch equal to the 2 poles cute spdt
+        % the magic number is 0.25/cos(35)
+        % try to recalculate it for the actual switch
+        \pgf at circ@res at temp=\ctikzvalof{tripoles/spdt/width}\pgf at circ@scaled at Rlen
+        \pgf at circ@res at temp=.3052\pgf at circ@res at temp
+        \edef\a{\ctikzvalof{multipoles/rotary/angle}}
+        \edef\r{\ctikzvalof{nodes width}}
+        \pgfmathsetlength{\pgf at y}{\r*\pgf at circ@scaled at Rlen +(\a>90 ? 2 : 2*sin(\a))*\pgf at circ@res at temp}
+        \pgfmathsetlength{\pgf at x}{\r*\pgf at circ@scaled at Rlen + \pgf at circ@res at temp}
+    }
+    \savedanchor\northwest{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        % this strange value makes the 2-pole rotary switch equal to the 2 poles cute spdt
+        % the magic number is 0.25/cos(35)
+        % try to recalculate it for the actual switch
+        \pgf at circ@res at temp=\ctikzvalof{tripoles/spdt/width}\pgf at circ@scaled at Rlen
+        \pgf at circ@res at temp=.3052\pgf at circ@res at temp
+        \edef\a{\ctikzvalof{multipoles/rotary/angle}}
+        \edef\r{\ctikzvalof{nodes width}}
+        \pgfmathsetlength{\pgf at y}{\r*\pgf at circ@scaled at Rlen +(\a>90 ? 2 : 2*sin(\a))*\pgf at circ@res at temp}
+        \pgfmathsetlength{\pgf at x}{-\r*\pgf at circ@scaled at Rlen - (\a<90 ? 1 : 1-2*cos(\a))*\pgf at circ@res at temp}
+    }
+    \savedanchor\central{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        % this strange value makes the 2-pole rotary switch equal to the 2 poles cute spdt
+        % the magic number is 0.25/cos(35)
+        % try to recalculate it for the actual switch
+        \pgf at circ@res at temp=\ctikzvalof{tripoles/spdt/width}\pgf at circ@scaled at Rlen
+        \pgf at circ@res at temp=.3052\pgf at circ@res at temp
+        \edef\a{\ctikzvalof{multipoles/rotary/angle}}
+        \edef\r{\ctikzvalof{nodes width}}
+        \pgfmathsetlength{\pgf at y}{\r*\pgf at circ@scaled at Rlen +(\a>90 ? 2 : 2*sin(\a))*\pgf at circ@res at temp}
+        \pgfmathsetlength{\pgf at x}{(\a<90 ? 0 : cos(\a))*\pgf at circ@res at temp}
+    }
+    % external square limits
+    \savedanchor\extnorthwest{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at x=-\ctikzvalof{tripoles/spdt/width}\pgf at circ@scaled at Rlen
+        % this strange value makes the 2-pole rotary switch equal to the 2 poles cute spdt
+        \pgf at x=.3052\pgf at x % the magic number is 0.25/cos(35)
+        \pgf at x=2.5\pgf at x % external square size
+        \pgf at y=-\pgf at x %square thing when angle=180?
+    }
+    \saveddimen{\width}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgfmathsetlength\pgf at x{0.3052*\pgf at circ@scaled at Rlen*\ctikzvalof{tripoles/spdt/width}}}
+    % radius of the connector
+    % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+    \saveddimen{\radius}{\pgfmathsetlength\pgf at x{\pgf at circ@Rlen*\ctikzvalof{nodes width}}}
+    % shapename
+    \savedmacro{\thisshape}{\def\thisshape{\tikz at fig@name}}
+    % shape type
+    \savedmacro{\cshape}{\def\cshape{\ctikzvalof{multipoles/rotary/shape}}}
+    \savedmacro{\channels}{\def\channels{\ctikzvalof{multipoles/rotary/channels}}}
+    \savedmacro{\angle}{\def\angle{\ctikzvalof{multipoles/rotary/angle}}}
+    \savedmacro{\wiper}{\def\wiper{\ctikzvalof{multipoles/rotary/wiper}}}
+    \savedmacro{\stepa}{\pgfmathsetmacro{\stepa}{2*\ctikzvalof{multipoles/rotary/angle}/(\ctikzvalof{multipoles/rotary/channels}-1)}}
+    % mid of the lever, to stack switches
+    %\anchor{mid}{\midlever}
+    \anchor{mid}{\northwest
+        \pgf at circ@res at temp=-\pgf at x
+        \pgfmathsetlength{\pgf at x}{\pgf at circ@res at temp*(-1+cos(\wiper))}
+        \pgfmathsetlength{\pgf at y}{\pgf at circ@res at temp*sin(\wiper)}
+    }
+    % center anchors
+    \anchor{cin}{ \northwest \pgf at y=0pt\advance\pgf at x by \radius}
+    % horizontal angles
+    \anchor{in}{ \northwest \pgf at y=0pt}
+    \anchor{ain}{ \northwest \pgf at y=0pt}
+
+    \anchor{center}{ \central \pgf at y=0pt }
+    \anchor{east}{ \northeast \pgf at y=0pt }
+    \anchor{west}{ \northwest \pgf at y=0pt }
+    \anchor{south}{ \central \pgf at y=-\pgf at y }
+    \anchor{north}{ \central }
+    \anchor{south west}{ \northwest \pgf at y=-\pgf at y }
+    \anchor{north east}{ \northeast }
+    \anchor{north west}{ \northwest }
+    \anchor{south east}{ \northeast \pgf at y=-\pgf at y }
+
+    \anchor{ext center}{ \pgf at y=0pt \pgf at x=0pt \advance\pgf at x by -\width}
+    \anchor{ext east}{ \extnorthwest \pgf at y=0pt \pgf at x=-\pgf at x \advance\pgf at x by -\width}
+    \anchor{ext west}{ \extnorthwest \pgf at y=0pt \advance\pgf at x by -\width}
+    \anchor{ext south}{ \extnorthwest \pgf at x=0pt \pgf at y=-\pgf at y \advance\pgf at x by -\width}
+    \anchor{ext north}{ \extnorthwest \pgf at x=0pt \advance\pgf at x by -\width}
+    \anchor{ext south west}{ \extnorthwest \pgf at y=-\pgf at y \advance\pgf at x by -\width}
+    \anchor{ext north east}{ \extnorthwest \pgf at x=-\pgf at x \advance\pgf at x by -\width}
+    \anchor{ext north west}{ \extnorthwest \advance\pgf at x by -\width}
+    \anchor{ext south east}{ \extnorthwest \pgf at x=-\pgf at x \pgf at y=-\pgf at y \advance\pgf at x by -\width}
+
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+        \pgf at circ@res at right = \width
+        \pgf at circ@res at left = -\width
+
+        \pgfscope %wiper
+        % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+        \pgf at circ@res at temp=\radius\relax
+        \pgf at circ@res at temp=\ctikzvalof{multipoles/rotary/thickness}\pgf at circ@res at temp
+        \pgfsetlinewidth{2\pgf at circ@res at temp}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+        \pgfpathlineto{\pgfpointadd{\pgfpoint{\pgf at circ@res at left}{0pt}}{\pgfpointpolar{\wiper}{2\pgf at circ@res at right}}}
+        \pgfsetroundcap\pgfusepath{draw}
+        \endpgfscope
+
+        \ifpgf at circ@rotaryarrow
+            \pgfscope % arrow
+                \ifpgf at circ@rotaryarrow at ccw\pgfsetarrowsstart{latexslim}\fi
+                \pgf at circ@setlinewidth{bipoles}{\pgflinewidth}
+                \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}} % center of cin node
+                \pgftransformrotate{\wiper}
+                \pgfpathmoveto{\pgfpointpolar{50}{1.0\pgf at circ@res at right}}
+                \pgfpatharc{50}{-50}{1.0\pgf at circ@res at right}
+                \ifpgf at circ@rotaryarrow at cw\pgfsetarrowsend{latexslim}\fi
+                \pgfusepath{draw}
+            \endpgfscope
+        \fi
+
+        % \typeout{CHANNELS\space\channels\space ANGLE\space\angle STEPA\space\stepa}
+        \pgf at circ@count at a=\channels\relax
+        \pgfmathsetmacro{\currenta}{-\angle}
+        \pgfmathloop%
+        \ifnum\pgf at circ@count at a>0
+            % \typeout{LOOPIN\space\space\the\pgf at circ@count at a\space CURRENTA\space\currenta\space RIGHT\space\the\pgf at circ@res at right}
+            \pgfscope
+                \pgftransformshift{\pgfpointadd{\pgfpoint{\pgf at circ@res at left}{0pt}}{\pgfpointpolar{\currenta}{2\pgf at circ@res at right}}}
+                \pgfnode{\cshape}{center}{}{\thisshape-out \the\pgf at circ@count at a}{\pgfusepath{stroke}}
+            \endpgfscope
+            \pgfmathsetmacro{\currenta}{\currenta+\stepa}
+            % \typeout{LOOPOUT\space\the\pgf at circ@count at a\space CURRENTA\space\currenta\space RIGHT\space\the\pgf at circ@res at right}
+            \advance\pgf at circ@count at a by -1\relax%
+        \repeatpgfmathloop
+
+        \pgfscope % input
+        \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+        \pgfnode{\cshape}{center}{}{\thisshape-in}{\pgfusepath{stroke}}
+        \endpgfscope
+    }
+    % \pgf at sh@s@<name of the shape here> contains all the code for the shape
+    % and is executed just before a node is drawn.
+    \pgfutil at g@addto at macro\pgf at sh@s at rotaryswitch{%
+        % Start with the maximum pin number and go backwards.
+        \pgf at circ@count at a=\channels\relax
+        \pgfmathloop%
+        \ifnum\pgf at circ@count at a>0
+        % we will create two anchors per pin: the "normal one" like `pin 1` for the
+        % electrical contact, and the "border one" like `bpin 1` for labels.
+        % they will coincide if `external pins width` is set to 0.
+        \expandafter\xdef\csname pgf at anchor@rotaryswitch at out\space\the\pgf at circ@count at a\endcsname{%
+            \noexpand\pgf at circ@rotaryanchor{\the\pgf at circ@count at a}{1}{0}%
+        }
+        \expandafter\xdef\csname pgf at anchor@rotaryswitch at cout\space\the\pgf at circ@count at a\endcsname{%
+            \noexpand\pgf at circ@rotaryanchor{\the\pgf at circ@count at a}{0}{0}%
+        }
+        \expandafter\xdef\csname pgf at anchor@rotaryswitch at aout\space\the\pgf at circ@count at a\endcsname{%
+            \noexpand\pgf at circ@rotaryanchor{\the\pgf at circ@count at a}{0}{1}%
+        }
+        \expandafter\xdef\csname pgf at anchor@rotaryswitch at sqout\space\the\pgf at circ@count at a\endcsname{%
+            \noexpand\pgf at circ@rotarysqanchor{\the\pgf at circ@count at a}{0}%
+        }
+        \advance\pgf at circ@count at a by -1\relax%
+        \repeatpgfmathloop%
+    }%
+}
+
+\def\pgf at circ@rotaryanchor#1#2#3{% #1: numero del pin; #2: 1 - x pos, 0 - center; #3 0: inner, 1 outer
+    \pgf at circ@res at temp=\width
+    \pgfmathsetmacro{\myangle}{\angle-(#1-1)*\stepa}
+    \pgfmathsetlength{\pgf at x}{2*(\pgf at circ@res at temp+#3*\radius/2)*cos(\myangle))+#2*\radius}
+    \pgfmathsetlength{\pgf at y}{2*(\pgf at circ@res at temp+#3*\radius/2)*sin(\myangle)}
+    \advance\pgf at x by -\pgf at circ@res at temp
+}
+
+\def\pgf at circ@rotarysqanchor#1{% external square anchors
+    \pgf at circ@res at temp=\width
+    \pgfmathsetmacro{\myangle}{\angle-(#1-1)*\stepa}
+    \pgfpointborderrectangle{\pgfpointpolar{\myangle}{1pt}}{\pgfpoint{2.5\pgf at circ@res at temp}{2.5\pgf at circ@res at temp}}
+    \advance\pgf at x by -\pgf at circ@res at temp
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Seven segments displays
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\pgfdeclareshape{bare7seg}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{displays}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \savedmacro{\dotstatus}{\edef\dotstatus{\pgf at circ@sevenseg at dotstate}}
+    \saveddimen{\dotspace}{% the dot is on the right, and occupy the same as the thickness
+        \ifpgf at circ@sevenseg at dot
+            \pgfmathsetlength{\pgf at x}{\ctikzvalof{seven seg/thickness}}
+        \else
+            \pgf at x=0pt
+        \fi
+    }
+    % The object extension is more or less (-width/2,-width) to (width/2,width)
+    % and adjusted for line thickness (both sides) and eventually the dot
+    \saveddimen{\width}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgfmathsetlength{\pgf at x}{\ctikzvalof{seven seg/width}*\pgf at circ@scaled at Rlen}}
+    \saveddimen{\gap}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{seven seg/segment sep}}}
+    \saveddimen{\boxgap}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{seven seg/box sep}}}
+    \savedanchor{\southwest}{% both negative
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgfmathsetlength{\pgf at x}{-0.5*\ctikzvalof{seven seg/width}*\pgf at circ@scaled at Rlen
+        -0.5*\ctikzvalof{seven seg/thickness}-\ctikzvalof{seven seg/box sep}}
+        \pgfmathsetlength{\pgf at y}{-\ctikzvalof{seven seg/width}*\pgf at circ@scaled at Rlen
+        -0.5*\ctikzvalof{seven seg/thickness}-\ctikzvalof{seven seg/box sep}}
+    }
+    \savedanchor{\northeast}{% both positive
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \ifpgf at circ@sevenseg at dot
+            \pgfmathsetlength{\pgf at circ@res at other}{\ctikzvalof{seven seg/thickness}}
+        \else
+            \pgf at circ@res at other=0pt
+        \fi
+        \pgfmathsetlength{\pgf at x}{0.5*\ctikzvalof{seven seg/width}*\pgf at circ@scaled at Rlen
+        +0.5*\ctikzvalof{seven seg/thickness}+\pgf at circ@res at other+\ctikzvalof{seven seg/box sep}}
+        \pgfmathsetlength{\pgf at y}{\ctikzvalof{seven seg/width}*\pgf at circ@scaled at Rlen
+        +0.5*\ctikzvalof{seven seg/thickness}+\ctikzvalof{seven seg/box sep}}
+    }
+    \savedanchor{\topright}{% anchor without the box sep and the thickness
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgfmathsetlength{\pgf at x}{0.5*\ctikzvalof{seven seg/width}*\pgf at circ@scaled at Rlen}
+        \pgfmathsetlength{\pgf at y}{\ctikzvalof{seven seg/width}*\pgf at circ@scaled at Rlen}
+    }
+    \anchor{center}{\pgfpointorigin}
+    \anchor{north west}{\southwest\pgf at y=-\pgf at y}
+    \anchor{north east}{\northeast}
+    \anchor{south east}{\northeast\pgf at y=-\pgf at y}
+    \anchor{south west}{\southwest}
+    \anchor{north}{\northeast\pgf at x=0pt}
+    \anchor{east}{\northeast\pgf at y=0pt}
+    \anchor{south}{\southwest\pgf at x=0pt}
+    \anchor{west}{\southwest\pgf at y=0pt}
+    \anchor{a}{\topright\pgf at x=0pt}
+    \anchor{b}{\topright\pgf at y=0.5\pgf at y}
+    \anchor{c}{\topright\pgf at y=-0.5\pgf at y}
+    \anchor{d}{\topright\pgf at y=-\pgf at y\pgf at x=0pt}
+    \anchor{e}{\topright\pgf at x=-\pgf at x\pgf at y=-0.5\pgf at y}
+    \anchor{f}{\topright\pgf at x=-\pgf at x\pgf at y=0.5\pgf at y}
+    \anchor{g}{\pgfpointorigin}
+    \anchor{dot}{\topright\pgf at y=-\pgf at y\advance\pgf at x by \dotspace}
+    \behindbackgroundpath{%
+        \southwest % I do not want the dot here, it will stick out
+        \pgf at circ@res at up = -\pgf at y
+        \pgf at circ@res at down = \pgf at y
+        \pgf at circ@res at right = \pgf at x
+        \pgf at circ@res at left = -\pgf at x
+        \pgfscope
+        \pgf at circ@setlinewidth{multipoles}{\pgflinewidth}
+        \pgfsetcolor{\ctikzvalof{color}}
+        \pgfpathrectanglecorners%
+        {\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+        {\pgfpoint{\pgf at circ@res at left+\dotspace}{\pgf at circ@res at up}}
+        \ifpgf at circ@sevenseg at box
+            \pgf at circ@draworfill
+        \else
+            \pgf at circ@maybefill
+        \fi
+        \endpgfscope
+        \edef\bits{\ctikzvalof{seven seg/bits}}
+        \pgfscope
+            \pfg at circ@sseg at drawbits{\bits}
+        \endpgfscope
+        \pgfscope
+            \ifpgf at circ@sevenseg at dot
+                \pgf at circ@sseg at drawdots
+            \fi
+        \endpgfscope
+    }
+}
+
+\def\pgf at circ@sseg at splitbits#1#2#3#4#5#6#7\relax{%split the seven bits
+    \edef\@@a{#1}\edef\@@b{#2}\edef\@@c{#3}\edef\@@d{#4}\edef\@@e{#5}\edef\@@f{#6}\edef\@@g{#7}%
+}
+\def\pgf at circ@sseg at drawone#1#2#3#4#5{% #1 on off the x1, y1, x2 , y2
+    \ifnum #1 > 0\relax
+        \pgfsetcolor{\ctikzvalof{seven seg/color on}}
+    \else
+        \pgfsetcolor{\ctikzvalof{seven seg/color off}}
+    \fi
+    \pgfpathmoveto{\pgfpoint{#2}{#3}}
+    \pgfpathlineto{\pgfpoint{#4}{#5}}
+    \pgfusepath{draw}
+}
+\def\pfg at circ@sseg at drawbits#1{% #1 must be 7 bits
+    \expandafter\pgf at circ@sseg at splitbits#1\relax% a bit of magic...
+    \pgfmathsetlength{\pgf at circ@res at other}{0.5*\ctikzvalof{seven seg/thickness}}
+    \pgfsetlinewidth{\ctikzvalof{seven seg/thickness}}
+    % \pgfsetroundcap
+    \pgfsetarrowsstart{Triangle Cap[]}
+    \pgfsetarrowsend{Triangle Cap[]}
+    % segments
+    \pgf at circ@sseg at drawone{\@@a}{-\width/2+\gap}{\width}{\width/2-\gap}{\width}
+    \pgf at circ@sseg at drawone{\@@b}{\width/2}{\width-\gap}{\width/2}{0pt+\gap}
+    \pgf at circ@sseg at drawone{\@@c}{\width/2}{0pt-\gap}{\width/2}{-\width+\gap}
+    \pgf at circ@sseg at drawone{\@@d}{\width/2-\gap}{-\width}{-\width/2+\gap}{-\width}
+    \pgf at circ@sseg at drawone{\@@e}{-\width/2}{-\width+\gap}{-\width/2}{0pt-\gap}
+    \pgf at circ@sseg at drawone{\@@f}{-\width/2}{0pt+\gap}{-\width/2}{\width-\gap}
+    \pgf at circ@sseg at drawone{\@@g}{-\width/2+\gap}{0pt}{\width/2-\gap}{0pt}
+}
+\def\pgf at circ@sseg at drawdots{% dots
+    \edef\what{empty}
+    \ifx\what\pgf at circ@sevenseg at dotstate
+        % do nothing
+    \else
+        \pgfmathsetlength{\pgf at circ@res at other}{0.5*\ctikzvalof{seven seg/thickness}}
+        \edef\what{off}
+        \ifx\what\pgf at circ@sevenseg at dotstate
+            % dot off
+            \pgfsetfillcolor{\ctikzvalof{seven seg/color off}}
+            \pgfsetcolor{\ctikzvalof{seven seg/color off}}
+        \else
+            % dot on
+            \pgfsetfillcolor{\ctikzvalof{seven seg/color on}}
+            \pgfsetcolor{\ctikzvalof{seven seg/color on}}
+        \fi
+        \pgfpathcircle{\pgfpoint{\width/2+2*\pgf at circ@res at other}{-\width}}{\pgf at circ@res at other}
+        \pgfusepath{draw,fill}
+    \fi
+}
+
+
+%%%%%%
+%%%%%% Flip-flops
+%%%%%%
+
+% Flip flops are a specialized kind of dipchip.
+% they have a class by themselves
+
+%% flip flop definitions --- by default empty
+%% pin texts
+\ctikzset{multipoles/flipflop/t1/.initial={}}
+\ctikzset{multipoles/flipflop/t2/.initial={}}
+\ctikzset{multipoles/flipflop/t3/.initial={}}
+\ctikzset{multipoles/flipflop/t4/.initial={}}
+\ctikzset{multipoles/flipflop/t5/.initial={}}
+\ctikzset{multipoles/flipflop/t6/.initial={}}
+\ctikzset{multipoles/flipflop/tu/.initial={}}
+\ctikzset{multipoles/flipflop/td/.initial={}}
+% pin clock wedge flags
+\ctikzset{multipoles/flipflop/c1/.initial={0}}
+\ctikzset{multipoles/flipflop/c2/.initial={0}}
+\ctikzset{multipoles/flipflop/c3/.initial={0}}
+\ctikzset{multipoles/flipflop/c4/.initial={0}}
+\ctikzset{multipoles/flipflop/c5/.initial={0}}
+\ctikzset{multipoles/flipflop/c6/.initial={0}}
+\ctikzset{multipoles/flipflop/cu/.initial={0}}
+\ctikzset{multipoles/flipflop/cd/.initial={0}}
+% pin negation circle flags
+\ctikzset{multipoles/flipflop/n1/.initial={0}}
+\ctikzset{multipoles/flipflop/n2/.initial={0}}
+\ctikzset{multipoles/flipflop/n3/.initial={0}}
+\ctikzset{multipoles/flipflop/n4/.initial={0}}
+\ctikzset{multipoles/flipflop/n5/.initial={0}}
+\ctikzset{multipoles/flipflop/n6/.initial={0}}
+\ctikzset{multipoles/flipflop/nu/.initial={0}}
+\ctikzset{multipoles/flipflop/nd/.initial={0}}
+
+
+% Thanks to @marmot
+\tikzset{flipflop def/.code=\pgfqkeys{\circuitikzbasekey/multipoles/flipflop}{#1}}
+
+% default set of flip flops
+\tikzset{
+    % async
+    latch/.style={flipflop, flipflop def={t1=D, t6=Q, t3=CLK, t4=\ctikztextnot{Q}}},
+    flipflop SR/.style={flipflop, flipflop def={t1=S, t3=R, t6=Q, t4=\ctikztextnot{Q}}},
+    % sync
+    flipflop D/.style={flipflop, flipflop def={t1=D, t6=Q, c3=1, t4=\ctikztextnot{Q}}},
+    flipflop T/.style={flipflop, flipflop def={t1=T, t6=Q, c3=1, t4=\ctikztextnot{Q}}},
+    flipflop JK/.style={flipflop, flipflop def={t1=J, t3=K, c2=1, t6=Q, t4=\ctikztextnot{Q}}},
+    % additional features
+    add async SR/.style={flipflop def={tu={\ctikztextnot{SET}}, td={\ctikztextnot{RST}}}},
+    dot on notQ/.style={flipflop def={t4={Q}, n4=1}},
+}
+
+%
+% commodity macro to draw the clock wedges. They leave the size of the
+% wedge in \pgf at circ@res at temp so that a possible label can be displaced.
+%
+\def\pgf at circ@do at wedge@left{
+    \pgf at circ@res at temp=0pt\relax
+    \ifnum\ctikzvalof{multipoles/flipflop/c\the\pgf at circ@count at c}>0
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step+\wedge}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left+\wedge}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step-\wedge}}
+        \pgfusepath{stroke}
+        \pgf at circ@res at temp=\wedge
+    \fi
+}
+\def\pgf at circ@do at wedge@right{
+    \pgf at circ@res at temp=0pt\relax
+    \ifnum\ctikzvalof{multipoles/flipflop/c\the\pgf at circ@count at c}>0
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step+\wedge}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-\wedge}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step-\wedge}}
+        \pgfusepath{stroke}
+        \pgf at circ@res at temp=-\wedge
+    \fi
+}
+\def\pgf at circ@do at wedge@up{
+    \pgf at circ@res at temp=0pt\relax
+    \ifnum\ctikzvalof{multipoles/flipflop/cu}>0
+        \pgfpathmoveto{\pgfpoint{-\wedge}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up-\wedge}}
+        \pgfpathlineto{\pgfpoint{\wedge}{\pgf at circ@res at up}}
+        \pgfusepath{stroke}
+        \pgf at circ@res at temp=-\wedge
+    \fi
+}
+\def\pgf at circ@do at wedge@down{
+    \pgf at circ@res at temp=0pt\relax
+    \ifnum\ctikzvalof{multipoles/flipflop/cd}>0
+        \pgfpathmoveto{\pgfpoint{-\wedge}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down+\wedge}}
+        \pgfpathlineto{\pgfpoint{\wedge}{\pgf at circ@res at down}}
+        \pgfusepath{stroke}
+        \pgf at circ@res at temp=\wedge
+    \fi
+}
+% generic flip-flop shape
+\pgfdeclareshape{flipflop}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{flipflops}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \savedmacro{\thisshape}{\def\thisshape{\tikz at fig@name}}
+    \savedmacro\numpins{\def\numpins{6}}
+    \savedanchor\centerpoint{%
+        \pgf at x=-.5\wd\pgfnodeparttextbox%
+        \pgf at y=-.5\ht\pgfnodeparttextbox%
+        \advance\pgf at y by+.5\dp\pgfnodeparttextbox%
+    }%
+    \savedanchor\origin{\pgfpoint{0pt}{0pt}}
+    \anchor{center}{\origin}
+    \anchor{text}{\centerpoint}% to adjust text
+    \saveddimen\height{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgfmathsetlength\pgf at x{((\numpins)
+        *\ctikzvalof{multipoles/flipflop/pin spacing})*\pgf at circ@scaled at Rlen/2}%
+    }%
+    \saveddimen{\chipspacing}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgfmathsetlength\pgf at x{\pgf at circ@scaled at Rlen*\ctikzvalof{multipoles/flipflop/pin spacing}}}
+    \saveddimen{\width}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgfmathsetlength\pgf at x{\pgf at circ@scaled at Rlen*\ctikzvalof{multipoles/flipflop/width}}}
+    \saveddimen{\extshift}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgfmathsetlength\pgf at x{\pgf at circ@scaled at Rlen*\ctikzvalof{multipoles/external pins width}}}
+    % standard anchors
+    \savedanchor\northwest{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgfmathsetlength\pgf at y{0.5*((\numpins)
+        *\ctikzvalof{multipoles/flipflop/pin spacing})*\pgf at circ@scaled at Rlen/2}%
+        \pgfmathsetlength\pgf at x{-0.5*\pgf at circ@scaled at Rlen*\ctikzvalof{multipoles/flipflop/width}}
+    }
+    \anchor{dot}{\northwest
+        \pgfmathsetlength\pgf at x{\pgf at x + 0.3*\chipspacing}
+        \pgfmathsetlength\pgf at y{\pgf at y - 0.3*\chipspacing}
+    }
+    \anchor{nw}{\northwest}
+    \anchor{ne}{\northwest\pgf at x=-\pgf at x}
+    \anchor{se}{\northwest\pgf at x=-\pgf at x\pgf at y=-\pgf at y}
+    \anchor{sw}{\northwest\pgf at y=-\pgf at y}
+    \anchor{north west}{\northwest}
+    \anchor{north east}{\northwest\pgf at x=-\pgf at x}
+    \anchor{south east}{\northwest\pgf at x=-\pgf at x \pgf at y=-\pgf at y}
+    \anchor{south west}{\northwest\pgf at y=-\pgf at y}
+    \anchor{n}{\northwest\pgf at x=0pt }
+    \anchor{e}{\northwest\pgf at x=-\pgf at x\pgf at y=0pt }
+    \anchor{s}{\northwest\pgf at x=0pt\pgf at y=-\pgf at y}
+    \anchor{w}{\northwest\pgf at y=0pt }
+    \anchor{north}{\northwest\pgf at x=0pt }
+    \anchor{east}{\northwest\pgf at x=-\pgf at x\pgf at y=0pt }
+    \anchor{south}{\northwest\pgf at x=0pt\pgf at y=-\pgf at y}
+    \anchor{west}{\northwest\pgf at y=0pt }
+    % upper and lower pin
+    \anchor{up}{\northwest\pgf at x=0pt\advance\pgf at y by\extshift }
+    \anchor{down}{\northwest\pgf at x=0pt\pgf at y=-\pgf at y\advance\pgf at y by-\extshift}
+    \anchor{bup}{\northwest\pgf at x=0pt }
+    \anchor{bdown}{\northwest\pgf at x=0pt\pgf at y=-\pgf at y}
+    % start drawing
+    \backgroundpath{%
+        \northwest
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        \pgf at circ@scaled at Rlen=\scaledRlen
+        \pgf at circ@res at step = \ctikzvalof{multipoles/flipflop/pin spacing}\pgf at circ@scaled at Rlen
+        \pgf at circ@res at other = \ctikzvalof{multipoles/external pins width}\pgf at circ@scaled at Rlen
+        \pgfsetcolor{\ctikzvalof{color}}
+        \pgfscope% (for the line width)
+            \pgf at circ@setlinewidth{multipoles}{\pgflinewidth}
+            \pgfpathrectanglecorners{\pgfpoint{-\width/2}{-\height/2}}{\pgfpoint{\width/2}{\height/2}}%
+            \pgf at circ@draworfill
+            \pgfusepath{stroke}%
+        \endpgfscope
+        % Adding the pin number
+        \pgf at circ@count at a=\numpins\relax
+        \divide\pgf at circ@count at a by 2 \pgf at circ@count at b=\pgf at circ@count at a
+        % thanks to @marmot: https://tex.stackexchange.com/a/473571/38080
+        \ifpgf at circuit@chip at straightnumbers
+            \pgfgettransformentries\a\b\temp\temp\temp\temp
+            \pgfmathsetmacro{\rot}{-atan2(\b,\a)}
+            \pgfmathtruncatemacro{\quadrant}{mod(4+int(360+(\rot+45)/90),4)}
+        \else
+            \pgfmathsetmacro{\rot}{0}
+            \pgfmathsetmacro{\quadrant}{0}
+        \fi
+        \def\pgf at circ@strut{\vrule width 0pt height 1em depth 0.4em\relax}
+        % text
+        \def\mytext{\ctikzvalof{multipoles/flipflop/font}\space
+                \ctikzvalof{multipoles/flipflop/t\the\pgf at circ@count at c}%
+                \pgf at circ@strut\space}
+        % \typeout{TEXT\space\mytext}
+        \pgfmathloop%
+        \def\wedge{\ctikzvalof{multipoles/flipflop/clock wedge size}\pgf at circ@res at step}
+        \pgf at circ@res at temp=0pt\relax
+        \ifnum\pgf at circ@count at a>0
+            \ifcase\quadrant % rotation 0
+                % left
+                \pgf at circ@count at c=\pgf at circ@count at a
+                \pgf at circ@do at wedge@left
+                % \typeout{TEXT Left Q1\space\mytext}
+                \pgftext[left,
+                    at=\pgfpoint{\pgf at circ@res at left+\pgf at circ@res at temp}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step},
+                    rotate=\rot]{\mytext}
+                % right
+                \pgf at circ@count at c=\numexpr2*\pgf at circ@count at b-\pgf at circ@count at a+1\relax
+                \pgf at circ@do at wedge@right
+                \pgftext[right,
+                    at=\pgfpoint{\pgf at circ@res at right+\pgf at circ@res at temp}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step},
+                    rotate=\rot]{\mytext}
+            \or % rotation -90
+                % left
+                \pgf at circ@count at c=\pgf at circ@count at a
+                \pgf at circ@do at wedge@left
+                \pgftext[top,
+                    at=\pgfpoint{\pgf at circ@res at left+\pgf at circ@res at temp}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step},
+                    rotate=\rot]{\mytext}
+                % right
+                \pgf at circ@count at c=\numexpr2*\pgf at circ@count at b-\pgf at circ@count at a+1\relax
+                \pgf at circ@do at wedge@right
+                \pgftext[bottom,
+                    at=\pgfpoint{\pgf at circ@res at right+\pgf at circ@res at temp}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step},
+                    rotate=\rot]{\mytext}
+            \or %rotation 180
+                % left
+                \pgf at circ@count at c=\pgf at circ@count at a
+                \pgf at circ@do at wedge@left
+                \pgftext[right,
+                    at=\pgfpoint{\pgf at circ@res at left+\pgf at circ@res at temp}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step},
+                    rotate=\rot]{\mytext}
+                % right
+                \pgf at circ@count at c=\numexpr2*\pgf at circ@count at b-\pgf at circ@count at a+1\relax
+                \pgf at circ@do at wedge@right
+                \pgftext[left,
+                    at=\pgfpoint{\pgf at circ@res at right+\pgf at circ@res at temp}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step},
+                    rotate=\rot]{\mytext}
+            \or % rotation +90
+                % left
+                \pgf at circ@count at c=\pgf at circ@count at a
+                \pgf at circ@do at wedge@left
+                \pgftext[bottom,
+                    at=\pgfpoint{\pgf at circ@res at left+\pgf at circ@res at temp}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step},
+                    rotate=\rot]{\mytext}
+                % right
+                \pgf at circ@count at c=\numexpr2*\pgf at circ@count at b-\pgf at circ@count at a+1\relax
+                \pgf at circ@do at wedge@right
+                \pgftext[top,
+                    at=\pgfpoint{\pgf at circ@res at right+\pgf at circ@res at temp}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step},
+                    rotate=\rot]{\mytext}
+            \fi
+            \advance\pgf at circ@count at a-1\relax%
+            \repeatpgfmathloop
+            % Now the up and down text
+            % up
+            \def\mytext{\ctikzvalof{multipoles/flipflop/fontud}\space\pgf at circ@strut\ctikzvalof{multipoles/flipflop/tu}\space}
+            \pgf at circ@do at wedge@up
+            \ifcase\quadrant % rotation 0
+                \pgftext[top,
+                    at=\pgfpoint{0pt}{\pgf at circ@res at up+\pgf at circ@res at temp},
+                    rotate=\rot]{\mytext}
+            \or % rotation -90
+                \pgftext[right,
+                    at=\pgfpoint{0pt}{\pgf at circ@res at up+\pgf at circ@res at temp},
+                    rotate=\rot]{\mytext}
+            \or %rotation 180
+                \pgftext[bottom,
+                    at=\pgfpoint{0pt}{\pgf at circ@res at up+\pgf at circ@res at temp},
+                    rotate=\rot]{\mytext}
+            \or % rotation +90
+                \pgftext[left,
+                    at=\pgfpoint{0pt}{\pgf at circ@res at up+\pgf at circ@res at temp},
+                    rotate=\rot]{\mytext}
+            \fi
+            % down
+            \def\mytext{\ctikzvalof{multipoles/flipflop/fontud}\space\pgf at circ@strut\ctikzvalof{multipoles/flipflop/td}\space}
+            \pgf at circ@do at wedge@down
+            \ifcase\quadrant % rotation 0
+                \pgftext[bottom,
+                    at=\pgfpoint{0pt}{\pgf at circ@res at down+\pgf at circ@res at temp},
+                    rotate=\rot]{\mytext}
+            \or % rotation -90
+                \pgftext[left,
+                    at=\pgfpoint{0pt}{\pgf at circ@res at down+\pgf at circ@res at temp},
+                    rotate=\rot]{\mytext}
+            \or %rotation 180
+                \pgftext[top,
+                    at=\pgfpoint{0pt}{\pgf at circ@res at down+\pgf at circ@res at temp},
+                    rotate=\rot]{\mytext}
+            \or % rotation +90
+                \pgftext[right,
+                    at=\pgfpoint{0pt}{\pgf at circ@res at down+\pgf at circ@res at temp},
+                    rotate=\rot]{\mytext}
+            \fi
+            % external pins
+            \ifdim\pgf at circ@res at other>0pt
+            \pgfscope
+                \pgfsetlinewidth{\ctikzvalof{multipoles/external pins thickness}\pgflinewidth}
+                \pgf at circ@count at a=\numpins\relax
+                \divide\pgf at circ@count at a by 2 \pgf at circ@count at b=\pgf at circ@count at a
+                \pgfmathloop%
+                \ifnum\pgf at circ@count at a>0
+                    % left side pins
+                    \pgf at circ@count at c=\pgf at circ@count at a
+                    %% we draw the pin only if it's defined either a text, a clock wedge or a not pin
+                    %% Or'ing tests in core TeX is tough
+                    \edef\@@or{0}
+                    % Just expand the key the minimum needed
+                    \edef\@@tmp{x\unexpandedvalueof{/tikz/circuitikz/multipoles/flipflop/t\the\pgf at circ@count at c}}\edef\@@x{x}
+                    \ifx\@@tmp\@@x\else\edef\@@or{1}\fi
+                    \edef\@@tmp{\ctikzvalof{multipoles/flipflop/c\the\pgf at circ@count at c}}
+                    \ifnum\@@tmp>0\edef\@@or{1}\fi
+                    \edef\@@tmp{\ctikzvalof{multipoles/flipflop/n\the\pgf at circ@count at c}}
+                    \ifnum\@@tmp>0\edef\@@or{1}\fi
+                    \ifnum\@@or>0
+                        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\pgf at circ@res at other}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        \pgfusepath{stroke}
+                    \fi
+                    % right side pins
+                    \pgf at circ@count at c=\numexpr2*\pgf at circ@count at b-\pgf at circ@count at a+1\relax
+                    \edef\@@or{0}
+                    \edef\@@tmp{x\unexpandedvalueof{/tikz/circuitikz/multipoles/flipflop/t\the\pgf at circ@count at c}}\edef\@@x{x}
+                    \ifx\@@tmp\@@x\else\edef\@@or{1}\fi
+                    \edef\@@tmp{\ctikzvalof{multipoles/flipflop/c\the\pgf at circ@count at c}}
+                    \ifnum\@@tmp>0\edef\@@or{1}\fi
+                    \edef\@@tmp{\ctikzvalof{multipoles/flipflop/n\the\pgf at circ@count at c}}
+                    \ifnum\@@tmp>0\edef\@@or{1}\fi
+                    % \typeout{TEST\space\@@tmp\space\@@x}
+                    \ifnum\@@or>0
+                        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right+\pgf at circ@res at other}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        \pgfusepath{stroke}
+                    \fi
+                    \advance\pgf at circ@count at a by -1\relax%
+                \repeatpgfmathloop
+                % up side
+                \edef\@@or{0}
+                \edef\@@tmp{x\unexpandedvalueof{/tikz/circuitikz/multipoles/flipflop/tu}}\edef\@@x{x}
+                \ifx\@@tmp\@@x\else\edef\@@or{1}\fi
+                \edef\@@tmp{\ctikzvalof{multipoles/flipflop/cu}}
+                \ifnum\@@tmp>0\edef\@@or{1}\fi
+                \edef\@@tmp{\ctikzvalof{multipoles/flipflop/nu}}
+                \ifnum\@@tmp>0\edef\@@or{1}\fi
+                % \typeout{TEST\space\@@tmp\space\@@x}
+                \ifnum\@@or>0
+                    \pgfpathmoveto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+                    \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at up+\pgf at circ@res at other}}
+                    \pgfusepath{stroke}
+                \fi
+                % down side
+                \edef\@@or{0}
+                \edef\@@tmp{x\unexpandedvalueof{/tikz/circuitikz/multipoles/flipflop/td}}\edef\@@x{x}
+                \ifx\@@tmp\@@x\else\edef\@@or{1}\fi
+                \edef\@@tmp{\ctikzvalof{multipoles/flipflop/cd}}
+                \ifnum\@@tmp>0\edef\@@or{1}\fi
+                \edef\@@tmp{\ctikzvalof{multipoles/flipflop/nu}}
+                \ifnum\@@tmp>0\edef\@@or{1}\fi
+                % \typeout{TEST\space\@@tmp\space\@@x}
+                \ifnum\@@or>0
+                    \pgfpathmoveto{\pgfpoint{0pt}{\pgf at circ@res at down}}
+                    \pgfpathlineto{\pgfpoint{0pt}{\pgf at circ@res at down-\pgf at circ@res at other}}
+                    \pgfusepath{stroke}
+                \fi
+            \endpgfscope
+            \fi % external pin width >0
+            %
+            % draw "inverting" circles on outputs, they must be last
+            %
+            \pgfscope
+                \ifpgf at circuit@ieeelogicport
+                    \def\@@notcirc{notcirc}
+                \else
+                    \ifpgf at circ@european at port@circle at ieee
+                        \def\@@notcirc{notcirc}
+                    \else
+                        \def\@@notcirc{ocirc}
+                    \fi
+                \fi
+                \pgfsetlinewidth{\ctikzvalof{multipoles/external pins thickness}\pgflinewidth}
+                \pgf at circ@count at a=\numpins\relax
+                \divide\pgf at circ@count at a by 2 \pgf at circ@count at b=\pgf at circ@count at a
+                \pgfmathloop%
+                \ifnum\pgf at circ@count at a>0
+                    % left side pins
+                    \pgf at circ@count at c=\pgf at circ@count at a
+                    \edef\@@tmp{\ctikzvalof{multipoles/flipflop/n\the\pgf at circ@count at c}}
+                    \ifnum\@@tmp>0\pgfscope
+                        \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        \pgfnode{\@@notcirc}{east}{}{\thisshape-N\the\pgf at circ@count at c}{\pgfusepath{stroke}}
+                    \endpgfscope\fi
+                    % right side pins
+                    \pgf at circ@count at c=\numexpr2*\pgf at circ@count at b-\pgf at circ@count at a+1\relax
+                    \edef\@@tmp{\ctikzvalof{multipoles/flipflop/n\the\pgf at circ@count at c}}
+                    \ifnum\@@tmp>0\pgfscope
+                        \pgftransformshift{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up+(\pgf at circ@dip at pin@shift-\the\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        \pgfnode{\@@notcirc}{west}{}{\thisshape-N\the\pgf at circ@count at c}{\pgfusepath{stroke}}
+                    \endpgfscope\fi
+                    \advance\pgf at circ@count at a by -1\relax%
+                \repeatpgfmathloop
+                % up side
+                \edef\@@tmp{\ctikzvalof{multipoles/flipflop/nu}}
+                \ifnum\@@tmp>0\pgfscope
+                    \pgftransformshift{\pgfpoint{0pt}{\pgf at circ@res at up}}
+                    \pgfnode{\@@notcirc}{south}{}{\thisshape-Nu}{\pgfusepath{stroke}}
+                \endpgfscope\fi
+                % down side
+                \edef\@@tmp{\ctikzvalof{multipoles/flipflop/nd}}
+                \ifnum\@@tmp>0\pgfscope
+                    \pgftransformshift{\pgfpoint{0pt}{\pgf at circ@res at down}}
+                    \pgfnode{\@@notcirc}{north}{}{\thisshape-Nd}{\pgfusepath{stroke}}
+                \endpgfscope\fi
+            \endpgfscope
+        }%
+        % \pgf at sh@s@<name of the shape here> contains all the code for the shape
+        % and is executed just before a node is drawn.
+        \pgfutil at g@addto at macro\pgf at sh@s at flipflop{%
+            % Start with the maximum pin number and go backwards.
+            \pgf at circ@count at a=\numpins\relax
+            \pgfmathloop%
+            \ifnum\pgf at circ@count at a>0
+                % we will create two anchors per pin: the "normal one" like `pin 1` for the
+                % electrical contact, and the "border one" like `bpin 1` for labels.
+                % they will coincide if `external pins width` is set to 0.
+                \expandafter\xdef\csname pgf at anchor@flipflop at pin\space\the\pgf at circ@count at a\endcsname{%
+                    \noexpand\pgf at circ@dippinanchor{\the\pgf at circ@count at a}{1}%
+                }
+                \expandafter\xdef\csname pgf at anchor@flipflop at bpin\space\the\pgf at circ@count at a\endcsname{%
+                    \noexpand\pgf at circ@dippinanchor{\the\pgf at circ@count at a}{0}%
+                }
+                \advance\pgf at circ@count at a by -1\relax%
+                \repeatpgfmathloop%
+            }%
+}
+
+%
+% MUX-DEMUXES
+%
+% Thanks to @marmot
+\tikzset{muxdemux def/.code=\pgfqkeys{\circuitikzbasekey/multipoles/muxdemux}{#1}}
+\tikzset{demux/.style={muxdemux, muxdemux def={Lh=4, Rh=8, NL=1, NB=3, NR=8}}}
+\tikzset{one bit adder/.style={muxdemux,
+         muxdemux def={Lh=4, NL=2, Rh=2, NR=1, NB=1, w=1.5,
+         inset w=0.5, inset Lh=2, inset Rh=1.5}}}
+\tikzset{ALU/.style={muxdemux,
+         muxdemux def={Lh=5, NL=2, Rh=2, NR=1, NB=2, NT=1, w=2,
+         inset w=1, inset Lh=2, inset Rh=0, square pins=1}}}
+%generic mux-demux shape
+\pgfdeclareshape{muxdemux}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{muxdemuxes}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \savedmacro{\thisshape}{\def\thisshape{\tikz at fig@name}}
+    % pins on the four sides
+    % \savedmacro\NL{%
+    %         \pgf at circ@count at a=\ctikzvalof{multipoles/muxdemux/NL}%
+    %         \def\NL{\the\pgf at circ@count at a}
+    % }
+    \savedmacro\NL{\edef\NL{\ctikzvalof{multipoles/muxdemux/NL}}}
+    \savedmacro\NR{\edef\NR{\ctikzvalof{multipoles/muxdemux/NR}}}
+    \savedmacro\NT{\edef\NT{\ctikzvalof{multipoles/muxdemux/NT}}}
+    \savedmacro\NB{\edef\NB{\ctikzvalof{multipoles/muxdemux/NB}}}
+    \savedmacro\squarepins{\edef\squarepins{\ctikzvalof{multipoles/muxdemux/square pins}}}
+    % topleft and topright sizes
+    \savedanchor{\topleft}{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgfmathsetlength\pgf at y{\ctikzvalof{multipoles/muxdemux/base len}*\ctikzvalof{multipoles/muxdemux/Lh}*\pgf at circ@scaled at Rlen/2}
+        \pgfmathsetlength\pgf at x{-\ctikzvalof{multipoles/muxdemux/base len}*\ctikzvalof{multipoles/muxdemux/w}*\pgf at circ@scaled at Rlen/2}
+    }
+    \savedanchor{\topright}{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgfmathsetlength\pgf at y{\ctikzvalof{multipoles/muxdemux/base len}*\ctikzvalof{multipoles/muxdemux/Rh}*\pgf at circ@scaled at Rlen/2}
+        \pgfmathsetlength\pgf at x{\ctikzvalof{multipoles/muxdemux/base len}*\ctikzvalof{multipoles/muxdemux/w}*\pgf at circ@scaled at Rlen/2}
+    }
+    \savedanchor{\insetnortheast}{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgfmathsetlength\pgf at y{\ctikzvalof{multipoles/muxdemux/base len}*\ctikzvalof{multipoles/muxdemux/inset Lh}*\pgf at circ@scaled at Rlen/2}
+        \pgfmathsetlength\pgf at x{-\ctikzvalof{multipoles/muxdemux/base len}*
+        (\ctikzvalof{multipoles/muxdemux/w}-2*\ctikzvalof{multipoles/muxdemux/inset w})*\pgf at circ@scaled at Rlen/2}
+    }
+    \saveddimen{\insethright}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgfmathsetlength\pgf at x{\ctikzvalof{multipoles/muxdemux/base len}*\ctikzvalof{multipoles/muxdemux/inset Rh}*\pgf at circ@scaled at Rlen/2}}
+    \saveddimen{\extshift}{
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgfmathsetlength\pgf at x{\pgf at circ@scaled at Rlen*\ctikzvalof{multipoles/external pins width}}}
+    \savedanchor{\northwest}{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgfmathsetlength\pgf at y{\ctikzvalof{multipoles/muxdemux/base len}*max(\ctikzvalof{multipoles/muxdemux/Rh},\ctikzvalof{multipoles/muxdemux/Lh})*\pgf at circ@scaled at Rlen/2}
+        \pgfmathsetlength\pgf at x{-\ctikzvalof{multipoles/muxdemux/base len}*\ctikzvalof{multipoles/muxdemux/w}*\pgf at circ@scaled at Rlen/2}
+    }
+    \anchor{nw}{\northwest}
+    \anchor{ne}{\northwest\pgf at x=-\pgf at x}
+    \anchor{se}{\northwest\pgf at x=-\pgf at x\pgf at y=-\pgf at y}
+    \anchor{sw}{\northwest\pgf at y=-\pgf at y}
+    \anchor{north west}{\northwest}
+    \anchor{north east}{\northwest\pgf at x=-\pgf at x}
+    \anchor{south east}{\northwest\pgf at x=-\pgf at x \pgf at y=-\pgf at y}
+    \anchor{south west}{\northwest\pgf at y=-\pgf at y}
+    \anchor{n}{\northwest\pgf at x=0pt }
+    \anchor{e}{\northwest\pgf at x=-\pgf at x\pgf at y=0pt }
+    \anchor{s}{\northwest\pgf at x=0pt\pgf at y=-\pgf at y}
+    \anchor{w}{\northwest\pgf at y=0pt }
+    \anchor{north}{\northwest\pgf at x=0pt }
+    \anchor{east}{\northwest\pgf at x=-\pgf at x\pgf at y=0pt }
+    \anchor{south}{\northwest\pgf at x=0pt\pgf at y=-\pgf at y}
+    \anchor{west}{\northwest\pgf at y=0pt }
+    \anchor{center}{\pgfpointorigin}
+    \anchor{top right}{\topright}
+    \anchor{bottom right}{\topright\pgf at y=-\pgf at y}
+    \anchor{right}{\topright\pgf at y=0pt\relax}
+    \anchor{top left}{\topleft}
+    \anchor{bottom left}{\topleft\pgf at y=-\pgf at y}
+    \anchor{left}{\topleft\pgf at y=0pt\relax}
+    \anchor{top}{\topright\pgf at ya=\pgf at y \topleft \advance\pgf at y by \pgf at ya
+        \divide\pgf at y by 2 \pgf at x=0pt\relax}
+    \anchor{bottom}{\topright\pgf at ya=\pgf at y \topleft \advance\pgf at y by \pgf at ya
+        \divide\pgf at y by 2 \pgf at y=-\pgf at y \pgf at x=0pt\relax}
+    \anchor{inset top right}{\pgf at ya=\insethright\insetnortheast\advance\pgf at y by -0.5\pgf at ya}
+    \anchor{inset bottom right}{\pgf at ya=\insethright\insetnortheast\advance\pgf at y by -0.5\pgf at ya\pgf at y=-\pgf at y}
+    \anchor{inset right}{\insetnortheast\pgf at y=0pt\relax}
+    \anchor{inset top left}{\insetnortheast\pgf at ya=\pgf at y\topleft\pgf at y=\pgf at ya}
+    \anchor{inset bottom left}{\insetnortheast\pgf at ya=\pgf at y\topleft\pgf at y=-\pgf at ya}
+    \anchor{inset left}{\topleft\pgf at y=0pt\relax}
+    \anchor{inset bottom}{\topleft\pgf at xa=\pgf at x\pgf at ya=\insethright
+        \insetnortheast\pgf at xb=\pgf at x\pgf at yb=\pgf at x
+        \pgfpoint{(\pgf at xa+\pgf at xb)/2}{-\pgf at ya+\pgf at yb/2}}
+    \anchor{inset top}{\topleft\pgf at xa=\pgf at x\pgf at ya=\insethright
+        \insetnortheast\pgf at xb=\pgf at x\pgf at yb=\pgf at x
+        \pgfpoint{(\pgf at xa+\pgf at xb)/2}{\pgf at ya-\pgf at yb/2}}
+    \anchor{inset center}{\topleft\pgf at xa=\pgf at x\insetnortheast
+        \advance\pgf at x by \pgf at xa \divide\pgf at x by 2 \pgf at y=0pt\relax}
+    \anchor{narrow center}{\insetnortheast\pgf at xa=\pgf at x\topright
+        \advance\pgf at x by \pgf at xa \divide\pgf at x by 2\pgf at y=0pt\relax}
+    \anchor{center up}{\topright\pgf at ya=\pgf at y \topleft \advance\pgf at y by \pgf at ya
+        \divide\pgf at y by 2
+        \pgf at yb = \insethright \advance\pgf at y by \pgf at yb
+        \divide\pgf at y by 2 \pgf at x=0pt\relax}
+    \anchor{center down}{\topright\pgf at ya=\pgf at y \topleft \advance\pgf at y by \pgf at ya
+        \divide\pgf at y by 2
+        \pgf at yb = \insethright \advance\pgf at y by \pgf at yb
+        \divide\pgf at y by 2 \pgf at y=-\pgf at y \pgf at x=0pt\relax}
+    \anchor{text}{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgfmathsetlength\pgf at x{\ctikzvalof{multipoles/muxdemux/base len}*
+          \ctikzvalof{multipoles/muxdemux/inset w}*\pgf at circ@scaled at Rlen/2}
+        \advance\pgf at x by -.5\wd\pgfnodeparttextbox%
+        \pgf at y=-.5\ht\pgfnodeparttextbox%
+        \advance\pgf at y by+.5\dp\pgfnodeparttextbox%
+    }%
+    \backgroundpath{%
+        \topleft
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at left = \pgf at x
+        \topright
+        \pgf at circ@res at other = \pgf at y
+        \pgf at circ@res at right = \pgf at x
+        \insetnortheast
+        \pgf at circ@res at step = \pgf at x
+        \pgf at circ@res at temp = \pgf at y
+        %
+        % external block
+        %
+        \pgfscope% (for the line width)
+            \pgf at circ@setlinewidth{multipoles}{\pgflinewidth}
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at other}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{-\pgf at circ@res at other}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+            % inset, starting down
+            \ifdim\pgf at circ@res at temp>0pt % inset
+                % \typeout{INSETw\space\the\pgf at circ@res at right\space x\space\the\pgf at circ@res at step\space  y\space\the\pgf at circ@res at temp}
+                \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{-\pgf at circ@res at temp}}
+                \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{-\insethright}}
+                \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{\insethright}}
+                \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at temp}}
+            \fi
+            \pgfpathclose
+            \pgf at circ@draworfill
+        \endpgfscope
+        % now we have to draw the pins, if needed
+        \ifdim\extshift>0pt\ifpgfcirc at draw@input at leads\pgfscope % let's avoid too much indent
+        % Ok, we have to draw the leads (a.k.a. pins)
+            \pgfsetlinewidth{\ctikzvalof{multipoles/external pins thickness}\pgflinewidth}
+            % We mimic the anchors here --- probably there is a better way
+            % left pins
+            \ifnum\NL>0\relax % not indented, closed on \repeatpgfmathloop
+            \pgf at circ@count at a=\NL\relax
+            \pgf at circ@count at b=\NL \divide\pgf at circ@count at b by 2 % see https://tex.stackexchange.com/questions/146523/why-does-numexpr-integer-division-round-rather-than-truncate
+            \topleft\pgf at circ@res at left=\pgf at x \pgf at circ@res at up=\pgf at y
+            \insetnortheast\pgf at circ@res at right=\pgf at x \pgf at circ@res at down=\pgf at y
+            \ifdim\pgf at circ@res at down>0pt % check if we have an inset
+            % we have to check oddity
+                \ifodd\NL
+                    \ifnum\NL=1
+                        % only centerpin, step should not be used, but anyway...
+                        \pgfmathsetlength{\pgf at circ@res at step}{2*(\pgf at circ@res at up-\pgf at circ@res at down)/(\NL)}
+                    \else
+                        \pgfmathsetlength{\pgf at circ@res at step}{2*(\pgf at circ@res at up-\pgf at circ@res at down)/(\NL-1)}
+                    \fi
+                \else
+                    \pgfmathsetlength{\pgf at circ@res at step}{2*(\pgf at circ@res at up-\pgf at circ@res at down)/\NL}
+                \fi
+            \else % no inset
+                \pgfmathsetlength{\pgf at circ@res at step}{2*\pgf at circ@res at up/\NL}
+            \fi
+            \pgfmathloop%
+            \ifnum\pgf at circ@count at a>0
+                %%%%%
+                \ifdim\pgf at circ@res at down>0pt % check if we have an inset
+                    \ifnum\pgf at circ@count at a>\pgf at circ@count at b\relax
+                        % for lower pins we have to shift them down
+                        % \typeout{DEBUGTEST1\space #1\space entering\space \NL}
+                        \ifodd\NL
+                            % odd number of pins
+                            \ifnum\pgf at circ@count at a=\numexpr\the\pgf at circ@count at b+1\relax
+                                % centerpin!
+                                \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+                                \ifnum\squarepins>0
+                                    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\extshift}{0pt}}
+                                \else
+                                    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-\extshift}{0pt}}
+                                \fi
+                            \else
+                                \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up+(0.5-\pgf at circ@count at a+1)*\pgf at circ@res at step-2*\pgf at circ@res at down}}
+                                \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\extshift}{\pgf at circ@res at up+(0.5-\pgf at circ@count at a+1)*\pgf at circ@res at step-2*\pgf at circ@res at down}}
+                            \fi
+                        \else
+                            % even numer of pins: just go down
+                            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up+(0.5-\pgf at circ@count at a)*\pgf at circ@res at step-2*\pgf at circ@res at down}}
+                            \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\extshift}{\pgf at circ@res at up+(0.5-\pgf at circ@count at a)*\pgf at circ@res at step-2*\pgf at circ@res at down}}
+                        \fi
+                    \else
+                        % nothing need for #1<=NL/2
+                        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up+(0.5-\pgf at circ@count at a)*\pgf at circ@res at step}}
+                        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\extshift}{\pgf at circ@res at up+(0.5-\pgf at circ@count at a)*\pgf at circ@res at step}}
+                    \fi
+                \else
+                % no inset
+                    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up+(0.5-\pgf at circ@count at a)*\pgf at circ@res at step}}
+                    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\extshift}{\pgf at circ@res at up+(0.5-\pgf at circ@count at a)*\pgf at circ@res at step}}
+                \fi
+                %%%%%
+                \advance\pgf at circ@count at a by -1\relax%
+            \repeatpgfmathloop\fi%
+            % right pins
+            \ifnum\NR>0\pgf at circ@count at a=\NR\relax
+            \pgfmathloop%
+            \topright\pgf at circ@res at right=\pgf at x \pgf at circ@res at up=\pgf at y
+            \pgfmathsetlength{\pgf at circ@res at step}{2*\pgf at circ@res at up/\NR}
+            \ifnum\pgf at circ@count at a>0
+                \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up+(0.5-\pgf at circ@count at a)*\pgf at circ@res at step}}
+                \pgfpathlineto{\pgfpoint{\pgf at circ@res at right+\extshift}{\pgf at circ@res at up+(0.5-\pgf at circ@count at a)*\pgf at circ@res at step}}
+            \advance\pgf at circ@count at a by -1\relax%
+            \repeatpgfmathloop\fi%
+            % bottom pins
+            \ifnum\NB>0\pgf at circ@count at a=\NB\relax %%%
+            \pgfmathloop%
+            \topleft\pgf at circ@res at left=\pgf at x \pgf at circ@res at up=\pgf at y
+            \topright\pgf at circ@res at right=\pgf at x \pgf at circ@res at down=\pgf at y
+            \pgfmathsetlength{\pgf at circ@res at step}{2*\pgf at circ@res at right/\NB}
+            \pgfmathsetlength{\pgf at circ@res at other}{(\pgf at circ@res at down-\pgf at circ@res at up)/(\pgf at circ@res at right-\pgf at circ@res at left)*\pgf at circ@res at step}
+            \ifnum\pgf at circ@count at a>0
+                \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left+(\pgf at circ@count at a-0.5)*\pgf at circ@res at step}
+                {-\pgf at circ@res at down+(\NB-\pgf at circ@count at a+0.5)*\pgf at circ@res at other}}
+                \ifnum\squarepins>0
+                    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left+(\pgf at circ@count at a-0.5)*\pgf at circ@res at step}
+                    {-max(\pgf at circ@res at down, \pgf at circ@res at up)-\extshift}}
+                \else
+                    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left+(\pgf at circ@count at a-0.5)*\pgf at circ@res at step}
+                    {-\pgf at circ@res at down+(\NB-\pgf at circ@count at a+0.5)*\pgf at circ@res at other-\extshift}}
+                \fi
+            \advance\pgf at circ@count at a by -1\relax%
+            \repeatpgfmathloop\fi%
+            % top pins
+            \ifnum\NT>0\pgf at circ@count at a=\NT\relax
+            \pgfmathloop%
+            \topleft\pgf at circ@res at left=\pgf at x \pgf at circ@res at up=\pgf at y
+            \topright\pgf at circ@res at right=\pgf at x \pgf at circ@res at down=\pgf at y
+            \pgfmathsetlength{\pgf at circ@res at step}{2*\pgf at circ@res at right/\NT}
+            \pgfmathsetlength{\pgf at circ@res at other}{(\pgf at circ@res at down-\pgf at circ@res at up)/(\pgf at circ@res at right-\pgf at circ@res at left)*\pgf at circ@res at step}
+            \ifnum\pgf at circ@count at a>0
+                \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left+(\pgf at circ@count at a-0.5)*\pgf at circ@res at step}
+                {\pgf at circ@res at down-(\NT-\pgf at circ@count at a+0.5)*\pgf at circ@res at other}}
+                \ifnum\squarepins>0
+                    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left+(\pgf at circ@count at a-0.5)*\pgf at circ@res at step}
+                    {max(\pgf at circ@res at down, \pgf at circ@res at up)+\extshift}}
+                \else
+                    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left+(\pgf at circ@count at a-0.5)*\pgf at circ@res at step}
+                    {\pgf at circ@res at down-(\NT-\pgf at circ@count at a+0.5)*\pgf at circ@res at other+\extshift}}
+                \fi
+            \advance\pgf at circ@count at a by -1\relax%
+            \repeatpgfmathloop\fi%
+        % end drawing pins; stroke them
+        \pgfusepath{stroke}
+        \endpgfscope\fi\fi
+    }
+    % let's start adding anchors
+    \pgfutil at g@addto at macro\pgf at sh@s at muxdemux{%
+        % left side anchors
+        \pgf at circ@count at a=\NL\relax
+        % \typeout{STARTGENERATINGLEFT\space\the\pgf at circ@count at a\space FOR\space\thisshape\space\NL}
+        \pgfmathloop%
+        \ifnum\pgf at circ@count at a>0
+        % \typeout{GENERATINGLEFT\space\the\pgf at circ@count at a\space FOR\space\thisshape\space\NL}
+            % we will create two anchors per pin: the "normal one" like `lpin 1` for the
+            % external leads, and the "border one" like `blpin 1` for internal ones.
+            % they will coincide if `external pins width` is set to 0.
+            \expandafter\xdef\csname pgf at anchor@muxdemux at lpin\space\the\pgf at circ@count at a\endcsname{%
+                \noexpand\pgf at circ@muxdemux at L@anchor{\the\pgf at circ@count at a}{1}%
+            }
+            \expandafter\xdef\csname pgf at anchor@muxdemux at blpin\space\the\pgf at circ@count at a\endcsname{%
+                \noexpand\pgf at circ@muxdemux at L@anchor{\the\pgf at circ@count at a}{0}%
+            }
+            \advance\pgf at circ@count at a by -1\relax%
+        \repeatpgfmathloop%
+        % right anchors
+        \pgf at circ@count at a=\NR\relax
+        \pgfmathloop%
+        \ifnum\pgf at circ@count at a>0
+            % we will create two anchors per pin: the "normal one" like `rpin 1` for the
+            % external leads, and the "border one" like `brpin 1` for internal ones.
+            % they will coincide if `external pins width` is set to 0.
+            \expandafter\xdef\csname pgf at anchor@muxdemux at rpin\space\the\pgf at circ@count at a\endcsname{%
+                \noexpand\pgf at circ@muxdemux at R@anchor{\the\pgf at circ@count at a}{1}%
+            }
+            \expandafter\xdef\csname pgf at anchor@muxdemux at brpin\space\the\pgf at circ@count at a\endcsname{%
+                \noexpand\pgf at circ@muxdemux at R@anchor{\the\pgf at circ@count at a}{0}%
+            }
+            \advance\pgf at circ@count at a by -1\relax%
+        \repeatpgfmathloop%
+        % bottom anchors
+        \pgf at circ@count at a=\NB\relax
+        \pgfmathloop%
+        \ifnum\pgf at circ@count at a>0
+            % we will create two anchors per pin: the "normal one" like `bpin 1` for the
+            % external leads, and the "border one" like `bbpin 1` for internal ones.
+            % they will coincide if `external pins width` is set to 0.
+            \expandafter\xdef\csname pgf at anchor@muxdemux at bpin\space\the\pgf at circ@count at a\endcsname{%
+                \noexpand\pgf at circ@muxdemux at B@anchor{\the\pgf at circ@count at a}{1}%
+            }
+            \expandafter\xdef\csname pgf at anchor@muxdemux at bbpin\space\the\pgf at circ@count at a\endcsname{%
+                \noexpand\pgf at circ@muxdemux at B@anchor{\the\pgf at circ@count at a}{0}%
+            }
+            \advance\pgf at circ@count at a by -1\relax%
+        \repeatpgfmathloop%
+        % top anchors
+        \pgf at circ@count at a=\NT\relax
+        \pgfmathloop%
+        \ifnum\pgf at circ@count at a>0
+            % we will create two anchors per pin: the "normal one" like `tpin 1` for the
+            % external leads, and the "border one" like `btpin 1` for internal ones.
+            % they will coincide if `external pins width` is set to 0.
+            \expandafter\xdef\csname pgf at anchor@muxdemux at tpin\space\the\pgf at circ@count at a\endcsname{%
+                \noexpand\pgf at circ@muxdemux at T@anchor{\the\pgf at circ@count at a}{1}%
+            }
+            \expandafter\xdef\csname pgf at anchor@muxdemux at btpin\space\the\pgf at circ@count at a\endcsname{%
+                \noexpand\pgf at circ@muxdemux at T@anchor{\the\pgf at circ@count at a}{0}%
+            }
+            \advance\pgf at circ@count at a by -1\relax%
+        \repeatpgfmathloop%
+    }%
+}
+
+%% left anchors for muxdemux
+
+\def\pgf at circ@muxdemux at L@anchor#1#2{% #1: pin number #2: 0 for border pin, 1 for external pin
+    \topleft
+    \pgf at xa=\pgf at x
+    \pgf at ya=\pgf at y
+    \insetnortheast
+    \pgf at xb=\pgf at x
+    \pgf at yb=\pgf at y
+    \ifnum#1>\NL
+        \PackageError{circuitikz}{%
+            You requested left pin #1 for mux/demux shape \thisshape\space \MessageBreak
+            which has been defined with \NL\space left pins%
+        }{Please check the manual about mux/demux shapes; if you press return I'll try to continue}
+    \fi
+    \pgf at circ@count at a=\NL \divide\pgf at circ@count at a by 2 % see https://tex.stackexchange.com/questions/146523/why-does-numexpr-integer-division-round-rather-than-truncate
+    % \typeout{LEFT \the\pgf at xa \space \the\pgf at ya \space \NL}
+    \ifnum\NL>1
+        \ifdim\pgf at yb>0pt % check if we have an inset
+        % we have to check oddity
+            \ifodd\NL
+                \pgfmathsetlength{\pgf at circ@res at step}{2*(\pgf at ya-\pgf at yb)/(\NL-1)}
+            \else
+                \pgfmathsetlength{\pgf at circ@res at step}{2*(\pgf at ya-\pgf at yb)/\NL}
+            \fi
+        \else % no inset
+            \pgfmathsetlength{\pgf at circ@res at step}{2*\pgf at ya/\NL}
+        \fi
+        \ifdim\pgf at yb>0pt % check if we have an inset
+            \ifnum#1>\pgf at circ@count at a\relax
+                % for lower pins we have to shift them down
+                % \typeout{DEBUGTEST1\space #1\space entering\space \NL}
+                \ifodd\NL
+                    % odd number of pins
+                    \ifnum#1=\numexpr\the\pgf at circ@count at a+1\relax
+                        % centerpin!
+                        \ifnum#2=0\relax
+                            \pgfpoint{\pgf at xb}{0pt}
+                        \else
+                            \ifnum\squarepins>0
+                                \pgfpoint{\pgf at xa-#2*\extshift}{0pt}
+                            \else
+                                \pgfpoint{\pgf at xb-#2*\extshift}{0pt}
+                            \fi
+                        \fi
+                    \else
+                        \pgfpoint{\pgf at xa-#2*\extshift}{\pgf at ya+(0.5-#1+1)*\pgf at circ@res at step-2*\pgf at yb}
+                    \fi
+                \else
+                    % even numer of pins: just go down
+                    \pgfpoint{\pgf at xa-#2*\extshift}{\pgf at ya+(0.5-#1)*\pgf at circ@res at step-2*\pgf at yb}
+                \fi
+            \else
+                % nothing need for #1<=NL/2
+                \pgfpoint{\pgf at xa-#2*\extshift}{\pgf at ya+(0.5-#1)*\pgf at circ@res at step}
+            \fi
+        \else
+        % no inset
+            \pgfpoint{\pgf at xa-#2*\extshift}{\pgf at ya+(0.5-#1)*\pgf at circ@res at step}
+        \fi
+    \else
+        \pgfpoint{\pgf at xa-#2*\extshift}{0pt}
+    \fi
+}
+
+% right anchors
+\def\pgf at circ@muxdemux at R@anchor#1#2{% #1: pin number #2: 0 for border pin, 1 for external pin
+    \topright
+    \pgf at xa=\pgf at x
+    \pgf at ya=\pgf at y
+    \ifnum#1>\NR
+        \PackageError{circuitikz}{%
+            You requested right pin #1 for mux/demux shape \thisshape\space \MessageBreak
+            which has been defined with \NR\space right pins%
+        }{Please check the manual about mux/demux shapes; if you press return I'll try to continue}
+    \fi
+    \ifnum\NR>1
+        \pgfmathsetlength{\pgf at circ@res at step}{2*\pgf at ya/\NR}
+        \pgfpoint{\pgf at xa+#2*\extshift}{\pgf at ya+(0.5-#1)*\pgf at circ@res at step}
+    \else
+        \pgfpoint{\pgf at xa+#2*\extshift}{0pt}
+    \fi
+}
+
+% bottom anchors
+\def\pgf at circ@muxdemux at B@anchor#1#2{% #1: pin number #2: 0 for border pin, 1 for external pin
+    \topleft
+    \pgf at xa=\pgf at x
+    \pgf at ya=\pgf at y
+    \topright
+    \pgf at xb=\pgf at x
+    \pgf at yb=\pgf at y
+    \ifnum#1>\NB
+        \PackageError{circuitikz}{%
+            You requested bottom pin #1 for mux/demux shape \thisshape\space \MessageBreak
+            which has been defined with \NB\space bottom pins%
+        }{Please check the manual about mux/demux shapes; if you press return I'll try to continue}
+    \fi
+    \ifnum\NB>0
+        % \typeout{DEBUGTESTtopleft\space\the\pgf at ya \space topright\space\the\pgf at yb \space\NB}
+        \pgfmathsetlength{\pgf at circ@res at step}{2*\pgf at xb/\NB}
+        \pgfmathsetlength{\pgf at circ@res at other}{(\pgf at yb-\pgf at ya)/(\pgf at xb-\pgf at xa)*\pgf at circ@res at step}
+        \pgfmathsetlength\pgf at x{\pgf at xa+(#1-0.5)*\pgf at circ@res at step}
+        \ifnum#2=0\relax
+            \pgfmathsetlength\pgf at y{-\pgf at yb+(\NB-#1+0.5)*\pgf at circ@res at other}
+        \else
+            \ifnum\squarepins>0\relax
+                \pgfmathsetlength\pgf at y{-max(\pgf at ya,\pgf at yb)-\extshift}
+            \else
+                \pgfmathsetlength\pgf at y{-\pgf at yb+(\NB-#1+0.5)*\pgf at circ@res at other-\extshift}
+            \fi
+        \fi
+    \else
+        % should not happen, give the same as pin 1 anyway
+        \ifnum#2=0\relax
+        \pgfpoint{0pt}{-\pgf at yb+(\pgf at yb-\pgf at ya)/2}
+        \else
+            \pgfpoint{0pt}{-max(\pgf at ya,\pgf at yb)-\extshift}
+        \fi
+    \fi
+}
+
+% top anchors
+\def\pgf at circ@muxdemux at T@anchor#1#2{% #1: pin number #2: 0 for border pin, 1 for external pin
+    \topleft
+    \pgf at xa=\pgf at x
+    \pgf at ya=\pgf at y
+    \topright
+    \pgf at xb=\pgf at x
+    \pgf at yb=\pgf at y
+    \ifnum#1>\NT
+        \PackageError{circuitikz}{%
+            You requested top pin #1 for mux/demux shape \thisshape\space \MessageBreak
+            which has been defined with \NT\space top pins%
+        }{Please check the manual about mux/demux shapes; if you press return I'll try to continue}
+    \fi
+    \ifnum\NT>0
+        \pgfmathsetlength{\pgf at circ@res at step}{2*\pgf at xb/\NT}
+        \pgfmathsetlength{\pgf at circ@res at other}{(\pgf at yb-\pgf at ya)/(\pgf at xb-\pgf at xa)*\pgf at circ@res at step}
+        \pgfmathsetlength\pgf at x{\pgf at xa+(#1-0.5)*\pgf at circ@res at step}
+        \ifnum#2=0\relax
+            \pgfmathsetlength\pgf at y{\pgf at yb-(\NT-#1+0.5)*\pgf at circ@res at other}
+        \else
+            \ifnum\squarepins>0
+                \pgfmathsetlength\pgf at y{max(\pgf at ya,\pgf at yb)+\extshift}
+            \else
+                \pgfmathsetlength\pgf at y{\pgf at yb-(\NT-#1+0.5)*\pgf at circ@res at other+\extshift}
+            \fi
+        \fi
+    \else
+        % should not happen, give the same as pin 1 anyway
+        \ifnum#2=0\relax
+        \pgfpoint{0pt}{\pgf at yb-(\pgf at yb-\pgf at ya)/2}
+        \else
+            \pgfpoint{0pt}{max(\pgf at ya,\pgf at yb)+\extshift}
+        \fi
+    \fi
+}
+
+%% IEEE standard logic ports module
+%%
+%% Original multi-input code from John Kormylo at tex.stackexchange.com
+%% Help by TheTeXnician <38565529+TheTeXnician at users.noreply.github.com>
+%% Suggested idea and example code by Jason Sachs <jmsachs at gmail.com>
+%% Please see https://github.com/circuitikz/circuitikz/issues/383 for a lot of details
+%% Most of the code, all errors and bugs by Romano Giannetti <romano.giannetti at gmail.com>
+%% Everything is in the same place here --- more or less; first step to move towards
+%% a module interface for circutikz
+%%
+
+% base parameters for ieeestd ports.
+
+\ctikzset{ieeestd ports/.is family}
+% baselen is relative to pgfcirc at Rlen as ever; scaled if the class says so.
+% the value of 0.4 is the standard pin distance for a port with height=num pins
+% and matches the chip distance
+\ctikzset{ieeestd ports/baselen/.initial=0.4}
+% these are in term of baselen; width depends on height (fixed proportions)
+\ctikzset{ieeestd ports/height/.initial=2}
+\ctikzset{ieeestd ports/pin length/.initial=0.7}
+% the standard "not" circle should be 1/6.5 of height (diameter);
+% so radius/baselen=1/3.25/2    --- using 0.1 and no scaling is as a pole
+\ctikzset{ieeestd ports/not radius/.initial=0.154}
+\ctikzset{ieeestd ports/not radius fill/.initial=1}% change ony if you know why
+% the suggested xnor distance is is 1.24, so 1.25/3.25/2
+% xor/xnor leads go full in in IEEE; let this be optional
+\ctikzset{ieeestd ports/xor bar distance/.initial=0.192}%
+\ctikzset{ieeestd ports/xor leads in/.initial=1}%
+%
+% base size of a small external schmitt symbol
+%
+\ctikzset{ieeestd ports/schmitt symbol size/.initial=0.3}%
+%
+% input management
+% we are using the same /tikz/number inputs than the legacy ports
+%
+\tikzset{/tikz/inner inputs/.initial=0} % using 0 means that all inputs are inner
+%
+% integrate with the other logic ports
+%
+% 
+\newif\ifpgf at circuit@ieeelogicport\pgf at circuit@ieeelogicportfalse
+\ctikzset{logic ports/ieee/.code= {%
+    \pgf at circuit@ieeelogicporttrue
+    \pgf at circuit@europeanlogicportfalse
+    \tikzset{and port/.style={shape=ieeestd and port}}%
+    \tikzset{or port/.style={shape=ieeestd or port}}%
+    \tikzset{xor port/.style={shape=ieeestd xor port}}%
+    \tikzset{buffer port/.style={shape=ieeestd buffer port}}%
+    \tikzset{not port/.style={shape=ieeestd not port}}%
+    \tikzset{nand port/.style={shape=ieeestd nand port}}%
+    \tikzset{nor port/.style={shape=ieeestd nor port}}%
+    \tikzset{xnor port/.style={shape=ieeestd xnor port}}%
+    \tikzset{schmitt port/.style={shape=ieeestd schmitt port}}%
+    \tikzset{invschmitt port/.style={shape=ieeestd invschmitt port}}%
+}}
+% add code to be compatible with the other ports
+\ctikzset{logic ports/european/.add code={\pgf at circuit@ieeelogicportfalse}}
+\ctikzset{logic ports/american/.add code={\pgf at circuit@ieeelogicportfalse}}
+\tikzset{ieee ports/.style = {\circuitikzbasekey/logic ports = ieee}}
+%
+% the base angle for the or port. See the drawings. This will not change with height
+%
+\pgfmathsetmacro{\pgf at circ@orangle}{atan(3.25/6.5)}
+% \typeout{ANGLE-IS\space\pgf at circ@orangle}
+\def\pgf at circ@ieeeport at input#1% #1 = \pgfmathcounter
+{%
+    \ifnum#1>\inputs
+        \PackageError{circuitikz}{%
+            You requested input pin #1 for logic port shape \thisshape\space \MessageBreak
+            which has been defined with \inputs\space pins%
+        }{Please check the manual about logic ports; if you press return I'll try to continue}
+    \fi
+    \pgfmathsetlength{\pgf at circ@res at up}{(\inputs/2)*\pind+0.5*\pind}% pin "0", above the rack/port
+    \pgfextractx{\pgf at circ@res at left}{\bodyleft}
+    \pgf at circ@res at step=\pind
+    \pgf at y=\pgf at circ@res at up\advance\pgf at y by -#1\pgf at circ@res at step\relax
+    \pgf at x=\pgf at circ@res at left\advance\pgf at x by -\pinlen
+}%
+
+% #1 = \pgfmathcounter #2=type
+% type is 1 for and,nand; 2 for or,nor; 3 for xor,xnor
+\def\pgf at circ@ieeeport at baseinput#1#2%
+{%
+    \ifnum#1>\inputs
+        \PackageError{circuitikz}{%
+            You requested border input pin #1 for logic port shape \thisshape\space \MessageBreak
+            which has been defined with \inputs\space pins%
+        }{Please check the manual about logic ports; if you press return I'll try to continue}
+    \fi
+    % Find the vertical position (this is the same for any port)
+    \pgfmathsetlength{\pgf at circ@res at up}{(\inputs/2)*\pind+0.5*\pind}% pin "0", above the rack/port
+    \pgf at circ@res at step=\pind\advance\pgf at circ@res at up by -#1\pgf at circ@res at step\relax
+    % rack (extended) pins; they are the same for all the ports
+    % call K = (inputs-inner)/2, rounded up; pins on the rack are:
+    %      above: 1..K (included)
+    %      below: inputs-K..inputs
+    % Find the pins on the rack; they are 1...
+    \pgf at circ@count at a=\numexpr (\inputs - \inners)/2\relax       % =K; numexpr rounds up!
+    \pgf at circ@count at b=\numexpr \inputs - \pgf at circ@count at a +1 \relax % =inputs - K +1
+    % border anchors for rack should be ok
+    \pgfextractx{\pgf at circ@res at left}{\topleft}
+    \pgfextractx{\pgf at circ@res at right}{\bodyleft}
+    \pgf at y=\pgf at circ@res at up\pgf at x=\pgf at circ@res at left
+    % we have finished if we are in the rack
+    \ifnum #1 > \pgf at circ@count at a \ifnum #1 < \pgf at circ@count at b
+        % we are on the inner ports; we have to do the hard work here
+        % and and nand
+        \ifnum #2=1
+            \relax % It's an and/nand, all border ports are on the rack line
+        \fi
+        % or and nor
+        \ifnum #2=2
+            \pgfmathsetlength{\pgf at x}{\pgf at circ@res at right-2*\stdH*(1-cos(atan(\pgf at circ@res at up/(2*\stdH))))}
+        \fi
+        % xor and xnor
+        \ifnum #2=3\relax
+            \pgfmathsetlength{\pgf at x}{\pgf at circ@res at right-\xorbar-2*\stdH*(1-cos(atan(\pgf at circ@res at up/(2*\stdH))))}
+        \fi
+    \fi\fi
+}%
+% inner base ports for xor types port
+% #1 = \pgfmathcounter #2=type
+% type is 1 for and,nand; 2 for or,nor; 3 for xor,xnor
+\def\pgf at circ@ieeeport at innerbaseinput#1%
+{%
+    \ifnum#1>\inputs
+        \PackageError{circuitikz}{%
+            You requested border input pin #1 for logic port shape \thisshape\space \MessageBreak
+            which has been defined with \inputs\space pins%
+        }{Please check the manual about logic ports; if you press return I'll try to continue}
+    \fi
+    % Find the vertical position (this is the same for any port)
+    \pgfmathsetlength{\pgf at circ@res at up}{(\inputs/2)*\pind+0.5*\pind}% pin "0", above the rack/port
+    \pgf at circ@res at step=\pind\advance\pgf at circ@res at up by -#1\pgf at circ@res at step\relax
+    % rack (extended) pins; they are the same for all the ports
+    % call K = (inputs-inner)/2, rounded up; pins on the rack are:
+    %      above: 1..K (included)
+    %      below: inputs-K..inputs
+    % Find the pins on the rack; they are 1...
+    \pgf at circ@count at a=\numexpr (\inputs - \inners)/2\relax       % =K; numexpr rounds up!
+    \pgf at circ@count at b=\numexpr \inputs - \pgf at circ@count at a +1 \relax % =inputs - K +1
+    % border anchors for rack should be ok
+    \pgfextractx{\pgf at circ@res at left}{\topleft}
+    \pgfextractx{\pgf at circ@res at right}{\bodyleft}
+    \pgf at y=\pgf at circ@res at up\pgf at x=\pgf at circ@res at left
+    % we have finished if we are in the rack
+    \ifnum #1 > \pgf at circ@count at a \ifnum #1 < \pgf at circ@count at b
+        % we are on the inner ports; we have to do the hard work here
+        \pgfmathsetlength{\pgf at x}{\pgf at circ@res at right-2*\stdH*(1-cos(atan(\pgf at circ@res at up/(2*\stdH))))}
+    \fi\fi
+}%
+
+%%% macro to find basic lenghts --- they leave it in \pgf at circ@res at temp
+\def\pgf at circ@ieeestd at baselen{%
+    \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}*\pgf at circ@Rlen}
+    \pgfmathsetlength{\pgf at circ@res at temp}{\ctikzvalof{ieeestd ports/baselen}*\pgf at circ@scaled at Rlen}
+}
+\def\pgf at circ@ieeestd at stdH{%
+    \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}*\pgf at circ@Rlen}
+    \pgfmathsetlength{\pgf at circ@res at temp}{0.5*\ctikzvalof{ieeestd ports/baselen}*
+        \ctikzvalof{ieeestd ports/height}*\pgf at circ@scaled at Rlen}
+}
+\def\pgf at circ@ieeestd at pinlen{%
+    \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}*\pgf at circ@Rlen}
+    \pgfmathsetlength{\pgf at circ@res at temp}{\ctikzvalof{ieeestd ports/baselen}*
+        \ctikzvalof{ieeestd ports/pin length}*\pgf at circ@scaled at Rlen}
+}
+\def\pgf at circ@ieeestd at xorbar{%
+    \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}*\pgf at circ@Rlen}
+    \pgfmathsetlength{\pgf at circ@res at temp}{\ctikzvalof{ieeestd ports/baselen}*
+        \ctikzvalof{ieeestd ports/xor bar distance}*\pgf at circ@scaled at Rlen}
+}
+%% Not circle
+\def\pgf at circ@notradius{
+    \pgf at circ@ieeestd at stdH % got the standard length. Notice that his is 3.25H for IEEE
+    \pgfmathsetlength{\pgf at circ@res at temp}{\ctikzvalof{ieeestd ports/not radius}*\pgf at circ@res at temp}
+    % \typeout{NOTRADIUS\space\the\pgf at circ@res at temp}
+}
+%% Find (in ... at other) the height of the rack
+\def\pgf at circ@findrackH{%
+    \pgf at circ@count at a=\pgfkeysvalueof{/tikz/number inputs}\relax%
+    \pgf at circ@count at b=\pgfkeysvalueof{/tikz/inner inputs}\relax%
+    \ifnum\pgf at circ@count at a=0 \pgf at circ@count at a=2\fi  % default pins
+    \ifnum\pgf at circ@count at a<2 \pgf at circ@count at a=2\fi %
+    \ifnum\pgf at circ@count at b=0 \pgf at circ@count at b=\pgf at circ@count at a\fi%
+    \pgf at circ@ieeestd at stdH
+    \multiply\pgf at circ@res at temp by 2\relax% full height
+    \divide\pgf at circ@res at temp by \pgf at circ@count at b % the pin spacing
+    \pgfmathsetlength{\pgf at circ@res at other}{(\pgf at circ@count at a/2)*\pgf at circ@res at temp} %top of the rack/port
+    % \typeout{RACK-\thisshape\space\the\pgf at circ@res at other}
+}
+%%
+\def\pgf at circ@find at ieeeport@up{% leave it in up
+    % Normal port limits
+    \pgf at circ@ieeestd at stdH
+    \pgfmathsetlength{\pgf at circ@res at up}{\pgf at circ@res at temp}
+    % rack top size
+    \pgf at circ@findrackH
+    \ifdim\pgf at circ@res at other > \pgf at circ@res at up
+        \pgf at circ@res at up=\pgf at circ@res at other
+    \else
+    \fi
+}
+\def\pgf at circ@find at ieeeport@left#1{% leave it in left; #1 is type
+    % Normal port limits
+    \pgf at circ@ieeestd at stdH
+    \pgfmathsetlength{\pgf at circ@res at left}{8*\pgf at circ@res at temp/6.5}
+    \pgf at circ@res at right=\pgf at circ@res at left % save the border value
+    \pgf at circ@res at step=\pgf at circ@res at temp % save the stdH value
+    \pgf at circ@ieeestd at pinlen\advance\pgf at circ@res at left by \pgf at circ@res at temp
+    % \typeout{LEFT1-\thisshape\space L\space\the\pgf at circ@res at left\space R\space\the\pgf at circ@res at right}
+    % this is the normal left border
+    % For the or or xor port, the limit can be the pointy thing (in case the
+    % pinlen is zero or too small)
+    % add to the body margin the or/nor peak:
+    \ifnum #1 > 1\relax% "or", "nor", "xor", "xnor" gates.
+        \pgfmathsetlength{\pgf at circ@res at other}{2*\pgf at circ@res at step*(1-cos(\pgf at circ@orangle))}
+        \advance\pgf at circ@res at right by \pgf at circ@res at other
+        % \typeout{LEFT2-\thisshape\space L\space\the\pgf at circ@res at left\space R\space\the\pgf at circ@res at right}
+    \fi
+    % add to the body margin the xor/xnor distance
+    \ifnum #1 = 3\relax% "xor" or "xnor" gates.
+        \pgf at circ@ieeestd at xorbar
+        \advance\pgf at circ@res at right by \pgf at circ@res at temp
+        % \typeout{LEFT3-\thisshape\space L\space\the\pgf at circ@res at left\space R\space\the\pgf at circ@res at right}
+    \fi
+    % and if this exceeds the normal margin, this is it
+    % \typeout{LEFT4-\thisshape\space L\space\the\pgf at circ@res at left\space R\space\the\pgf at circ@res at right}
+    \ifdim \pgf at circ@res at right > \pgf at circ@res at left
+        \pgf at circ@res at left=\pgf at circ@res at right
+    \fi
+    % \typeout{LEFT5-\thisshape\space L\space\the\pgf at circ@res at left\space R\space\the\pgf at circ@res at right}
+    \pgf at circ@res at left=-\pgf at circ@res at left
+}
+\def\pgf at circ@find at ieeeport@right#1{% leave it in right; #1 is plain or negated
+    % Normal port limits
+    \pgf at circ@ieeestd at stdH
+    \pgfmathsetlength{\pgf at circ@res at right}{8*\pgf at circ@res at temp/6.5}
+    \pgf at circ@notradius
+    \pgfmathsetlength{\pgf at circ@res at other}{\pgf at circ@res at right+2*#1*\pgf at circ@res at temp}
+    \pgf at circ@ieeestd at pinlen\advance\pgf at circ@res at right by \pgf at circ@res at temp
+    \ifdim\pgf at circ@res at other > \pgf at circ@res at right
+        \pgf at circ@res at right=\pgf at circ@res at other
+    \fi
+}
+\def\pgf at circ@find at ieeeport@not at right#1{% leave it in right; #1 is plain or negated
+    % Normal port limits
+    \pgf at circ@ieeestd at stdH
+    % notice 0.8660254 is cos(30)
+    \pgfmathsetlength{\pgf at circ@res at right}{0.8660254*\pgf at circ@res at temp}
+    \pgf at circ@notradius
+    \pgfmathsetlength{\pgf at circ@res at other}{\pgf at circ@res at right+2*#1*\pgf at circ@res at temp}
+    \pgf at circ@ieeestd at pinlen\advance\pgf at circ@res at right by \pgf at circ@res at temp
+    \ifdim\pgf at circ@res at other > \pgf at circ@res at right
+        \pgf at circ@res at right=\pgf at circ@res at other
+    \fi
+}
+
+
+%%% ieeestd multi-input ports
+%%% #1: name
+%%% #2: type: 1 for and,nand; 2 for or,nor; 3 for xor,xnor
+%%% #3: polarity: 0 for direct, 1 for inverted (not at the output)
+%%% #4: drawing for the port
+\long\def\pgfcircdeclareieeeport#1#2#3#4{%
+    \pgfdeclareshape{ieeestd #1 port}%
+    {%
+        \savedmacro{\ctikzclass}{\edef\ctikzclass{logic ports}}
+        \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+        \savedmacro{\thisshape}{\def\thisshape{\tikz at fig@name}}
+        \saveddimen{\baselen}{%
+            \pgf at circ@ieeestd at baselen\pgf at x=\pgf at circ@res at temp
+        }
+        \saveddimen{\stdH}{% This is HALF the height of the inner port
+            \pgf at circ@ieeestd at stdH\pgf at x=\pgf at circ@res at temp
+        }
+        \saveddimen{\notdiameter}{
+            \pgf at circ@notradius\pgf at x=2\pgf at circ@res at temp
+        }
+        \saveddimen{\pind}{% pin distance;
+            \pgf at circ@count at a=\pgfkeysvalueof{/tikz/number inputs}\relax%
+            \pgf at circ@count at b=\pgfkeysvalueof{/tikz/inner inputs}\relax%
+            \ifnum\pgf at circ@count at a=0 \pgf at circ@count at a=2\fi  % default pins
+            \ifnum\pgf at circ@count at a<2 \pgf at circ@count at a=2\fi %
+            \ifnum\pgf at circ@count at b=0 \pgf at circ@count at b=\pgf at circ@count at a\fi%
+            \pgf at circ@ieeestd at stdH\pgf at x=2\pgf at circ@res at temp % full height
+            \divide\pgf at x by \pgf at circ@count at b
+        }
+        \saveddimen{\pinlen}{%
+            \pgf at circ@ieeestd at pinlen\pgf at x=\pgf at circ@res at temp
+        }
+        \saveddimen{\xorbar}{%
+            \pgf at circ@ieeestd at xorbar\pgf at x=\pgf at circ@res at temp
+        }
+        % anchors for the body (no pins included here)
+        \savedanchor{\bodyleft}{% This DOES NOT take into account the pointy or/xor thing
+            \pgf at circ@ieeestd at stdH
+            \pgfmathsetlength{\pgf at x}{-8*\pgf at circ@res at temp/6.5}
+            \pgfmathsetlength{\pgf at y}{\pgf at circ@res at temp}
+        }
+        \savedanchor{\topleft}{%
+            \pgf at circ@ieeestd at xorbar\pgf at circ@res at right=\pgf at circ@res at temp % save \xorbar
+            \pgf at circ@ieeestd at stdH
+            \pgf at circ@res at other=0pt\relax
+            \ifnum #2 = 2\relax% "or" or "nor" gates.
+                \pgfmathsetlength{\pgf at circ@res at other}{2*\pgf at circ@res at temp*(1-cos(\pgf at circ@orangle))}
+            \fi
+            \ifnum #2 = 3\relax% "xor" or "xnor" gates.
+                \pgfmathsetlength{\pgf at circ@res at other}{2*\pgf at circ@res at temp*(1-cos(\pgf at circ@orangle))
+                    +\pgf at circ@res at right}
+            \fi
+            \pgfmathsetlength{\pgf at x}{-8*\pgf at circ@res at temp/6.5-\pgf at circ@res at other}
+            \pgfmathsetlength{\pgf at y}{\pgf at circ@res at temp}
+        }
+        \savedanchor{\bodyright}{% This DOES NOT take into account the "NOT" circle
+            \pgf at circ@ieeestd at stdH
+            \pgfmathsetlength{\pgf at x}{8*\pgf at circ@res at temp/6.5}
+            \pgfmathsetlength{\pgf at y}{-\pgf at circ@res at temp}
+        }
+        \savedanchor{\bottomright}{% This DOES take into account the "NOT" circle
+            \pgf at circ@notradius\pgf at circ@res at other=\pgf at circ@res at temp
+            \pgf at circ@ieeestd at stdH
+            % #3 is =1 if the port is a negated output one
+            \pgfmathsetlength{\pgf at x}{8*\pgf at circ@res at temp/6.5+#3*2*\pgf at circ@res at other}
+            \pgfmathsetlength{\pgf at y}{-\pgf at circ@res at temp}
+        }
+        % geographical anchors --- must be rectangulars!
+        \savedanchor{\northwest}{%
+            \pgf at circ@find at ieeeport@up
+            \pgf at circ@find at ieeeport@left{#2}
+            % \typeout{ANCH5-\thisshape\space L\space\the\pgf at circ@res at left\space U\space\the\pgf at circ@res at up}
+            \pgf at x=\pgf at circ@res at left
+            \pgf at y=\pgf at circ@res at up
+        }
+        \savedanchor{\southwest}{%
+            \pgf at circ@find at ieeeport@up
+            \pgf at circ@find at ieeeport@left{#2}
+            \pgf at x=\pgf at circ@res at left
+            \pgf at y=-\pgf at circ@res at up
+        }
+        \savedanchor{\southeast}{%
+            \pgf at circ@find at ieeeport@up
+            \pgf at circ@find at ieeeport@right{#3}
+            \pgf at x=\pgf at circ@res at right
+            \pgf at y=-\pgf at circ@res at up
+        }
+        \savedanchor{\northeast}{%
+            \pgf at circ@find at ieeeport@up
+            \pgf at circ@find at ieeeport@right{#3}
+            \pgf at x=\pgf at circ@res at right
+            \pgf at y=\pgf at circ@res at up
+        }
+        \savedmacro\inputs{% get number of inputs
+            \pgf at circ@count at a=\pgfkeysvalueof{/tikz/number inputs}\relax
+            \ifnum\pgf at circ@count at a=0\pgf at circ@count at a=2\fi    % default
+            \ifnum\pgf at circ@count at a<2 \pgf at circ@count at a=2\fi   % minimum pins
+            % \ifnum\pgf at circ@count at a>16 \pgf at circ@count at a=16\fi
+            \def\inputs{\the\pgf at circ@count at a}%
+        }%
+        \savedmacro\inners{% get number of "inner" inputs (for racks)
+            \pgf at circ@count at a=\pgfkeysvalueof{/tikz/number inputs}\relax
+            \pgf at circ@count at b=\pgfkeysvalueof{/tikz/inner inputs}\relax
+            \ifnum\pgf at circ@count at a=0 \pgf at circ@count at a=2\fi  % default pins
+            \ifnum\pgf at circ@count at a<2 \pgf at circ@count at a=2\fi  % minimum pins
+            \ifnum\pgf at circ@count at b=0 \pgf at circ@count at b=\pgf at circ@count at a\fi
+            % \typeout{INNER is \the\pgf at circ@count at b}%
+            % \ifnum\pgf at circ@count at a>16 \pgf at circ@count at a=16\fi
+            \def\inners{\the\pgf at circ@count at b}%
+        }%
+        \anchor{center}{\pgfpointorigin}
+        \anchor{text}{
+            \ifpgf at circ@center at text
+                \pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}
+            \else
+                \pgf at circ@ieeestd at stdH
+                \pgfmathsetlength{\pgf at circ@res at left}{-8*\pgf at circ@res at temp/6.5} % left border
+                \pgfpoint{\pgf at circ@res at left + \ctikzvalof{left text distance}}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}
+            \fi
+        }
+        % create input anchors
+        \expandafter\pgfutil at g@addto at macro\csname pgf at sh@s at ieeestd #1 port\endcsname{%
+            \pgf at circ@count at a=\inputs
+            \pgfmathloop%
+            \ifnum\pgfmathcounter>\pgf at circ@count at a%
+            \else%
+            %\pgfutil at ifundefined{pgf at anchor@american #1 port at in \pgfmathcounter}{%
+            \expandafter\xdef\csname pgf at anchor@ieeestd #1 port at in \pgfmathcounter\endcsname{%
+                \noexpand\pgf at circ@ieeeport at input{\pgfmathcounter}% defined above
+            }%
+            \expandafter\xdef\csname pgf at anchor@ieeestd #1 port at bin \pgfmathcounter\endcsname{%
+                \noexpand\pgf at circ@ieeeport at baseinput{\pgfmathcounter}{#2}% defined above
+            }%
+            \ifnum #2 = 3\relax % xor/xnor inner border pins
+                \expandafter\xdef\csname pgf at anchor@ieeestd #1 port at ibin \pgfmathcounter\endcsname{%
+                    \noexpand\pgf at circ@ieeeport at innerbaseinput{\pgfmathcounter}% defined above
+                }%
+            \fi
+            %}{}%
+            \repeatpgfmathloop%
+        }
+        % output anchor
+        \anchor{out}{%
+            \pgfextractx{\pgf at circ@res at other}{\bodyright}   %body border, without not ball
+            \advance\pgf at circ@res at other by\pinlen
+            \pgfextractx{\pgf at circ@res at temp}{\bottomright}   %body + ball border
+            \ifdim \pgf at circ@res at temp > \pgf at circ@res at other
+                \pgf at circ@res at other = \pgf at circ@res at temp % do not enter in the ball...
+            \fi
+            \pgf at x=\pgf at circ@res at other\pgf at y=0pt
+        }
+        \anchor{bout}{\bottomright\pgf at y=0pt}
+
+        \anchor{body right}{\bodyright\pgf at y=0pt}
+        \anchor{right}{\bottomright\pgf at y=0pt}
+        \anchor{body left}{\bodyleft\pgf at y=0pt}% central edge of the body
+        \anchor{left}{% central edge of the component
+            \bodyleft\pgf at y=0pt
+            \ifnum #2=3\relax
+                \advance\pgf at x by -\xorbar
+            \fi
+        }
+        \anchor{up}{%
+            \bodyleft
+            \ifnum #2 > 1 % pointy shapes
+                \pgf at circ@ieeestd at stdH
+                % horizontal coordinate where the right semicircle starts
+                \pgfmathsetlength{\pgf at circ@res at other}{-8*\pgf at circ@res at temp/6.5+2*\pgf at circ@res at temp*cos(\pgf at circ@orangle)}
+                % vertical drop of the circle at the above coordinate
+                \pgfmathsetlength{\pgf at circ@res at step}{2*\pgf at circ@res at temp*(1-cos(atan(\pgf at circ@res at other/(2*\pgf at circ@res at temp))))}
+                \advance \pgf at y by -\pgf at circ@res at step
+            \fi
+            \pgf at x=0pt
+        }
+        \anchor{down}{%
+            \bodyleft
+            \ifnum #2 > 1 % pointy shapes
+                \pgf at circ@ieeestd at stdH
+                % horizontal coordinate where the right semicircle starts
+                \pgfmathsetlength{\pgf at circ@res at other}{-8*\pgf at circ@res at temp/6.5+2*\pgf at circ@res at temp*cos(\pgf at circ@orangle)}
+                % vertical drop of the circle at the above coordinate
+                \pgfmathsetlength{\pgf at circ@res at step}{2*\pgf at circ@res at temp*(1-cos(atan(\pgf at circ@res at other/(2*\pgf at circ@res at temp))))}
+                \advance \pgf at y by -\pgf at circ@res at step
+            \fi
+            \pgf at y=-\pgf at y\pgf at x=0pt
+        }
+
+        % geographical anchors
+        \anchor{nw}{\northwest}
+        \anchor{ne}{\northeast}
+        \anchor{se}{\southeast}
+        \anchor{sw}{\southwest}
+        \anchor{north west}{\northwest}
+        \anchor{north east}{\northeast}
+        \anchor{south east}{\southeast}
+        \anchor{south west}{\southwest}
+        % over 0,0 even if asymmetric
+        % will break if the geocoords are not rectangular
+        \anchor{n}{\northwest\pgf at x=0pt\relax}
+        \anchor{e}{\northeast\pgf at y=0pt\relax}
+        \anchor{s}{\southwest\pgf at x=0pt\relax}
+        \anchor{w}{\northwest\pgf at y=0pt\relax}
+        \anchor{north}{\northwest\pgf at x=0pt\relax}
+        \anchor{east}{\northeast\pgf at y=0pt\relax}
+        \anchor{south}{\southwest\pgf at x=0pt\relax}
+        \anchor{west}{\northwest\pgf at y=0pt\relax}
+
+        \backgroundpath{
+            \pgfscope
+                \pgfsetcolor{\ctikzvalof{color}}
+                #4
+            \endpgfscope
+            % output lead:
+            \pgfextractx{\pgf at circ@res at right}{\bottomright} %body+ball border
+            \pgfextractx{\pgf at circ@res at other}{\bodyright}   %body border, without "not" ball
+            \advance\pgf at circ@res at other by \pinlen\relax
+            \ifdim \pgf at circ@res at other > \pgf at circ@res at right
+                \ifpgfcirc at draw@output at leads
+                    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+                    \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{0pt}}
+                    \pgfusepath{draw}
+                \fi
+            \fi
+            \ifnum #3=1\relax\pgfscope
+                \pgftransformshift{\pgfpoint{\pgf at circ@res at right}{0pt}}
+                \pgfnode{notcirc}{east}{}{\thisshape-not}{\pgfusepath{stroke}}
+            \endpgfscope\fi
+        }
+    }
+}
+
+%%% #1 direct name #2 negated name #3 type #4 drawing (without output)
+\long\def\pgfcircdeclareieeeportpair#1#2#3#4{%
+    \pgfcircdeclareieeeport{#1}{#3}{0}{#4}% direct
+    \pgfcircdeclareieeeport{#2}{#3}{1}{#4}% negated
+}
+%
+% ieeestd "and" and "nand"
+%
+\pgfcircdeclareieeeportpair{and}{nand}{1}{%
+    \pgf at circ@count at a = \inputs\relax
+    \pgfmathsetlength{\pgf at circ@res at up}{(\inputs/2)*\pind} %top of the rack/port
+    \pgfmathsetlength{\pgf at circ@res at temp}{\pgf at circ@res at up+0.5*\pind}
+    \pgfextractx{\pgf at circ@res at left}{\bodyleft}
+    \pgfextracty{\pgf at circ@res at down}{\bodyleft}
+    \ifpgfcirc at draw@input at leads
+        %input leads --- all the same for AND ports
+        \loop\ifnum\pgf at circ@count at a>0
+        \advance\pgf at circ@res at temp by -\pind
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at temp}}%
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\pinlen}{\pgf at circ@res at temp}}%
+        \advance\pgf at circ@count at a by -1
+        \repeat
+    \fi
+    \pgfusepath{draw}
+    %% Body. let's start from the top left
+    \pgfscope
+        \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+        \pgfpathmoveto{\pgfpoint{-8*\stdH/6.5}{\stdH}}
+        \pgfpathlineto{\pgfpoint{1.5*\stdH/6.5}{\stdH}}
+        \pgfpatharc{90}{-90}{\stdH}
+        \pgfpathlineto{\pgfpoint{-8*\stdH/6.5}{-\stdH}}
+        \pgfpathclose
+        \pgf at circ@draworfill
+        % rack now; skip if not needed.
+        % \typeout{WHAT\space \inputs\space \inners}
+        \ifnum\inputs>\inners
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{-\pgf at circ@res at down}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{-\pgf at circ@res at up}}
+            \pgfusepath{draw}
+        \fi
+    \endpgfscope
+}
+%
+% or/nor and xor/xnor are practically the same. Let factor out everything
+% the argument #1 is put just before the drawing of the inner pins
+% the argument #2 is put after the drawing of the body
+%
+\long\def\pgf at circ@ieeeport at orxor#1#2{%
+    \pgf at circ@count at a = \inputs\relax
+    \pgfmathsetlength{\pgf at circ@res at up}{(\inputs/2)*\pind} %top of the rack/port
+    \pgfmathsetlength{\pgf at circ@res at temp}{\pgf at circ@res at up+0.5*\pind}
+    \pgfextractx{\pgf at circ@res at left}{\bodyleft}
+    \pgfextracty{\pgf at circ@res at down}{\bodyleft}
+    % rack (extended) pins; they are the same for all the ports
+    % call K = (inputs-inner)/2, rounded up; pins on the rack are:
+    %      above: 1..K (included)
+    %      below: inputs-K..inputs
+    % Find the pins on the rack; they are 1...
+    \pgf at circ@count at b=\numexpr (\inputs - \inners)/2\relax       % =K; numexpr rounds up!
+    \pgf at circ@count at c=\numexpr \inputs - \pgf at circ@count at b +1 \relax % =inputs - K +1
+    \ifpgfcirc at draw@input at leads
+        %input leads --- for or ports
+        \loop\ifnum\pgf at circ@count at a>0
+        \pgfextractx{\pgf at circ@res at right}{\topleft}
+        \advance\pgf at circ@res at temp by -\pind
+        % this is the height; let's find the "right" position
+        \ifnum \pgf at circ@count at a > \pgf at circ@count at b \ifnum \pgf at circ@count at a < \pgf at circ@count at c
+            % inner pins
+            % \typeout{INNER\space\pgf at circ@count at a}
+            \pgfmathsetlength{\pgf at circ@res at right}{\pgf at circ@res at left-2*\stdH*(1-cos(atan(\pgf at circ@res at temp/(2*\stdH))))}
+            % hook for xor/xnor
+            #1
+        \fi\fi
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at temp}}%
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\pinlen}{\pgf at circ@res at temp}}%
+        \pgfusepath{draw}
+        \advance\pgf at circ@count at a by -1
+        \repeat
+    \fi
+    %% Body. let's start from the top left
+    \pgfscope
+        \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+        % it should start here, but with this trick the close comes out better.
+        % \pgfpathmoveto{\pgfpoint{-8*\stdH/6.5-2*\stdH*(1-cos(\pgf at circ@orangle))}{\stdH}}
+        \pgfpathmoveto{\pgfpoint{-8*\stdH/6.5}{\stdH}}
+        \pgfpathlineto{\pgfpoint{8*\stdH/6.5-2*\stdH*cos(\pgf at circ@orangle)}{\stdH}} %
+        \pgfpatharcto{2*\stdH}{2*\stdH}{0}{0}{0}{\pgfpoint{8*\stdH/6.5}{0pt}}
+        \pgfpatharcto{2*\stdH}{2*\stdH}{0}{0}{0}{\pgfpoint{8*\stdH/6.5-2*\stdH*cos(\pgf at circ@orangle)}{-\stdH}}
+        \pgfpathlineto{\pgfpoint{-8*\stdH/6.5-2*\stdH*(1-cos(\pgf at circ@orangle))}{-\stdH}}
+        %% this should be 2 and 2; but the round part is not a perfect circle that way
+        %% so the 2.15 is ajusted "by taste" to touch the anchors exactly.
+        \pgfpatharcto{2*\stdH}{2.2*\stdH}{0}{0}{1}{\pgfpoint{-8*\stdH/6.5-2*\stdH*(1-cos(\pgf at circ@orangle))}{\stdH}}
+        \pgfpathclose
+        \pgf at circ@draworfill
+        % hook for xor/xnor
+        #2
+        % rack now; skip if not needed.
+        % \typeout{WHAT\space \inputs\space \inners}
+        \ifnum\inputs>\inners
+            \pgfextractx{\pgf at circ@res at left}{\topleft}
+            \pgfextracty{\pgf at circ@res at down}{\topleft}
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{-\pgf at circ@res at down}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{-\pgf at circ@res at up}}
+            \pgfusepath{draw}
+        \fi
+    \endpgfscope
+}
+%
+% ieeestd "or" and "nor"
+%
+\pgfcircdeclareieeeportpair{or}{nor}{2}{%
+    \pgf at circ@ieeeport at orxor{}{}
+}
+\pgfcircdeclareieeeportpair{xor}{xnor}{3}{%
+    \pgf at circ@ieeeport at orxor{
+        \edef\@@tmp{\ctikzvalof{ieeestd ports/xor leads in}}
+        \ifnum\@@tmp=0\relax
+            % move pin start to the left to leave the xor gap free (not standard)
+            \advance\pgf at circ@res at right by -\xorbar
+        \fi
+        }{%
+        % add the xor/xnor bar
+        \pgfpathmoveto{\pgfpoint{-\xorbar-8*\stdH/6.5-2*\stdH*(1-cos(\pgf at circ@orangle))}{-\stdH}}
+        % see the comment on the main body about the 2.2
+        \pgfpatharcto{2*\stdH}{2.2*\stdH}{0}{0}{1}{\pgfpoint{-\xorbar -8*\stdH/6.5-2*\stdH*(1-cos(\pgf at circ@orangle))}{\stdH}}
+        \pgfusepath{draw}
+    }
+}
+%
+% Buffer and inverters
+%
+% #1: name
+% #2: polarity
+% #3: content
+\long\def\pgfcircdeclareieeebufferport#1#2#3{%
+    \pgfdeclareshape{ieeestd #1 port}%
+    {%
+        \savedmacro{\ctikzclass}{\edef\ctikzclass{logic ports}}
+        \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+        \savedmacro{\thisshape}{\def\thisshape{\tikz at fig@name}}
+        \saveddimen{\baselen}{%
+            \pgf at circ@ieeestd at baselen\pgf at x=\pgf at circ@res at temp
+        }
+        \saveddimen{\stdH}{% This is HALF the height of the inner port
+            \pgf at circ@ieeestd at stdH\pgf at x=\pgf at circ@res at temp
+        }
+        \saveddimen{\notdiameter}{
+            \pgf at circ@notradius\pgf at x=2\pgf at circ@res at temp
+        }
+        \saveddimen{\pinlen}{%
+            \pgf at circ@ieeestd at pinlen\pgf at x=\pgf at circ@res at temp
+        }
+        % anchors for the body (no pins included here)
+        % Notice that 0.8660254 is cos(30)
+        \savedanchor{\bodyleft}{% This DOES NOT take into account the pointy or/xor thing
+            \pgf at circ@ieeestd at stdH
+            \pgfmathsetlength{\pgf at x}{-0.8660254*\pgf at circ@res at temp}
+            \pgfmathsetlength{\pgf at y}{\pgf at circ@res at temp}
+        }
+        \savedanchor{\topleft}{%
+            \pgf at circ@ieeestd at stdH
+            \pgfmathsetlength{\pgf at x}{-0.8660254*\pgf at circ@res at temp}
+            \pgfmathsetlength{\pgf at y}{\pgf at circ@res at temp}
+        }
+        \savedanchor{\bodyright}{% This DOES NOT take into account the "NOT" circle
+            \pgf at circ@ieeestd at stdH
+            \pgfmathsetlength{\pgf at x}{0.8660254*\pgf at circ@res at temp}
+            \pgfmathsetlength{\pgf at y}{\pgf at circ@res at temp}
+        }
+        \savedanchor{\bottomright}{% This DOES take into account the "NOT" circle
+            \pgf at circ@notradius\pgf at circ@res at other=\pgf at circ@res at temp
+            \pgf at circ@ieeestd at stdH
+            % #2 is =1 if the port is a negated output one
+            \pgfmathsetlength{\pgf at x}{0.8660254*\pgf at circ@res at temp+#2*2*\pgf at circ@res at other}
+            \pgfmathsetlength{\pgf at y}{-\pgf at circ@res at temp}
+        }
+        % geographical anchors --- must be rectangulars!
+        \savedanchor{\northwest}{%
+            \pgf at circ@ieeestd at stdH
+            \pgfmathsetlength{\pgf at x}{-0.8660254*\pgf at circ@res at temp}
+            \pgfmathsetlength{\pgf at y}{\pgf at circ@res at temp}
+        }
+        \savedanchor{\southwest}{%
+            \pgf at circ@ieeestd at stdH
+            \pgfmathsetlength{\pgf at x}{-0.8660254*\pgf at circ@res at temp}
+            \pgfmathsetlength{\pgf at y}{-\pgf at circ@res at temp}
+        }
+        \savedanchor{\southeast}{%
+            \pgf at circ@ieeestd at stdH
+            \pgf at circ@res at up=\pgf at circ@res at temp
+            \pgf at circ@find at ieeeport@not at right{#2}
+            \pgf at x=\pgf at circ@res at right
+            \pgf at y=-\pgf at circ@res at up
+        }
+        \savedanchor{\northeast}{%
+            \pgf at circ@ieeestd at stdH
+            \pgf at circ@res at up=\pgf at circ@res at temp
+            \pgf at circ@find at ieeeport@not at right{#2}
+            \pgf at x=\pgf at circ@res at right
+            \pgf at y=\pgf at circ@res at up
+        }
+        \anchor{center}{\pgfpointorigin}
+        \anchor{text}{
+            \ifpgf at circ@center at text
+                \pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}
+            \else
+                \pgf at circ@ieeestd at stdH
+                \pgfpoint{-0.8660254*\pgf at circ@res at temp + \ctikzvalof{left text distance}}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}
+            \fi
+        }
+        % input anchors
+        \anchor{in}{\bodyleft\pgf at y=0pt\advance\pgf at x by-\pinlen}
+        \anchor{in 1}{\bodyleft\pgf at y=0pt\advance\pgf at x by-\pinlen}
+        \anchor{bin}{\bodyleft\pgf at y=0pt\relax}
+        \anchor{bin 1}{\bodyleft\pgf at y=0pt\relax}
+        % output anchors
+        \anchor{out}{%
+            \pgfextractx{\pgf at circ@res at other}{\bodyright}   %body border, without not ball
+            \advance\pgf at circ@res at other by\pinlen
+            \pgfextractx{\pgf at circ@res at temp}{\bottomright}   %body + ball border
+            \ifdim \pgf at circ@res at temp > \pgf at circ@res at other
+                \pgf at circ@res at other = \pgf at circ@res at temp % do not enter in the ball...
+            \fi
+            \pgf at x=\pgf at circ@res at other\pgf at y=0pt
+        }
+        \anchor{bout}{\bottomright\pgf at y=0pt}
+
+        \anchor{body right}{\bodyright\pgf at y=0pt}
+        \anchor{right}{\bottomright\pgf at y=0pt}
+        \anchor{body left}{\bodyleft\pgf at y=0pt}% central edge of the body
+        \anchor{left}{\bodyleft\pgf at y=0pt}
+        \anchor{up}{%
+            \bodyleft
+            \pgf at y=+0.5\pgf at y\pgf at x=0pt
+        }
+        \anchor{down}{%
+            \bodyleft
+            \pgf at y=-0.5\pgf at y\pgf at x=0pt
+        }
+        % this is for when it's used as a bipole
+        % we use the enclosing rectangle (see below)
+        \anchorborder{%
+            %% This (commented out) is the correct border anchor. But if we use the correct
+            %% border anchor there is no horizontal space for the label ;-) because
+            %% the triangle is too steep. So we will use a simple square border
+            %%
+            %% find the border anchor of a triangle (like a not port or an
+            %% amplifier) ---
+            %%
+            %%      -----^ up
+            %%     I --- |
+            %%     I    -|--
+            %%left I     |  ---    right
+            %% ----I-----|-------I-----
+            %%
+            %%
+            %\pgf at xa=\pgf at x
+            %% it's simmetrical w/ vertical side, use only positive y
+            %\pgfmathsetmacro{\@@switchy}{ifthenelse(\pgf at y>0,1,-1)}
+            %\pgfmathsetlength{\pgf at ya}{abs(\pgf at y)}
+            %\pgfextracty{\pgf at circ@res at up}{\bodyleft}
+            %\pgfextractx{\pgf at circ@res at left}{\bodyleft}
+            %\pgfextractx{\pgf at circ@res at right}{\bodyright}
+            %% limit angle for the left (vertical) side
+            %\pgfmathsetmacro{\@@phimax}{atan2(\pgf at circ@res at up,\pgf at circ@res at left)}
+            %\pgfmathsetmacro{\@@phi}{atan2(\pgf at ya,\pgf at xa)}
+            %\pgfmathsetmacro{\@@leftside}{ifthenelse(\@@phi>\@@phimax,1,0)}
+            %% find the border
+            %\ifnum\@@leftside>0
+            %    % vertical side
+            %    \pgfpointborderrectangle{\pgfpoint{\pgf at xa}{\pgf at ya}}
+            %        {\pgfpoint{-\pgf at circ@res at left}{\pgf at circ@res at up}}
+            %\else
+            %    % triangle upper line
+            %    \pgfpointintersectionoflines
+            %        {\pgfpointorigin}{\pgfqpoint{\pgf at xa}{\pgf at ya}}
+            %        {\pgfqpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\pgfqpoint{\pgf at circ@res at right}{0pt}}
+            %\fi
+            %% readjust y sign
+            %\pgf at y=\@@switchy\pgf at y
+            %
+            % this is the square border to position the path label with a bit of horizontal space
+            %
+            \pgf at xa=\pgf at x
+            \pgf at ya=\pgf at y
+            \pgfextracty{\pgf at circ@res at up}{\bodyleft}
+            \pgfextractx{\pgf at circ@res at left}{\bodyleft}
+            \pgfpointborderrectangle{\pgfpoint{\pgf at xa}{\pgf at ya}}
+                {\pgfpoint{-\pgf at circ@res at left}{\pgf at circ@res at up}}
+        }
+        % geographical anchors
+        \anchor{nw}{\northwest}
+        \anchor{ne}{\northeast}
+        \anchor{se}{\southeast}
+        \anchor{sw}{\southwest}
+        \anchor{north west}{\northwest}
+        \anchor{north east}{\northeast}
+        \anchor{south east}{\southeast}
+        \anchor{south west}{\southwest}
+        % over 0,0 even if asymmetric
+        % will break if the geocoords are not rectangular
+        \anchor{n}{\northwest\pgf at x=0pt\relax}
+        \anchor{e}{\northeast\pgf at y=0pt\relax}
+        \anchor{s}{\southwest\pgf at x=0pt\relax}
+        \anchor{w}{\northwest\pgf at y=0pt\relax}
+        \anchor{north}{\northwest\pgf at x=0pt\relax}
+        \anchor{east}{\northeast\pgf at y=0pt\relax}
+        \anchor{south}{\southwest\pgf at x=0pt\relax}
+        \anchor{west}{\northwest\pgf at y=0pt\relax}
+
+        \backgroundpath{
+            \pgfscope
+                \pgfsetcolor{\ctikzvalof{color}}
+                #3
+            \endpgfscope
+            % output lead:
+            \pgfextractx{\pgf at circ@res at right}{\bottomright} %body+ball border
+            \pgfextractx{\pgf at circ@res at other}{\bodyright}   %body border, without "not" ball
+            \advance\pgf at circ@res at other by \pinlen\relax
+            \ifdim \pgf at circ@res at other > \pgf at circ@res at right
+                \ifpgfcirc at draw@output at leads
+                    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+                    \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{0pt}}
+                    \pgfusepath{draw}
+                \fi
+            \fi
+            \ifnum #2=1\relax\pgfscope
+                \pgftransformshift{\pgfpoint{\pgf at circ@res at right}{0pt}}
+                \pgfnode{notcirc}{east}{}{\thisshape-not}{\pgfusepath{stroke}}
+            \endpgfscope\fi
+        }
+    }
+}
+
+%%% #1 direct name #2 negated name #3 drawing (without output)
+\long\def\pgfcircdeclareieeebufferportpair#1#2#3{%
+    \pgfcircdeclareieeebufferport{#1}{0}{#3}% direct
+    \pgfcircdeclareieeebufferport{#2}{1}{#3}% negated
+}
+
+\pgfcircdeclareieeebufferportpair{buffer}{not}{%
+    \pgfextractx{\pgf at circ@res at left}{\bodyleft}
+    \pgfextracty{\pgf at circ@res at up}{\bodyleft}
+    \pgfextractx{\pgf at circ@res at right}{\bodyright}
+    % \draw input pin
+    \ifpgfcirc at draw@input at leads
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\pinlen}{0pt}}
+        \pgfusepath{draw}
+    \fi
+    \pgfscope
+        \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{-\pgf at circ@res at up}}
+        \pgfpathclose
+        \pgf at circ@draworfill
+    \endpgfscope
+}
+
+\pgfcircdeclareieeebufferportpair{schmitt}{invschmitt}{%
+    \pgfextractx{\pgf at circ@res at left}{\bodyleft}
+    \pgfextracty{\pgf at circ@res at up}{\bodyleft}
+    \pgfextractx{\pgf at circ@res at right}{\bodyright}
+    % \draw input pin
+    \ifpgfcirc at draw@input at leads
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\pinlen}{0pt}}
+        \pgfusepath{draw}
+    \fi
+    \pgfscope
+        \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{-\pgf at circ@res at up}}
+        \pgfpathclose
+        \pgf at circ@draworfill
+    \endpgfscope
+    % draw schmitt symbol in normal line thickness
+    \pgfpathmoveto{\pgfpoint{0.75*\pgf at circ@res at left}{-0.25*\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{0.50*\pgf at circ@res at left}{-0.25*\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{0.50*\pgf at circ@res at left}{0.25*\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{0.00*\pgf at circ@res at left}{0.25*\pgf at circ@res at up}}
+    \pgfpathmoveto{\pgfpoint{0.25*\pgf at circ@res at left}{0.25*\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{0.25*\pgf at circ@res at left}{-0.25*\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{0.5*\pgf at circ@res at left}{-0.25*\pgf at circ@res at up}}
+    \pgfusepath{draw}
+}
+
+
+\pgfdeclareshape{schmitt symbol}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{logic ports}}
+    \anchor{center}{\pgfpointorigin}
+    \savedanchor\northwest{%
+        \pgf at circ@ieeestd at stdH
+        \pgf at y=\ctikzvalof{ieeestd ports/schmitt symbol size}\pgf at circ@res at temp
+        \pgf at x=-1.5\pgf at y
+    }
+    \anchor{center}{\pgf at y=0pt \pgf at x=0pt}
+    \anchor{east}{\northwest\pgf at y=0pt\pgf at x=-\pgf at x}
+    \anchor{e}{\northwest\pgf at y=0pt \pgf at x=-\pgf at x}
+    \anchor{west}{\northwest\pgf at y=0pt}
+    \anchor{w}{\northwest \pgf at y=0pt}
+    \anchor{south}{\northwest \pgf at x=0pt\pgf at y=-\pgf at y}
+    \anchor{s}{\northwest\pgf at x=0pt\pgf at y=-\pgf at y}
+    \anchor{north}{\northwest\pgf at x=0pt}
+    \anchor{n}{\northwest\pgf at x=0pt}
+    \anchor{south west}{\northwest\pgf at y=-\pgf at y}
+    \anchor{north east}{\northwest\pgf at x=-\pgf at x}
+    \anchor{north west}{\northwest}
+    \anchor{south east}{\northwest\pgf at x=-\pgf at x\pgf at y=-\pgf at y}
+    \backgroundpath{
+        \pgfscope
+            \pgfsetcolor{\ctikzvalof{color}}
+            \pgfextractx{\pgf at circ@res at left}{\northwest}
+            \pgfextracty{\pgf at circ@res at up}{\northwest}
+            \pgf at circ@res at left=0.7\pgf at circ@res at left
+            \pgf at circ@res at up=0.7\pgf at circ@res at up
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{-\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at left/3}{-\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at left/3}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{-\pgf at circ@res at left}{\pgf at circ@res at up}}
+            \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at left/3}{\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{-\pgf at circ@res at left/3}{-\pgf at circ@res at up}}
+            \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{-\pgf at circ@res at up}}
+            \pgfusepath{draw}
+        \endpgfscope
+    }
+}
+
+\pgfdeclareshape{notcirc}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{logic ports}}
+    \anchor{center}{\pgfpointorigin}
+    \savedanchor\northwest{%
+        \pgf at circ@notradius
+        \pgf at y=\pgf at circ@res at temp
+        \pgf at x=-\pgf at y
+    }
+    \anchor{center}{\pgf at y=0pt \pgf at x=0pt}
+    \anchor{right}{\northwest\pgf at y=0pt\pgf at x=-\pgf at x}
+    \anchor{east}{\northwest\pgf at y=0pt\pgf at x=-\pgf at x}
+    \anchor{e}{\northwest\pgf at y=0pt \pgf at x=-\pgf at x}
+    \anchor{left}{\northwest\pgf at y=0pt}
+    \anchor{west}{\northwest\pgf at y=0pt}
+    \anchor{w}{\northwest \pgf at y=0pt}
+    \anchor{south}{\northwest \pgf at x=0pt\pgf at y=-\pgf at y}
+    \anchor{s}{\northwest\pgf at x=0pt\pgf at y=-\pgf at y}
+    \anchor{north}{\northwest\pgf at x=0pt}
+    \anchor{n}{\northwest\pgf at x=0pt}
+    \anchor{south west}{\northwest\pgf at y=-\pgf at y}
+    \anchor{north east}{\northwest\pgf at x=-\pgf at x}
+    \anchor{north west}{\northwest}
+    \anchor{south east}{\northwest\pgf at x=-\pgf at x\pgf at y=-\pgf at y}
+    \anchorborder{
+        \pgf at circ@res at left=\pgf at x
+        \pgf at circ@res at up=\pgf at y
+        \northwest\pgf at circ@res at temp=\pgf at y
+        \pgfpointborderellipse{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}%
+        {\pgfpoint{\pgf at circ@res at temp}{\pgf at circ@res at temp}}
+    }
+    \behindforegroundpath{
+        \pgfscope
+            \northwest\pgf at circ@res at temp=\pgf at y
+            \pgfsetcolor{\ctikzvalof{color}}
+            \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+            \pgfpathcircle{\pgfpointorigin}{\pgf at circ@res at temp}
+            \ifx\tikz at fillcolor\pgfutil at empty
+                % set the default fill color to white
+                \pgfsetfillcolor{white}
+                % ...but override it if the class is defined!
+                \pgf at circ@setifdefinedfill{draw, fill}{draw, fill}
+            \else
+                \pgfsetfillcolor{\tikz at fillcolor}
+            \fi
+            \pgfsetfillopacity{\ctikzvalof{ieeestd ports/not radius fill}}% normally 1.0
+            \pgfusepath{draw,fill}
+        \endpgfscope
+    }
+}
+
+%%%% Transmission gates
+% tgates are only ieee style for now
+\tikzset{%
+    tgate/.style ={shape=ieee tgate},
+    double tgate/.style ={shape=ieee double tgate},
+}
+\ctikzset{tgate scale/.initial=0.7}
+% Buffer and inverters
+%
+% #1: name
+% #2: 1: one-not, 2:double-not
+% #3: content
+\long\def\pgfcircdeclareieeetgate#1#2#3{%
+    \pgfdeclareshape{ieee #1}%
+    {%
+        \savedmacro{\ctikzclass}{\edef\ctikzclass{logic ports}}
+        \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+        \savedmacro{\thisshape}{\def\thisshape{\tikz at fig@name}}
+        \saveddimen{\baselen}{%
+            \pgf at circ@ieeestd at baselen\pgf at x=\pgf at circ@res at temp
+        }
+        \saveddimen{\stdH}{% This is HALF the height of the inner port
+            \pgf at circ@ieeestd at stdH\pgf at x=\pgf at circ@res at temp
+        }
+        \saveddimen{\notdiameter}{
+            \pgf at circ@notradius\pgf at x=2\pgf at circ@res at temp
+        }
+        \saveddimen{\notradius}{
+            \pgf at circ@notradius\pgf at x=\pgf at circ@res at temp
+        }
+        \saveddimen{\pinlen}{%
+            \pgf at circ@ieeestd at pinlen\pgf at x=\pgf at circ@res at temp
+        }
+        % anchors for the body (no pins included here)
+        % Notice that 0.8660254 is cos(30)
+        \savedanchor{\bodyleft}{% This DOES NOT take into account the pointy or/xor thing
+            \pgf at circ@ieeestd at stdH
+            \pgfmathsetlength{\pgf at x}{-2*0.8660254*\pgf at circ@res at temp*\ctikzvalof{tgate scale}}
+            \pgfmathsetlength{\pgf at y}{#2*\pgf at circ@res at temp*\ctikzvalof{tgate scale}}
+        }
+        \savedanchor{\topleft}{%
+            \pgf at circ@ieeestd at stdH
+            \pgfmathsetlength{\pgf at x}{-2*0.8660254*\pgf at circ@res at temp*\ctikzvalof{tgate scale}}
+            \pgfmathsetlength{\pgf at y}{#2*\pgf at circ@res at temp*\ctikzvalof{tgate scale}}
+        }
+        \savedanchor{\bodyright}{%
+            \pgf at circ@ieeestd at stdH
+            \pgfmathsetlength{\pgf at x}{2*0.8660254*\pgf at circ@res at temp*\ctikzvalof{tgate scale}}
+            \pgfmathsetlength{\pgf at y}{#2*\pgf at circ@res at temp*\ctikzvalof{tgate scale}}
+        }
+        \savedanchor{\bottomright}{% Here it is the same as \bodyright
+            \pgf at circ@ieeestd at stdH
+            \pgfmathsetlength{\pgf at x}{2*0.8660254*\pgf at circ@res at temp*\ctikzvalof{tgate scale}}
+            \pgfmathsetlength{\pgf at y}{#2*\pgf at circ@res at temp*\ctikzvalof{tgate scale}}
+        }
+        % geographical anchors --- must be rectangulars!
+        \savedanchor{\northwest}{%
+            \pgf at circ@ieeestd at stdH
+            \pgfmathsetlength{\pgf at x}{-2*0.8660254*\pgf at circ@res at temp*\ctikzvalof{tgate scale}}
+            \pgfmathsetlength{\pgf at y}{#2*\pgf at circ@res at temp*\ctikzvalof{tgate scale}}
+        }
+        \savedanchor{\southwest}{%
+            \pgf at circ@ieeestd at stdH
+            \pgfmathsetlength{\pgf at x}{-2*0.8660254*\pgf at circ@res at temp*\ctikzvalof{tgate scale}}
+            \pgfmathsetlength{\pgf at y}{-#2*\pgf at circ@res at temp*\ctikzvalof{tgate scale}}
+        }
+        \savedanchor{\southeast}{%
+            \pgf at circ@ieeestd at stdH
+            \pgfmathsetlength{\pgf at x}{2*0.8660254*\pgf at circ@res at temp*\ctikzvalof{tgate scale}}
+            \pgfmathsetlength{\pgf at y}{-#2*\pgf at circ@res at temp*\ctikzvalof{tgate scale}}
+        }
+        \savedanchor{\northeast}{%
+            \pgf at circ@ieeestd at stdH
+            \pgfmathsetlength{\pgf at x}{2*0.8660254*\pgf at circ@res at temp*\ctikzvalof{tgate scale}}
+            \pgfmathsetlength{\pgf at y}{#2*\pgf at circ@res at temp*\ctikzvalof{tgate scale}}
+        }
+        \anchor{center}{\pgfpointorigin}
+        \anchor{text}{
+            \ifpgf at circ@center at text
+                \pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}
+            \else
+                \pgf at circ@ieeestd at stdH
+                \pgfpoint{-0.8660254*\pgf at circ@res at temp + \ctikzvalof{left text distance}}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}
+            \fi
+        }
+        % input anchors
+        \anchor{in}{\bodyleft\pgf at y=0pt\advance\pgf at x by-\pinlen}
+        \anchor{in 1}{\bodyleft\pgf at y=0pt\advance\pgf at x by-\pinlen}
+        \anchor{bin}{\bodyleft\pgf at y=0pt\relax}
+        \anchor{bin 1}{\bodyleft\pgf at y=0pt\relax}
+        % gates
+        \anchor{gate}{\bodyleft\pgf at circ@res at up=\pgf at y
+            \pgf at x=0pt\pgfmathsetlength{\pgf at y}{-(#2-1)*0.5*\pgf at circ@res at up-\pinlen}}
+        \anchor{bgate}{\bodyleft\pgf at circ@res at up=\pgf at y
+            \pgf at x=0pt\pgfmathsetlength{\pgf at y}{-(#2-1)*0.5*\pgf at circ@res at up}}
+        % gate (up) (2.1547 = 1+1/cos(30)
+        \anchor{notgate}{\bodyleft\pgf at circ@res at up=\pgf at y
+            \pgf at x=0pt\relax
+            \pgfmathsetlength{\pgf at circ@res at temp}{2.1547*\notradius}
+            \ifdim\pinlen>\pgf at circ@res at temp
+                \pgfmathsetlength{\pgf at y}{(#2-1)*0.5*\pgf at circ@res at up+\pinlen}
+            \else
+                \pgf at y=\pgf at circ@res at temp
+            \fi
+        }
+        \anchor{bnotgate}{\bodyleft\pgf at circ@res at up=\pgf at y
+            \pgf at x=0pt\pgfmathsetlength{\pgf at y}{(#2-1)*0.5*\pgf at circ@res at up+2.1547*\notradius}}
+
+        % output anchors
+        \anchor{out}{%
+            \pgfextractx{\pgf at circ@res at other}{\bodyright}   %body border, without not ball
+            \advance\pgf at circ@res at other by\pinlen
+            \pgfextractx{\pgf at circ@res at temp}{\bottomright}   %body + ball border
+            \ifdim \pgf at circ@res at temp > \pgf at circ@res at other
+                \pgf at circ@res at other = \pgf at circ@res at temp % do not enter in the ball...
+            \fi
+            \pgf at x=\pgf at circ@res at other\pgf at y=0pt
+        }
+        \anchor{bout}{\bottomright\pgf at y=0pt}
+
+        \anchor{body right}{\bodyright\pgf at y=0pt}
+        \anchor{right}{\bottomright\pgf at y=0pt}
+        \anchor{body left}{\bodyleft\pgf at y=0pt}% central edge of the body
+        \anchor{left}{\bodyleft\pgf at y=0pt}
+        \anchor{up}{%
+            \bodyleft
+            \pgf at x=0pt
+            \ifnum#2=1\relax
+                \pgf at y=0pt
+            \else
+                \pgf at y=.5\pgf at y
+            \fi
+            \advance\pgf at y by \notdiameter
+        }
+        \anchor{down}{%
+            \bodyleft
+            \pgf at x=0pt
+            \ifnum#2=1\relax
+                \pgf at y=0pt
+            \else
+                \pgf at y=-.5\pgf at y
+            \fi
+        }
+        % this is for when it's used as a bipole
+        % we use the enclosing rectangle (see below)
+        \anchorborder{%
+            %
+            % this is the square border to position the path label with a bit of horizontal space
+            %
+            \pgf at xa=\pgf at x
+            \pgf at ya=\pgf at y
+            \pgfextracty{\pgf at circ@res at up}{\bodyleft}
+            \pgfextractx{\pgf at circ@res at left}{\bodyleft}
+            \pgfpointborderrectangle{\pgfpoint{\pgf at xa}{\pgf at ya}}
+                {\pgfpoint{-\pgf at circ@res at left}{\pgf at circ@res at up}}
+        }
+        % geographical anchors
+        \anchor{nw}{\northwest}
+        \anchor{ne}{\northeast}
+        \anchor{se}{\southeast}
+        \anchor{sw}{\southwest}
+        \anchor{north west}{\northwest}
+        \anchor{north east}{\northeast}
+        \anchor{south east}{\southeast}
+        \anchor{south west}{\southwest}
+        % over 0,0 even if asymmetric
+        % will break if the geocoords are not rectangular
+        \anchor{n}{\northwest\pgf at x=0pt\relax}
+        \anchor{e}{\northeast\pgf at y=0pt\relax}
+        \anchor{s}{\southwest\pgf at x=0pt\relax}
+        \anchor{w}{\northwest\pgf at y=0pt\relax}
+        \anchor{north}{\northwest\pgf at x=0pt\relax}
+        \anchor{east}{\northeast\pgf at y=0pt\relax}
+        \anchor{south}{\southwest\pgf at x=0pt\relax}
+        \anchor{west}{\northwest\pgf at y=0pt\relax}
+
+        \backgroundpath{
+            \pgfscope
+                \pgfsetcolor{\ctikzvalof{color}}
+                \pgfextractx{\pgf at circ@res at left}{\bodyleft}
+                \pgfextracty{\pgf at circ@res at up}{\bodyleft}
+                \pgfextractx{\pgf at circ@res at right}{\bodyright}
+                % \draw input pins
+                \ifpgfcirc at draw@input at leads
+                    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+                    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left-\pinlen}{0pt}}
+                    % gate (down)
+                    \pgfpathmoveto{\pgfpoint{0pt}{-(#2-1)*0.5*\pgf at circ@res at up}}
+                    \pgfpathlineto{\pgfpoint{0pt}{-(#2-1)*0.5*\pgf at circ@res at up-\pinlen}}
+                    % gate (up) (2.1547 = 1+1/cos(30)
+                    \pgfmathsetlength{\pgf at circ@res at temp}{2.1547*\notradius}
+                    \ifdim\pinlen>\pgf at circ@res at temp
+                        \pgfpathmoveto{\pgfpoint{0pt}{(#2-1)*0.5*\pgf at circ@res at up+\pgf at circ@res at temp}}
+                        \pgfpathlineto{\pgfpoint{0pt}{(#2-1)*0.5*\pgf at circ@res at up+\pinlen}}
+                    \fi
+                    \pgfusepath{draw}
+                \fi
+                #3
+            \endpgfscope
+            % output lead:
+            \pgfextractx{\pgf at circ@res at right}{\bottomright} %body+ball border
+            \pgfextractx{\pgf at circ@res at other}{\bodyright}   %body border, without "not" ball
+            \advance\pgf at circ@res at other by \pinlen\relax
+            \ifdim \pgf at circ@res at other > \pgf at circ@res at right
+                \ifpgfcirc at draw@output at leads
+                    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+                    \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{0pt}}
+                    \pgfusepath{draw}
+                \fi
+            \fi
+        }
+    }
+}
+
+\pgfcircdeclareieeetgate{tgate}{1}{%
+    \pgfscope
+        \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0pt}{0pt}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{-\pgf at circ@res at up}}
+        \pgfpathclose
+        \pgf at circ@draworfill
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0pt}{0pt}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{-\pgf at circ@res at up}}
+        \pgfpathclose
+        \pgf at circ@draworfill
+    \endpgfscope
+    \pgfscope
+        % 1.1547 is 1/cos(30)
+        \pgftransformshift{\pgfpoint{0pt}{1.1547*\notradius}}
+        \pgfnode{notcirc}{center}{}{\thisshape-not}{\pgfusepath{stroke}}
+    \endpgfscope
+}
+
+\pgfcircdeclareieeetgate{double tgate}{2}{%
+    \pgfscope
+        \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0pt}{.5\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+        \pgfpathclose
+        \pgf at circ@draworfill
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0pt}{.5\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+        \pgfpathclose
+        \pgf at circ@draworfill
+        % bottom triangles
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{-\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0pt}{-.5\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+        \pgfpathclose
+        \pgf at circ@draworfill
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{-\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{0pt}{-.5\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+        \pgfpathclose
+        \pgf at circ@draworfill
+    \endpgfscope
+    \pgfscope
+        % 1.1547 is 1/cos(30)
+        \pgftransformshift{\pgfpoint{0pt}{.5*\pgf at circ@res at up+1.1547*\notradius}}
+        \pgfnode{notcirc}{center}{}{\thisshape-not}{\pgfusepath{stroke}}
+    \endpgfscope
+}
+
+%%%---------- close: tex/pgfcircmultipoles
+
+%%%%%%%%%%% Springe nach tex/pgfcirclabel
+%%%---------- open: tex/pgfcirclabel.tex
+% Copyright 2018-2020 by Romano Giannetti
+% Copyright 2015-2020 by Stefan Lindner
+% Copyright 2013-2020 by Stefan Erhardt
+% Copyright 2007-2020 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Bipole label positioning
+
+%% bipole labels and annotation extra style
+
+\ctikzset{bipole label style/.style={}}
+\tikzset{bipole label style/.code={
+        \ctikzset{bipole label style/.style={#1}}
+}}
+\tikzset{bipole label append style/.code={
+        \ctikzset{bipole label style/.append style={#1}}
+}}
+\ctikzset{bipole annotation style/.style={}}
+\tikzset{bipole annotation style/.code={
+        \ctikzset{bipole annotation style/.style={#1}}
+}}
+\tikzset{bipole annotation append style/.code={
+        \ctikzset{bipole annotation style/.append style={#1}}
+}}
+
+%% Options
+\ctikzset{label/.style = { l=#1 } }
+\ctikzset{l/.code = {
+        \pgfkeys{/tikz/circuitikz/bipole/label/name=#1}
+        \ctikzsetvalof{bipole/label/unit}{}
+        \ifpgf at circ@siunitx
+            \pgf at circ@handleSI{#1}
+            \ifpgf at circ@siunitx at res
+                \edef\pgf at temp{\pgf at circ@handleSI at val}
+                \pgfkeyslet{/tikz/circuitikz/bipole/label/name}{\pgf at temp}
+                \edef\pgf at temp{\pgf at circ@handleSI at unit}
+                \pgfkeyslet{/tikz/circuitikz/bipole/label/unit}{\pgf at temp}
+            \else
+        \fi
+        \else
+    \fi
+}}
+
+\ctikzset{label above/.code = {
+        l=#1,
+    \circuitikzbasekey/bipole/label/position=90 }
+}
+
+\ctikzset{l^/.style = {
+        l=#1,
+    \circuitikzbasekey/bipole/label/position=90 }
+}
+
+\ctikzset{label below/.code = {
+        l=#1,
+    \circuitikzbasekey/bipole/label/position=-90 }
+}
+
+\ctikzset{l_/.style = {
+        l=#1,
+    \circuitikzbasekey/bipole/label/position=-90 }
+}
+
+\ctikzset{annotation/.style = { a=#1 } }
+\ctikzset{a/.code = {
+    \pgfkeys{/tikz/circuitikz/bipole/annotation/name=#1}
+    \ctikzsetvalof{bipole/annotation/unit}{}
+    \ifpgf at circ@siunitx
+        \pgf at circ@handleSI{#1}
+        \ifpgf at circ@siunitx at res
+            \edef\pgf at temp{\pgf at circ@handleSI at val}
+            \pgfkeyslet{/tikz/circuitikz/bipole/annotation/name}{\pgf at temp}
+            \edef\pgf at temp{\pgf at circ@handleSI at unit}
+            \pgfkeyslet{/tikz/circuitikz/bipole/annotation/unit}{\pgf at temp}
+        \else
+        \fi
+    \else
+    \fi
+}}
+
+\ctikzset{annotation above/.code = {
+        a=#1,
+    \circuitikzbasekey/bipole/annotation/position=90 }
+}
+
+\ctikzset{a^/.style = {
+        a=#1,
+    \circuitikzbasekey/bipole/annotation/position=90 }
+}
+
+\ctikzset{annotation below/.code = {
+        a=#1,
+    \circuitikzbasekey/bipole/annotation/position=-90 }
+}
+\ctikzset{a_/.style = {
+        a=#1,
+    \circuitikzbasekey/bipole/annotation/position=-90 }
+}
+
+% This is to adjust spacing for the labels so that they are not cramped on components
+\def\pgf at circ@ls{.75ex} % labelspace to have just one point to change
+
+\def\pgf at circ@drawlabels#1{
+    \pgfextra{
+        % This function will be called with argument #1 equal
+        % to "label" or "annotation" form pgfcircpath.tex.
+        % pgf at circ@direction is the direction of the path,
+        % its value is set in pgfcircpath.tex
+        \pgfmathsubtract{\pgf at circ@direction}{90}
+        \pgfmathround{\pgfmathresult} % avoid precision loss errors
+        \edef\pgf at circ@labanc{\expandafter\pgf at circ@stripdecimals\pgfmathresult\pgf at nil}
+
+        \edef\pgf at circ@temp{\ctikzvalof{bipole/#1/position}}
+        \ifnum \pgf at circ@temp < 0
+                \pgfmathadd{\pgf at circ@labanc}{180}
+                \edef\pgf at circ@labanc{\expandafter\pgf at circ@stripdecimals\pgfmathresult\pgf at nil}
+        \fi
+        % \typeout{INI: TEMP\space\pgf at circ@temp\space LABANC\space\pgf at circ@labanc}
+        %
+        % normalize the angle values
+        %
+        \pgfmathmod{\pgf at circ@labanc}{360}
+        \edef\pgf at circ@labanc{\expandafter\pgf at circ@stripdecimals\pgfmathresult\pgf at nil}
+        %
+        \ifpgf at circuit@bipole at inverted
+                \pgfmathadd{\pgf at circ@temp}{180} %If shape is inverted, use opposite anchor
+                \edef\pgf at circ@temp{\expandafter\pgf at circ@stripdecimals\pgfmathresult\pgf at nil}
+        \fi
+        %
+        \ifnum \ctikzvalof{mirror value} = -1
+                \pgfmathadd{\pgf at circ@temp}{180} %If shape is mirrored, use opposite anchor
+                \edef\pgf at circ@temp{\expandafter\pgf at circ@stripdecimals\pgfmathresult\pgf at nil}
+        \fi
+        % \typeout{FIN: TEMP\space\pgf at circ@temp\space LABANC\space\pgf at circ@labanc}
+    }
+    %Firstly, place a coordinate directly at the edge of the shape
+    (\ctikzvalof{bipole/name}.\pgf at circ@temp) coordinate (pgfcirc at labelcoor)
+    %now decide, which labels should be drawn
+    \pgfextra{
+            \edef\pgf at temp{\ctikzvalof{label/align}}
+            \def\pgf at circ@temp{straight}
+    }
+    \ifx\pgf at temp\pgf at circ@temp %straight
+            \pgf at circ@drawreglabels{#1}
+    \else
+            \pgfextra{\def\pgf at circ@temp{rotate}}
+            \ifx\pgf at temp\pgf at circ@temp %rotate
+                    \pgf at circ@drawrotlabels{#1}
+            \else% smart
+                    \pgf at circ@drawsmartlabels{#1}
+            \fi
+    \fi
+}
+
+
+\def\pgf at circ@drawsmartlabels#1{
+    \pgfextra{
+        \pgfmathmod{\pgf at circ@direction}{90}
+        \edef\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgfmathresult\pgf at nil}
+    }
+    \ifnum \pgfcircmathresult > 20
+    \ifnum \pgfcircmathresult < 70
+        \pgf at circ@drawrotlabels{#1}
+    \else
+        \pgf at circ@drawreglabels{#1}
+    \fi
+    \else
+        \pgf at circ@drawreglabels{#1}
+    \fi
+    }
+
+
+\def\pgf at circ@drawrotlabels#1{
+    \pgfextra{
+        % scale the distances in function of zoom, so that they are not
+        % dependent on it but on font size. Thanks to @marmot
+        % https://tex.stackexchange.com/a/476018/38080
+        % the coeffcient is adjusted so that the distance is more or less
+        % the same for rotated labels and straight ones (although it will
+        % depend on the font, so it's not exact).
+        \pgfgettransformentries{\tmpa}{\tmpb}{\tmpc}{\tmpd}{\tmp}{\tmp}%
+        \pgfmathsetmacro{\myscale}{sqrt(abs(\tmpa*\tmpd-\tmpb*\tmpc))}% abs should not be needed
+        % \typeout{ROT\tmpa\space\tmpb\space\tmpc\space\tmpd\space\myscale}
+        \pgfmathsetlength\pgf at circ@res at temp{1.5*\pgf at circ@ls/\myscale}
+        \ifnum \ctikzvalof{bipole/#1/position}>0
+        %we need some more space for placement below, due to mid-anchor
+            \else % we do not have <= in \ifnum...
+                \pgf at circ@res at temp=1.5\pgf at circ@res at temp
+        \fi
+        %Calculate rotation of the label from direction and strip decimals
+        \pgfmathsetmacro{\pgfcirclabrot}{round(\pgf at circ@direction)}
+        \edef\pgfcirclabrot{\expandafter\pgf at circ@stripdecimals\pgfcirclabrot\pgf at nil}
+        % rotate the label at second or third quadrant:
+        \ifnum \pgfcirclabrot > 90 \ifnum \pgfcirclabrot < 270
+                \pgfmathsubtract{\pgf at circ@direction}{180}
+                \edef\pgfcirclabrot{\expandafter\pgf at circ@stripdecimals\pgfmathresult\pgf at nil}
+                %invert the space relationships due to rotated strings
+                \ifnum \ctikzvalof{bipole/#1/position}>0
+                        \pgf at circ@res at temp=1.5\pgf at circ@res at temp
+                \fi
+        \fi\fi
+        \pgfmathparse{\ctikzvalof{bipole/#1/position}>0?\pgf at circ@direction+90:\pgf at circ@direction-90}%
+        \edef\pgf at circ@labposangle{\expandafter\pgf at circ@stripdecimals\pgfmathresult\pgf at nil}%
+        \expandafter\xdef\csname pgfcirc@\pgfcirc at a@prefix#1-direction\endcsname{\pgfcirclabrot}%
+        \expandafter\xdef\csname pgfcirc@\pgfcirc at a@prefix-#1-anchor\endcsname{mid}%
+    }
+    % reset cm is not working correctly here
+    (pgfcirc at labelcoor)++(\pgf at circ@labposangle:\the\pgf at circ@res at temp) coordinate(pgfcirc at labelcoor)
+    node[anchor=mid, rotate=\pgfcirclabrot, \circuitikzbasekey/bipole #1 style]
+    (\ctikzvalof{bipole/name}#1){\pgf at circ@finallabels{#1}}
+}
+
+\def\pgf at circ@drawreglabels#1{
+    %Now calculate all shape positions
+    %Use mid-anchor at x-axis and base-anchor at y-axis, respectively.
+    %All points between will be addressed by angled-anchors:
+    \pgfextra{
+        % scale ex-distance to make it independent on scale
+        % thanks @marmot see https://tex.stackexchange.com/a/476018/38080
+        \pgfgettransformentries{\tmpa}{\tmpb}{\tmpc}{\tmpd}{\tmp}{\tmp}%
+        \pgfmathsetmacro{\myscale}{sqrt(abs(\tmpa*\tmpd-\tmpb*\tmpc))}% abs should not be needed
+        % \typeout{ROT\tmpa\space\tmpb\space\tmpc\space\tmpd\space\myscale}
+        \pgfmathsetlength\pgf at circ@res at temp{\pgf at circ@ls/\myscale}
+        \pgfmathadd{\pgf at circ@labanc}{90}
+        \pgfmathround{\pgfmathresult}
+        \def\pgf at circ@labanctext{\pgf at circ@labanc}
+        \edef\pgf at circ@temp{\expandafter\pgf at circ@stripdecimals\pgfmathresult\pgf at nil}
+        \pgfmathparse{mod(\pgf at circ@temp,180)>135?mod(\pgf at circ@temp,180)-180:mod(\pgf at circ@temp,180)}
+        \edef\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgfmathresult\pgf at nil}
+    }
+    %Values around 90 are at both y-axis
+    \ifnum \pgfcircmathresult > 84 \ifnum \pgfcircmathresult< 96
+        \pgfextra{\edef\pgf at circ@labpos{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}}
+        \ifnum \pgf at circ@labpos > 180
+            \ifnum \ctikzvalof{bipole/#1/position} > 0
+                    \pgfextra{\def\pgf at circ@labanctext{mid west}}
+            \else
+                    \pgfextra{\def\pgf at circ@labanctext{mid east}}
+            \fi
+        \else
+            \ifnum \ctikzvalof{bipole/#1/position} > 0
+                    \pgfextra{\def\pgf at circ@labanctext{mid east}}
+            \else
+                    \pgfextra{\def\pgf at circ@labanctext{mid west}}
+            \fi
+        \fi
+    \fi\fi
+    %Values between -5 and 5 are at pos /neg x-axis
+        \ifnum \pgfcircmathresult <6 \ifnum \pgfcircmathresult > -6
+            \ifnum \ctikzvalof{bipole/#1/position} < 0
+                \ifnum \pgf at circ@labanc > 90
+                    % using base coordinate instead of south to naturally align
+                    % symbols with descendants; but this invalidate the effect of
+                    % the inner sep, so recover it by shifting the anchor
+                    % reset cm is not working sometime, use @marmot solution
+                    % see https://tex.stackexchange.com/a/476018/38080
+                    (pgfcirc at labelcoor) ++(-\pgf at circ@labanc:\pgf at circ@res at temp) coordinate(pgfcirc at labelcoor)
+                    \pgfextra{\def\pgf at circ@labanctext{base}}%base
+                \else
+                    \pgfextra{\def\pgf at circ@labanctext{north}}%north
+                \fi
+             \else
+                \ifnum \pgf at circ@labanc < 90
+                    % shift, as above
+                    (pgfcirc at labelcoor) ++(-\pgf at circ@labanc:\pgf at circ@res at temp) coordinate(pgfcirc at labelcoor)
+                    \pgfextra{\def\pgf at circ@labanctext{base}}%base
+                \else
+                    \ifnum \pgf at circ@labanc > 180
+                        % this shouldn't  happen, but somehow it does (270 degree anchors)
+                        % shift, as above
+                        (pgfcirc at labelcoor) ++(-\pgf at circ@labanc:\pgf at circ@res at temp) coordinate(pgfcirc at labelcoor)
+                         \pgfextra{\def\pgf at circ@labanctext{base}}%base
+                    \else
+                      \pgfextra{\def\pgf at circ@labanctext{north}}%north
+                   \fi
+                \fi
+            \fi
+        \fi\fi
+    \pgfextra{%
+        \expandafter\xdef\csname pgfcirc@\pgfcirc at a@prefix#1-direction\endcsname{0}%
+        \expandafter\xdef\csname pgfcirc@\pgfcirc at a@prefix-#1-anchor\endcsname{\pgf at circ@labanctext}%
+    }
+    (pgfcirc at labelcoor) node[anchor=\pgf at circ@labanctext,
+    inner sep=0.5\pgf at circ@res at temp, outer sep=0pt, \circuitikzbasekey/bipole #1 style,
+        ](\ctikzvalof{bipole/name}#1){\strut\pgf at circ@finallabels{#1}%
+    }
+}
+
+\def\pgf at circ@finallabels#1{%
+    \edef\pgf at temp{}%
+    \edef\pgf at circ@temp{\ctikzvalof{bipole/#1/unit}}%
+    \ifx\pgf at temp\pgf at circ@temp%
+        \ctikzvalof{bipole/#1/name}%
+    \else%
+        $\SI{\ctikzvalof{bipole/#1/name}}{\ctikzvalof{bipole/#1/unit}}$%
+    \fi%
+}
+
+
+%%%% Stacked labels
+%
+% stacked labels by Romano Giannetti romano at rgtti.com
+% heavily based on Claudo Fiandrinos's https://tex.stackexchange.com/a/65792/38080
+% \expandafter trick inspired by Matthew Leingang's https://tex.stackexchange.com/a/12272/38080
+%
+% labels are in a tabular, globally aligned:
+%        vertically with key l2 valign (default c)
+%        c: center t: top b: bottom
+%        horizontally with key l2 align (default l)
+%        l: left c: centered r: right
+% you can switch sides using l2_=... and l2^=...
+% syntax is l2_ = line1 and line2 (same for l2^)
+%
+\ctikzset{%
+    l2 valign/.store in=\ltwo at valign, l2 valign=c,
+    l2 halign/.store in=\ltwo at halign, l2 halign=l,
+}
+\ctikzset{l2base/.code n args={2}{
+  \pgfkeys{/tikz/circuitikz/bipole/label/name=%
+        \bgroup
+        \setlength{\tabcolsep}{2pt}%
+        \def\ltwo at tabu{\tabular[\ltwo at valign]}%
+        \expandafter\ltwo at tabu\expandafter{\ltwo at halign}%
+        #1\\ #2%
+        \endtabular
+        \egroup
+    }%
+    \ctikzsetvalof{bipole/label/unit}{}
+    \ifpgf at circ@siunitx
+        \pgf at circ@handleSI{#2}
+        \ifpgf at circ@siunitx at res
+            \edef\pgf at temp{\pgf at circ@handleSI at val}
+            \pgfkeyslet{/tikz/circuitikz/bipole/label/name}{\pgf at temp}
+            \edef\pgf at temp{\pgf at circ@handleSI at unit}
+            \pgfkeyslet{/tikz/circuitikz/bipole/label/unit}{\pgf at temp}
+        \else
+        \fi
+    \else
+    \fi
+}}
+\ctikzset{l2/.style args={#1 and #2}{
+        l2base={#1}{#2},
+    \circuitikzbasekey/bipole/label/position=90 }
+}
+\ctikzset{l2 above/.style args={#1 and #2}{
+        l2base={#1}{#2},
+    \circuitikzbasekey/bipole/label/position=90 }
+}
+\ctikzset{l2^/.style args={#1 and #2}{
+        l2base={#1}{#2},
+    \circuitikzbasekey/bipole/label/position=90 }
+}
+\ctikzset{l2 below/.style args={#1 and #2}{
+        l2base={#1}{#2},
+    \circuitikzbasekey/bipole/label/position=-90 }
+}
+\ctikzset{l2_/.style args={#1 and #2}{
+        l2base={#1}{#2},
+    \circuitikzbasekey/bipole/label/position=-90 }
+}
+
+%%%---------- close: tex/pgfcirclabel
+%%%%%%%%%%% Springe nach tex/pgfcircvoltage
+%%%---------- open: tex/pgfcircvoltage.tex
+% Copyright 2018-2020 by Romano Giannetti
+% Copyright 2015-2020 by Stefan Lindner
+% Copyright 2013-2020 by Stefan Erhardt
+% Copyright 2007-2020 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%  Voltage management
+
+%% styles
+\ctikzset{bipole voltage style/.style={}}
+\tikzset{bipole voltage style/.code={
+        \ctikzset{bipole voltage style/.style={#1}}
+}}
+\tikzset{bipole voltage append style/.code={
+        \ctikzset{bipole voltage style/.append style={#1}}
+}}
+
+\ctikzset{v^>/.style = {
+        v = #1,
+        \circuitikzbasekey/bipole/voltage/direction = forward,
+        \circuitikzbasekey/bipole/voltage/position = above
+    }
+}
+
+\ctikzset{v^</.style = {
+        v = #1,
+        \circuitikzbasekey/bipole/voltage/direction = backward,
+        \circuitikzbasekey/bipole/voltage/position = above
+    }
+}
+
+\ctikzset{v_>/.style = {
+        v = #1,
+        \circuitikzbasekey/bipole/voltage/direction = forward,
+        \circuitikzbasekey/bipole/voltage/position = below
+    }
+}
+
+\ctikzset{v_</.style = {
+        v = #1,
+        \circuitikzbasekey/bipole/voltage/direction = backward,
+        \circuitikzbasekey/bipole/voltage/position = below
+    }
+}
+
+\ctikzset{v_/.style = {v = #1, \circuitikzbasekey/bipole/voltage/position = below} }
+\ctikzset{v^/.style = {v = #1, \circuitikzbasekey/bipole/voltage/position  = above} }
+\ctikzset{v>/.style = {v = #1, \circuitikzbasekey/bipole/voltage/direction = forward} }
+\ctikzset{v</.style = {v = #1, \circuitikzbasekey/bipole/voltage/direction = backward} }
+
+% Default position varies whether the component is a voltage source
+% or not
+\ctikzset{v/.code = {
+        \pgfcirc at has@vtrue
+        \ifpgf at circuit@bipole at isvoltage
+            \pgfkeys{\circuitikzbasekey/bipole/voltage/position=above,
+            \circuitikzbasekey/bipole/voltage/direction=forward}
+        \else
+            \ifpgf at circ@oldvoltagedirection
+                \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+                \circuitikzbasekey/bipole/voltage/direction=backward}
+            \else
+                \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+                \circuitikzbasekey/bipole/voltage/direction=forward}
+            \fi
+        \fi
+        \ifpgf at circ@oldvoltagedirection
+            \ifpgf at circuit@bipole at iscurrent\ifpgf at circ@fixbatteries
+                \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+                \circuitikzbasekey/bipole/voltage/direction=forward}
+        \fi\fi
+        \else
+        \ifpgf at circuit@bipole at iscurrent
+            \ifpgf at circuit@bipole at current@backward
+                \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+                \circuitikzbasekey/bipole/voltage/direction=forward}
+            \else
+                \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+                \circuitikzbasekey/bipole/voltage/direction=backward}
+            \fi\fi\fi
+            \pgfkeys{/tikz/circuitikz/bipole/voltage/label/name=#1}
+            \ctikzsetvalof{bipole/voltage/label/unit}{}
+            \ifpgf at circ@siunitx
+                \pgf at circ@handleSI{#1}
+                \ifpgf at circ@siunitx at res
+                    \edef\pgf at temp{\pgf at circ@handleSI at val}
+                    \pgfkeyslet{/tikz/circuitikz/bipole/voltage/label/name}{\pgf at temp}
+                    \edef\pgf at temp{\pgf at circ@handleSI at unit}
+                    \pgfkeyslet{/tikz/circuitikz/bipole/voltage/label/unit}{\pgf at temp}
+                \else
+            \fi
+            \else
+        \fi
+    }
+}
+
+% american voltage font selection and symbol definition
+% the default font command is {} --- nothing
+\def\pgf at circ@avfont{\ctikzvalof{voltage/american font}}
+%
+% plus and minus symbols (default is $+$ and $-$, see pgfcirc.defines.tex)
+%
+\def\pgf at circ@avplus{\ctikzvalof{voltage/american plus}}
+\def\pgf at circ@avminus{\ctikzvalof{voltage/american minus}}
+
+%%
+\def\setscaledRlenforclass{%
+    \csname pgf at sh@ma@\ctikzvalof{bipole/name}\endcsname
+    \ifdefined\ctikzclass
+        \edef\pgf at temp{/tikz/circuitikz/\ctikzclass/scale}
+        \pgfkeysifdefined{\pgf at temp}
+            {\pgf at circ@scaled at Rlen=\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            {\pgf at circ@scaled at Rlen=\pgf at circ@Rlen}
+    \else
+        \pgf at circ@scaled at Rlen=\pgf at circ@Rlen
+    \fi
+}
+
+%% Output routine for generic bipoles
+% put this to true to see the voltage label coordinate anchors
+\newif\ifpgf at circ@debugv\pgf at circ@debugvfalse
+
+\def\pgf at circ@drawvoltagegeneric{
+    \pgfextra{
+        % \typeout{KIND:\ctikzvalof{bipole/kind}\space RLEN:\the\pgf at circ@Rlen\space SCALED:\the\pgf at circ@scaled at Rlen}
+        \ifnum \ctikzvalof{mirror value}=-1
+            \ifpgf at circuit@bipole at inverted
+                \def\distfromline{\ctikzvalof{voltage/distance from line}\pgf at circ@scaled at Rlen}
+            \else
+                \def\distfromline{-\ctikzvalof{voltage/distance from line}\pgf at circ@scaled at Rlen}
+            \fi
+        \else
+            \ifpgf at circuit@bipole at inverted
+                    \def\distfromline{-\ctikzvalof{voltage/distance from line}\pgf at circ@scaled at Rlen}
+                \else
+                    \def\distfromline{\ctikzvalof{voltage/distance from line}\pgf at circ@scaled at Rlen}
+            \fi
+        \fi
+        \ifpgf at circuit@bipole at voltage@below
+            \def\pgf at circ@voltage at angle{90}
+        \else
+            \def\pgf at circ@voltage at angle{-90}
+        \fi
+        \edef\pgf at temp{/tikz/circuitikz/bipoles/\ctikzvalof{bipole/kind}/voltage/distance from node}
+        \pgfkeysifdefined{\pgf at temp}
+            { \edef\distancefromnode{\ctikzvalof{bipoles/\ctikzvalof{bipole/kind}/voltage/distance from node}} }
+            { \edef\distancefromnode{\ctikzvalof{voltage/distance from node}} }
+        \edef\pgf at temp{/tikz/circuitikz/bipoles/\ctikzvalof{bipole/kind}/voltage/bump b}
+        \pgfkeysifdefined{\pgf at temp}
+            { \edef\bumpb{\ctikzvalof{bipoles/\ctikzvalof{bipole/kind}/voltage/bump b}} }
+            { \edef\bumpb{\ctikzvalof{voltage/bump b}} }
+        \edef\shiftv{\ctikzvalof{voltage/shift}}
+        % additional per-bipole voltage shift (internal)
+        \edef\pgf at temp{/tikz/circuitikz/bipoles/\ctikzvalof{bipole/kind}/voltage/additional shift}
+        \pgfkeysifdefined{\pgf at temp}
+        {
+            \edef\addvshift{\ctikzvalof{bipoles/\ctikzvalof{bipole/kind}/voltage/additional shift}}
+        }
+        {
+            \edef\addvshift{0}
+        }
+        \newdimen{\absvshift}
+        \pgfmathsetlength{\absvshift}{(1+\shiftv+\addvshift)*(\distfromline)}
+        % reset anchor if american and open
+        \ifpgf at circuit@europeanvoltage
+        \else
+            \ifx\@@kind\@@open
+                \def\pgf at circ@bipole at voltage@label at anchor{center}
+            \fi
+        \fi
+        \ifpgf at circuit@bipole at voltage@raised
+            \def\pgf at circ@bipole at voltage@label at anchor{center}
+            \pgfmathsetlength{\absvshift}{\absvshift+sign(\absvshift)*height{"Q"}} % with the current font.
+        \fi
+    }
+    % %\pgf at circ@Rlen/\ctikzvalof{current arrow scale} is equal to the length of the currarrow
+    %absolute move, minimum space is length of arrowhead
+    coordinate (pgfcirc at midtmp) at ($(\tikztostart) ! \pgf at circ@Rlen/\ctikzvalof{current arrow scale} ! (pgfcirc at anchorstartnode)$)
+    coordinate (pgfcirc at midtmp) at ($(pgfcirc at midtmp) ! \distancefromnode ! (pgfcirc at anchorstartnode)$)
+    coordinate (pgfcirc at Vfrom@flat) at (pgfcirc at midtmp)
+    %absolute move, minimum space is length of arrowhead
+    coordinate (pgfcirc at midtmp) at ($(\tikztotarget) ! \pgf at circ@Rlen/\ctikzvalof{current arrow scale} ! (pgfcirc at anchorendnode)$)
+    coordinate (pgfcirc at midtmp) at ($(pgfcirc at midtmp) ! \distancefromnode ! (pgfcirc at anchorendnode)$)
+    coordinate (pgfcirc at Vto@flat) at (pgfcirc at midtmp)
+    coordinate (pgfcirc at mid) at ($(pgfcirc at Vfrom@flat)!0.5!(pgfcirc at Vto@flat)$)
+
+    \ifpgf at circuit@bipole at voltage@below
+    % see comments for the "above" part (similar)
+        \ifpgf at circuit@europeanvoltage
+            \ifpgf at circuit@bipole at voltage@straight
+                coordinate (pgfcirc at bottom) at (\ctikzvalof{bipole/name}.-90)
+                coordinate (pgfcirc at Vto1) at ($(pgfcirc at mid)+(pgfcirc at bottom)-(pgfcirc at Vfrom@flat)$)
+                coordinate (pgfcirc at Vfrom1) at ($(pgfcirc at mid)+(pgfcirc at bottom)-(pgfcirc at Vto@flat)$)
+                coordinate (\pgfcirc at a@prefix-Vto)   at ($(pgfcirc at Vto1) ! \absvshift!90 :  (pgfcirc at Vfrom1)$)
+                coordinate (\pgfcirc at a@prefix-Vfrom) at ($(pgfcirc at Vfrom1) ! \absvshift!-90 :  (pgfcirc at Vto1)$)
+                coordinate (\pgfcirc at a@prefix-Vlab) at ($(\pgfcirc at a@prefix-Vto)!0.5!(\pgfcirc at a@prefix-Vfrom) $)
+                coordinate (pgfcirc at Vdir) at (\pgfcirc at a@prefix-Vto)
+            \else
+                coordinate (\pgfcirc at a@prefix-Vto)   at ($(pgfcirc at Vto@flat) ! \absvshift!90 :  (pgfcirc at anchorendnode)$)
+                coordinate (\pgfcirc at a@prefix-Vfrom) at ($(pgfcirc at Vfrom@flat) ! \absvshift!-90 :  (pgfcirc at anchorstartnode)$)
+                coordinate (pgfcirc at Vcont1t) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.-110)$)
+                coordinate (pgfcirc at Vcont2t) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.-70)$)
+                coordinate (\pgfcirc at a@prefix-Vcont1) at ($(pgfcirc at Vcont1t) ! -\absvshift!90 : (pgfcirc at Vcont2t)$)
+                coordinate (\pgfcirc at a@prefix-Vcont2) at ($(pgfcirc at Vcont2t) ! -\absvshift!-90 : (pgfcirc at Vcont1t)$)
+                coordinate (\pgfcirc at a@prefix-Vlab) at ($(\pgfcirc at a@prefix-Vcont2)!0.5!(\pgfcirc at a@prefix-Vcont1)$)
+                coordinate (pgfcirc at Vdir) at (\pgfcirc at a@prefix-Vcont2)
+            \fi
+        \else
+            % we are in case of american here
+            coordinate (\pgfcirc at a@prefix-Vto) at ($(pgfcirc at Vto@flat) ! \absvshift!90 :  (pgfcirc at anchorendnode)$)
+            coordinate (\pgfcirc at a@prefix-Vfrom) at ($(pgfcirc at Vfrom@flat) ! \absvshift!-90 :  (pgfcirc at anchorstartnode)$)
+            coordinate (pgfcirc at bottom) at (\ctikzvalof{bipole/name}.-90)
+            coordinate (pgfcirc at Vdir0) at ($(pgfcirc at mid)+(pgfcirc at bottom)-(pgfcirc at Vfrom@flat)$)
+            coordinate (\pgfcirc at a@prefix-Vlab) at ($(pgfcirc at bottom) !  \absvshift!-90 : (pgfcirc at Vdir0)$)
+            coordinate (pgfcirc at Vdir) at ($(pgfcirc at mid)+(\pgfcirc at a@prefix-Vlab)-(pgfcirc at Vfrom@flat)$)
+            \ifpgf at circuit@bipole at voltage@raised
+                % move the from and to up to the level of Vlab
+                coordinate (\pgfcirc at a@prefix-Vto) at ($(\pgfcirc at a@prefix-Vlab)+(pgfcirc at Vto@flat)-(pgfcirc at mid)$)
+                coordinate (\pgfcirc at a@prefix-Vfrom) at ($(\pgfcirc at a@prefix-Vlab)+(pgfcirc at Vfrom@flat)-(pgfcirc at mid)$)
+            \fi
+        \fi
+    \else
+        \ifpgf at circuit@europeanvoltage
+            \ifpgf at circuit@bipole at voltage@straight
+                coordinate (pgfcirc at top) at (\ctikzvalof{bipole/name}.90)
+                % move parallel to the component line at pgfcirc at top distance
+                coordinate (pgfcirc at Vto1) at ($(pgfcirc at mid)+(pgfcirc at top)-(pgfcirc at Vfrom@flat)$)
+                coordinate (pgfcirc at Vfrom1) at ($(pgfcirc at mid)+(pgfcirc at top)-(pgfcirc at Vto@flat)$)
+                % add the extra distance
+                coordinate (\pgfcirc at a@prefix-Vto)   at ($(pgfcirc at Vto1) ! \absvshift!-90 :  (pgfcirc at Vfrom1)$)
+                coordinate (\pgfcirc at a@prefix-Vfrom) at ($(pgfcirc at Vfrom1) ! \absvshift!90 :  (pgfcirc at Vto1)$)
+                coordinate (\pgfcirc at a@prefix-Vlab) at ($(\pgfcirc at a@prefix-Vto)!0.5!(\pgfcirc at a@prefix-Vfrom) $)
+                % direction line to shift the label later
+                coordinate (pgfcirc at Vdir) at (\pgfcirc at a@prefix-Vto)
+            \else
+                % european voltages here
+                coordinate (\pgfcirc at a@prefix-Vto) at ($(pgfcirc at Vto@flat) ! -\absvshift!90 :  (pgfcirc at anchorendnode)$)
+                coordinate (\pgfcirc at a@prefix-Vfrom) at ($(pgfcirc at Vfrom@flat) ! -\absvshift!-90 :  (pgfcirc at anchorstartnode)$)
+                % identify the two control points for the "arc" of the voltage
+                coordinate (pgfcirc at Vcont1t) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.110)$)
+                coordinate (pgfcirc at Vcont2t) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.70)$)
+                % and shift them a bit
+                coordinate (\pgfcirc at a@prefix-Vcont1) at ($(pgfcirc at Vcont1t) ! \absvshift!90 : (pgfcirc at Vcont2t)$)
+                coordinate (\pgfcirc at a@prefix-Vcont2) at ($(pgfcirc at Vcont2t) ! \absvshift!-90 : (pgfcirc at Vcont1t)$)
+                coordinate (\pgfcirc at a@prefix-Vlab) at ($(\pgfcirc at a@prefix-Vcont2)!0.5!(\pgfcirc at a@prefix-Vcont1)$)
+                % direction line to shift the label later
+                coordinate (pgfcirc at Vdir) at (\pgfcirc at a@prefix-Vcont2)
+            \fi
+        \else
+            % we are in case of american here
+            coordinate (\pgfcirc at a@prefix-Vto) at ($(pgfcirc at Vto@flat) ! \absvshift!-90 :  (pgfcirc at anchorendnode)$)
+            coordinate (\pgfcirc at a@prefix-Vfrom) at ($(pgfcirc at Vfrom@flat) ! \absvshift!90 :  (pgfcirc at anchorstartnode)$)
+            coordinate (pgfcirc at top) at (\ctikzvalof{bipole/name}.90)
+            % move parallel to the component line
+            coordinate (pgfcirc at Vdir0) at ($(pgfcirc at mid)+(pgfcirc at top)-(pgfcirc at Vfrom@flat)$)
+            % and add the extra distance
+            coordinate (\pgfcirc at a@prefix-Vlab) at ($(pgfcirc at top) !  \absvshift!90 : (pgfcirc at Vdir0)$)
+            coordinate (pgfcirc at Vdir) at ($(pgfcirc at mid)+(\pgfcirc at a@prefix-Vlab)-(pgfcirc at Vfrom@flat)$)
+            \ifpgf at circuit@bipole at voltage@raised
+                % move the from and to up to the level of Vlab
+                coordinate (\pgfcirc at a@prefix-Vto) at ($(\pgfcirc at a@prefix-Vlab)+(pgfcirc at Vto@flat)-(pgfcirc at mid)$)
+                coordinate (\pgfcirc at a@prefix-Vfrom) at ($(\pgfcirc at a@prefix-Vlab)+(pgfcirc at Vfrom@flat)-(pgfcirc at mid)$)
+            \fi
+        \fi
+    \fi
+    \ifx\@@kind\@@open
+        coordinate (\pgfcirc at a@prefix-Vto) at (pgfcirc at Vto@flat)
+        coordinate (\pgfcirc at a@prefix-Vfrom) at (pgfcirc at Vfrom@flat)
+    \fi
+    \ifpgf at circ@debugv
+        node [ocirc, fill=red] at (pgfcirc at anchorstartnode) {}
+        node [ocirc, fill=blue] at (pgfcirc at anchorendnode) {}
+        node [ocirc, fill=green] at (\pgfcirc at a@prefix-Vto) {}
+        node [ocirc, fill=yellow] at (\pgfcirc at a@prefix-Vfrom) {}
+        node [odiamondpole, fill=green!50!black] at (pgfcirc at Vto@flat) {}
+        node [odiamondpole, fill=orange] at (pgfcirc at Vfrom@flat) {}
+        \ifpgf at circuit@europeanvoltage
+            \ifpgf at circuit@bipole at voltage@straight
+            \else
+                node [osquarepole, fill=red] at (\pgfcirc at a@prefix-Vcont1) {}
+                node [osquarepole, fill=blue] at (\pgfcirc at a@prefix-Vcont2) {}
+            \fi
+        \fi
+    \fi
+
+    %
+    % Now we draw the voltage things (only if not empty --- in which case we have been
+    % called just to set the anchors)
+    %
+    \pgf at circ@ifkeyempty{bipole/voltage/label/name}\else
+    \ifpgf at circuit@europeanvoltage
+        \ifpgf at circuit@bipole at voltage@straight
+            \ifpgf at circuit@bipole at voltage@backward
+                (\pgfcirc at a@prefix-Vto) --(\pgfcirc at a@prefix-Vfrom) node[currarrow, sloped,  allow upside down, pos=1,anchor=tip] {}
+            \else
+                (\pgfcirc at a@prefix-Vfrom) --(\pgfcirc at a@prefix-Vto) node[currarrow, sloped,  allow upside down, pos=1,anchor=tip] {}
+            \fi
+        \else
+            \ifpgf at circuit@bipole at voltage@backward
+                (\pgfcirc at a@prefix-Vto) .. controls (\pgfcirc at a@prefix-Vcont2)  and (\pgfcirc at a@prefix-Vcont1) ..
+                node[currarrow, sloped,  allow upside down, pos=1, anchor=tip] {}
+                (\pgfcirc at a@prefix-Vfrom)
+            \else
+                (\pgfcirc at a@prefix-Vfrom) .. controls (\pgfcirc at a@prefix-Vcont1)  and (\pgfcirc at a@prefix-Vcont2) ..
+                node[currarrow, sloped,  allow upside down, pos=1, anchor=tip] {}
+                (\pgfcirc at a@prefix-Vto)
+            \fi
+        \fi
+    \else % american
+        \ifpgf at circuit@bipole at voltage@backward
+            \ifpgf at circ@oldvoltagedirection
+                (\pgfcirc at a@prefix-Vfrom) node[inner sep=0, node font=\pgf at circ@avfont,
+                    anchor=\pgf at circ@bipole at voltage@label at anchor]{\pgf at circ@avplus}
+                (\pgfcirc at a@prefix-Vto) node[inner sep=0, node font=\pgf at circ@avfont,
+                    anchor=\pgf at circ@bipole at voltage@label at anchor]{\pgf at circ@avminus}
+            \else
+                (\pgfcirc at a@prefix-Vfrom) node[inner sep=0, node font=\pgf at circ@avfont,
+                    anchor=\pgf at circ@bipole at voltage@label at anchor]{\pgf at circ@avminus}
+                (\pgfcirc at a@prefix-Vto) node[inner sep=0, node font=\pgf at circ@avfont,
+                    anchor=\pgf at circ@bipole at voltage@label at anchor]{\pgf at circ@avplus}
+            \fi
+            \else
+            \ifpgf at circ@oldvoltagedirection
+                (\pgfcirc at a@prefix-Vfrom) node[inner sep=0, node font=\pgf at circ@avfont,
+                    anchor=\pgf at circ@bipole at voltage@label at anchor]{\pgf at circ@avminus}
+                (\pgfcirc at a@prefix-Vto) node[inner sep=0, node font=\pgf at circ@avfont,
+                    anchor=\pgf at circ@bipole at voltage@label at anchor]{\pgf at circ@avplus}
+            \else
+                (\pgfcirc at a@prefix-Vfrom) node[inner sep=0, node font=\pgf at circ@avfont,
+                    anchor=\pgf at circ@bipole at voltage@label at anchor]{\pgf at circ@avplus}
+                (\pgfcirc at a@prefix-Vto) node[inner sep=0, node font=\pgf at circ@avfont,
+                    anchor=\pgf at circ@bipole at voltage@label at anchor]{\pgf at circ@avminus}
+            \fi
+        \fi
+    \fi
+    \fi % Closing the ...ifempty
+}
+
+%% Output routine for voltage sources
+\def\pgf at circ@drawvoltagegenerator{
+    % the following is affected indirectly by voltage/shift, you can move the arrow with voltage/bump a.
+    % it's not perfect, but I can't find the way to do it correctly...
+    \pgfextra{
+        \edef\shiftv{\ctikzvalof{voltage/shift}}
+        % distance along the 60-120 axis
+        \edef\pgf at temp{/tikz/circuitikz/bipoles/\ctikzvalof{bipole/kind}/voltage/bump a}
+        \pgfkeysifdefined{\pgf at temp}
+        {
+            \edef\bumpa{\ctikzvalof{bipoles/\ctikzvalof{bipole/kind}/voltage/bump a}}
+        }
+        {
+            \edef\bumpa{\ctikzvalof{voltage/bump a}}
+        }
+        % additional per-bipole voltage shift (internal)
+        \edef\pgf at temp{/tikz/circuitikz/bipoles/\ctikzvalof{bipole/kind}/voltage/additional shift}
+        \pgfkeysifdefined{\pgf at temp}
+        {
+            \edef\addvshift{\ctikzvalof{bipoles/\ctikzvalof{bipole/kind}/voltage/additional shift}}
+        }
+        {
+            \edef\addvshift{0}
+        }
+        \pgfmathsetmacro{\bumpaplus}{\bumpa + 0.5*\shiftv} % coefficient added "by feel". Sorry.
+    }
+    \ifpgf at circuit@bipole at voltage@below
+        coordinate (pgfcirc at Vfrom0) at ($(\ctikzvalof{bipole/name}.center) ! \bumpaplus ! (\ctikzvalof{bipole/name}.-120)$)
+        coordinate (pgfcirc at Vto0) at ($(\ctikzvalof{bipole/name}.center) ! \bumpaplus ! (\ctikzvalof{bipole/name}.-60)$)
+        coordinate (\pgfcirc at a@prefix-Vfrom) at ($ (pgfcirc at Vfrom0) ! \addvshift! -90: (pgfcirc at Vto0) $)
+        coordinate (\pgfcirc at a@prefix-Vto) at ($ (pgfcirc at Vto0) ! \addvshift! 90: (pgfcirc at Vfrom0) $)
+    \else
+        coordinate (pgfcirc at Vfrom0) at ($ (\ctikzvalof{bipole/name}.center) ! \bumpaplus ! (\ctikzvalof{bipole/name}.120)$)
+        coordinate (pgfcirc at Vto0) at ($ (\ctikzvalof{bipole/name}.center) ! \bumpaplus ! (\ctikzvalof{bipole/name}.60)$)
+        coordinate (\pgfcirc at a@prefix-Vfrom) at ($ (pgfcirc at Vfrom0) ! \addvshift! 90: (pgfcirc at Vto0) $)
+        coordinate (\pgfcirc at a@prefix-Vto) at ($ (pgfcirc at Vto0) ! \addvshift! -90: (pgfcirc at Vfrom0) $)
+    \fi
+    coordinate (\pgfcirc at a@prefix-Vlab) at ($(\pgfcirc at a@prefix-Vto)!0.5!(\pgfcirc at a@prefix-Vfrom) $)
+    coordinate (pgfcirc at Vdir) at (\pgfcirc at a@prefix-Vto)
+    \pgf at circ@ifkeyempty{bipole/voltage/label/name}\else
+    \ifpgf at circuit@europeanvoltage
+        \ifpgf at circuit@bipole at voltage@backward
+            (\pgfcirc at a@prefix-Vto)  -- node[currarrow, sloped,  allow upside down, pos=1, anchor=tip] {} (\pgfcirc at a@prefix-Vfrom)
+        \else
+            (\pgfcirc at a@prefix-Vfrom)  -- node[currarrow, sloped,  allow upside down, pos=1, anchor=tip] {} (\pgfcirc at a@prefix-Vto)
+        \fi
+        \else% american voltage
+        \ifpgf at circuit@bipole at voltageoutsideofsymbol
+            % if it is a battery, must put + and -
+
+            \ifpgf at circ@fixbatteries
+                \ifpgf at circuit@bipole at voltage@backward
+                    (\pgfcirc at a@prefix-Vfrom)  node[node font=\pgf at circ@avfont] {\pgf at circ@avplus}
+                    (\pgfcirc at a@prefix-Vto) node[node font=\pgf at circ@avfont] {\pgf at circ@avminus}
+                \else
+                    (\pgfcirc at a@prefix-Vfrom)  node[node font=\pgf at circ@avfont] {\pgf at circ@avminus}
+                    (\pgfcirc at a@prefix-Vto) node[node font=\pgf at circ@avfont] {\pgf at circ@avplus}
+                \fi
+                \else
+                \ifpgf at circuit@bipole at voltage@backward
+                    (\pgfcirc at a@prefix-Vfrom)  node[node font=\pgf at circ@avfont] {\pgf at circ@avminus}
+                    (\pgfcirc at a@prefix-Vto) node[node font=\pgf at circ@avfont] {\pgf at circ@avplus}
+                \else
+                    (\pgfcirc at a@prefix-Vfrom)  node[node font=\pgf at circ@avfont] {\pgf at circ@avplus}
+                    (\pgfcirc at a@prefix-Vto) node[node font=\pgf at circ@avfont] {\pgf at circ@avminus}
+                \fi
+            \fi
+        \fi
+    \fi
+    \fi % closes ...ifempty
+}
+
+%% Output routine
+%% this is the entry point
+%%
+%% locally used dimensions
+\newdimen{\pgfcirc at labelshift}
+\newif\ifpgfcirc at v@curved % helper if --- true only if voltages are curved
+\def\pgf at circ@drawvoltage{% node name
+    \pgfextra{%
+        % set the helper if...curved
+        \ifpgf at circuit@europeanvoltage
+            \ifpgf at circuit@bipole at voltage@straight
+                \pgfcirc at v@curvedfalse
+            \else
+                \pgfcirc at v@curvedtrue
+            \fi
+        \else
+            \pgfcirc at v@curvedfalse
+        \fi
+        % \typeout{V routine called with prefix: \pgfcirc at a@prefix}
+        % Label anchors WARNING: indentation is probably wrong
+        \edef\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
+        \ifnum\pgfcircmathresult >4 \ifnum\pgfcircmathresult <86
+        \ifpgf at circuit@bipole at voltage@below
+            \def\pgf at circ@bipole at voltage@label at anchor{north west}
+        \else
+            \def\pgf at circ@bipole at voltage@label at anchor{south east}
+        \fi
+        \fi\fi
+        \ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95
+        \ifpgf at circuit@bipole at voltage@below
+            \def\pgf at circ@bipole at voltage@label at anchor{west}
+        \else
+            \def\pgf at circ@bipole at voltage@label at anchor{east}
+        \fi
+        \fi\fi
+        \ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176
+        \ifpgf at circuit@bipole at voltage@below
+            \def\pgf at circ@bipole at voltage@label at anchor{south west}
+        \else \def\pgf at circ@bipole at voltage@label at anchor{north east}
+        \fi
+        \fi\fi
+        \ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185
+        \ifpgf at circuit@bipole at voltage@below
+            \def\pgf at circ@bipole at voltage@label at anchor{south}
+        \else\def\pgf at circ@bipole at voltage@label at anchor{north}
+        \fi
+        \fi\fi
+        \ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266
+        \ifpgf at circuit@bipole at voltage@below
+            \def\pgf at circ@bipole at voltage@label at anchor{south east}
+        \else\def\pgf at circ@bipole at voltage@label at anchor{north west}
+        \fi
+        \fi\fi
+        \ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275
+        \ifpgf at circuit@bipole at voltage@below
+            \def\pgf at circ@bipole at voltage@label at anchor{east}
+        \else \def\pgf at circ@bipole at voltage@label at anchor{west}
+        \fi
+        \fi\fi
+        \ifnum\pgfcircmathresult >274 \ifnum\pgfcircmathresult <356
+        \ifpgf at circuit@bipole at voltage@below
+            \def\pgf at circ@bipole at voltage@label at anchor{north east}
+        \else\def\pgf at circ@bipole at voltage@label at anchor{south west}
+        \fi
+        \fi\fi
+        \ifnum\pgfcircmathresult >-1 \ifnum\pgfcircmathresult <5
+        \ifpgf at circuit@bipole at voltage@below
+            \def\pgf at circ@bipole at voltage@label at anchor{north}
+        \else\def\pgf at circ@bipole at voltage@label at anchor{south}
+        \fi
+        \fi\fi
+        \ifnum\pgfcircmathresult >355 \ifnum\pgfcircmathresult <361
+        \ifpgf at circuit@bipole at voltage@below
+            \def\pgf at circ@bipole at voltage@label at anchor{north}
+        \else\def\pgf at circ@bipole at voltage@label at anchor{south}
+        \fi
+        \fi\fi
+
+        % export anchor position (if not needed, is always the same macro)
+        \expandafter\xdef\csname pgfcirc@\pgfcirc at a@prefix-Vlab-anchor\endcsname{\pgf at circ@bipole at voltage@label at anchor}
+        % this must be set *before* changing for mirroring and inverting; in that case
+        % the xscale/yscale parameters take it into account
+        \ifpgf at circuit@bipole at voltage@below
+            \def\pgf at circ@bipole at voltage@label at where{-90}
+        \else
+            \def\pgf at circ@bipole at voltage@label at where{90}
+        \fi
+
+        % magic to counteract the scale and yscale effects (there should be a better way...)
+        \ifnum \ctikzvalof{mirror value}=-1
+            \ifpgf at circuit@bipole at voltage@below
+                \pgf at circuit@bipole at voltage@belowfalse
+            \else
+                \pgf at circuit@bipole at voltage@belowtrue
+            \fi
+        \fi
+
+        \ifpgf at circuit@bipole at inverted
+            \ifpgf at circuit@bipole at voltage@below
+                \pgf at circuit@bipole at voltage@belowfalse
+            \else
+                \pgf at circuit@bipole at voltage@belowtrue
+            \fi
+        \fi
+
+        % take into account scaling
+        \setscaledRlenforclass
+
+        \ifpgf at circuit@europeanvoltage
+            \ifpgf at circuit@bipole at voltage@straight
+                % check for straight
+                \edef\pgf at temp{/tikz/circuitikz/bipoles/\ctikzvalof{bipole/kind}/voltage/straight label distance}
+                \pgfkeysifdefined{\pgf at temp}{%
+                    \edef\labeldist{\ctikzvalof{bipoles/\ctikzvalof{bipole/kind}/voltage/straight label distance}}%
+                    % \typeout{ST:ADJUSTED\space for\space \ctikzvalof{bipole/kind} \space at \space \stdist}
+                }{\edef\labeldist{\ctikzvalof{voltage/straight label distance}}}
+                \ifpgf at circ@debugv\edef\whichtypeshift{STR}\fi
+            \else
+                % check for european
+                \edef\pgf at temp{/tikz/circuitikz/bipoles/\ctikzvalof{bipole/kind}/voltage/european label distance}
+                \pgfkeysifdefined{\pgf at temp}{%
+                    \edef\labeldist{\ctikzvalof{bipoles/\ctikzvalof{bipole/kind}/voltage/european label distance}}%
+                    % \typeout{EU:ADJUSTED\space for\space \ctikzvalof{bipole/kind} \space at \space \eudist}
+                }{ \edef\labeldist{\ctikzvalof{voltage/european label distance}}}
+                \ifpgf at circ@debugv\edef\whichtypeshift{EUR}\fi
+            \fi
+        \else
+            % check for american
+            \edef\pgf at temp{/tikz/circuitikz/bipoles/\ctikzvalof{bipole/kind}/voltage/american label distance}
+            \pgfkeysifdefined{\pgf at temp}{%
+                \ifpgf at circuit@bipole at voltage@raised
+                    % do not apply the shift if we are using raised american style
+                    \edef\labeldist{1.4}% default value
+                \else
+                    \edef\labeldist{\ctikzvalof{bipoles/\ctikzvalof{bipole/kind}/voltage/american label distance}}%
+                \fi
+                % \typeout{AL:ADJUSTED\space for\space \ctikzvalof{bipole/kind} \space at \space \aldist}
+            }{\edef\labeldist{\ctikzvalof{voltage/american label distance}}}
+            \ifpgf at circ@debugv\edef\whichtypeshift{AME}\fi
+        \fi
+        % find the height of the bipole or use a default value
+        \edef\pgf at temp{/tikz/circuitikz/bipoles/\ctikzvalof{bipole/kind}/height}
+        \pgfkeysifdefined{\pgf at temp}
+            {\pgfmathsetmacro{\partheightf}{0.5*\ctikzvalof{bipoles/\ctikzvalof{bipole/kind}/height}}
+             \edef\partheight{\partheightf\pgf at circ@scaled at Rlen}}
+            {\edef\partheight{(.5\pgf at circ@scaled at Rlen)}} %fallback to fixed value
+
+        \ifpgf at circuit@bipole at isvoltage
+            \pgfmathsetlength{\pgfcirc at labelshift}{(\labeldist-1.2)*\partheight}
+        \else
+            \pgfmathsetlength{\pgfcirc at labelshift}{(\labeldist-1.4)*\partheight}
+        \fi
+        % the value for the european was by default 1.4
+        \pgfsetcornersarced{\pgfpointorigin}% do not use rounded corners!
+        % set the macro for detecting open
+        \edef\@@kind{\ctikzvalof{bipole/kind}}\edef\@@open{open}
+        \ifpgf at adjust@open at voltage\else\edef\@@open{this-will-nEver-match}\fi
+        % \typeout{KIND\space\@@kind}
+    }%end pgfextra
+
+    \ifpgf at circuit@bipole at isvoltage
+        \pgf at circ@drawvoltagegenerator
+        % add fake cont1 and cont2 anchors for export
+        coordinate (\pgfcirc at a@prefix-Vcont1) at ($(\pgfcirc at a@prefix-Vfrom) !0.5! (\pgfcirc at a@prefix-Vto)$)
+        coordinate (\pgfcirc at a@prefix-Vcont2) at ($(\pgfcirc at a@prefix-Vfrom) !0.5! (\pgfcirc at a@prefix-Vto)$)
+    \else
+        \pgf at circ@drawvoltagegeneric
+    \fi
+    % % debugging
+    % \pgfextra{%
+    %     \typeout{LABEL\space KIND:\@@kind\space EU:\the\pgfcirc at eushift\space AL:\the\pgfcirc at alshift\space
+    %         DIRECTION:\pgf at circ@bipole at voltage@label at where}
+    %     \pgf at circ@debugvtrue}
+
+    % move a bit if requested
+    coordinate (\pgfcirc at a@prefix-Vlab) at ($(\pgfcirc at a@prefix-Vlab) ! \pgfcirc at labelshift ! \pgf at circ@bipole at voltage@label at where :(pgfcirc at Vdir)$)
+
+    % check for the case of american AND open
+    \ifpgf at circuit@europeanvoltage
+    \else
+        \ifx\@@kind\@@open
+        % override pgfcirc at Vlab
+        coordinate (\pgfcirc at a@prefix-Vlab) at ($(pgfcirc at Vfrom@flat)!0.5!(pgfcirc at Vto@flat)$)\fi
+    \fi
+
+    \ifpgf at circ@debugv
+            node [odiamondpole, color=blue] at (\pgfcirc at a@prefix-Vlab) {}
+            node [odiamondpole, color=red] at (pgfcirc at Vdir) {}
+            node [overlay, red, font=\tiny, anchor=south east, align=right] at(pgfcirc at Vdir)
+            {\whichtypeshift:\the\pgfcirc at labelshift\\ DIR:\pgf at circ@bipole at voltage@label at where}
+    \fi
+
+    % put the node only if it's not empty
+    \pgf at circ@ifkeyempty{bipole/voltage/label/name}\else
+        node [anchor=\pgf at circ@bipole at voltage@label at anchor, inner sep=2pt,
+        \circuitikzbasekey/bipole voltage style](\ctikzvalof{bipole/name}voltage)
+        at (\pgfcirc at a@prefix-Vlab) {\pgf at circ@finallabels{voltage/label}}
+    \fi
+
+    \ifpgfcirc at v@curved\else
+        % fake Vcont1 and Vcont2 for when they are exported --- in the middle of Vto and Vfrom
+        coordinate (\pgfcirc at a@prefix-Vcont1) at ($(\pgfcirc at a@prefix-Vfrom) !0.5! (\pgfcirc at a@prefix-Vto)$)
+        coordinate (\pgfcirc at a@prefix-Vcont2) at ($(\pgfcirc at a@prefix-Vfrom) !0.5! (\pgfcirc at a@prefix-Vto)$)
+    \fi
+    % revert from and to (and c1 - c2) if needed (simpler than rework the positioning above...)
+    \ifpgf at circuit@bipole at voltage@backward
+        \pgfcirc at swap@coordinates{\pgfcirc at a@prefix-Vfrom}{\pgfcirc at a@prefix-Vto}
+        \pgfcirc at swap@coordinates{\pgfcirc at a@prefix-Vcont1}{\pgfcirc at a@prefix-Vcont2}
+    \fi
+
+}%end drawvoltages
+%%%---------- close: tex/pgfcircvoltage
+%%%%%%%%%%% Springe nach tex/pgfcirccurrent
+%%%---------- open: tex/pgfcirccurrent.tex
+% Copyright 2018-2020 by Romano Giannetti
+% Copyright 2015-2020 by Stefan Lindner
+% Copyright 2013-2020 by Stefan Erhardt
+% Copyright 2007-2020 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Current handling
+
+%% styles
+\ctikzset{bipole current style/.style={}}
+\tikzset{bipole current style/.code={
+        \ctikzset{bipole current style/.style={#1}}
+}}
+\tikzset{bipole current append style/.code={
+        \ctikzset{bipole current style/.append style={#1}}
+}}
+
+%% Options
+\ctikzset{i^>/.style = {
+        i = #1,
+        \circuitikzbasekey/bipole/current/direction = forward,
+        \circuitikzbasekey/bipole/current/x position = after,
+        \circuitikzbasekey/bipole/current/y position = above
+    }
+}
+
+\ctikzset{i_>/.style = {
+        i = #1,
+        \circuitikzbasekey/bipole/current/direction = forward,
+        \circuitikzbasekey/bipole/current/x position = after,
+        \circuitikzbasekey/bipole/current/y position = below
+    }
+}
+
+\ctikzset{i>^/.style = {
+        i = #1,
+        \circuitikzbasekey/bipole/current/direction = forward,
+        \circuitikzbasekey/bipole/current/x position = before,
+        \circuitikzbasekey/bipole/current/y position = above
+    }
+}
+
+\ctikzset{i>_/.style = {
+        i = #1,
+        \circuitikzbasekey/bipole/current/direction = forward,
+        \circuitikzbasekey/bipole/current/x position = before,
+        \circuitikzbasekey/bipole/current/y position = below
+    }
+}
+
+\ctikzset{i^</.style = {
+        i = #1,
+        \circuitikzbasekey/bipole/current/direction = backward,
+        \circuitikzbasekey/bipole/current/x position = after,
+        \circuitikzbasekey/bipole/current/y position = above
+    }
+}
+
+\ctikzset{i_</.style = {
+        i = #1,
+        \circuitikzbasekey/bipole/current/direction = backward,
+        \circuitikzbasekey/bipole/current/x position = after,
+        \circuitikzbasekey/bipole/current/y position = below
+    }
+}
+
+\ctikzset{i<^/.style = {
+        i = #1,
+        \circuitikzbasekey/bipole/current/direction = backward,
+        \circuitikzbasekey/bipole/current/x position = before,
+        \circuitikzbasekey/bipole/current/y position = above
+    }
+}
+
+\ctikzset{i<_/.style = {
+        i = #1,
+        \circuitikzbasekey/bipole/current/direction = backward,
+        \circuitikzbasekey/bipole/current/x position = before,
+        \circuitikzbasekey/bipole/current/y position = below
+    }
+}
+
+\ctikzset{i/.code = {
+        \pgfcirc at has@itrue
+        \pgfkeys{\circuitikzbasekey/bipole/current/direction = forward,
+            \circuitikzbasekey/bipole/current/x position = after,
+        \circuitikzbasekey/bipole/current/y position = above }
+        \pgfkeys{/tikz/circuitikz/bipole/current/label/name=#1}
+        \ctikzsetvalof{bipole/current/label/unit}{}
+        \ifpgf at circ@siunitx
+            \pgf at circ@handleSI{#1}
+            \ifpgf at circ@siunitx at res
+                \edef\pgf at temp{\pgf at circ@handleSI at val}
+                \pgfkeyslet{/tikz/circuitikz/bipole/current/label/name}{\pgf at temp}
+                \edef\pgf at temp{\pgf at circ@handleSI at unit}
+                \pgfkeyslet{/tikz/circuitikz/bipole/current/label/unit}{\pgf at temp}
+            \else
+        \fi
+        \else
+    \fi
+    %reverse current direction for voltage sources
+    \ifpgf at circ@oldvoltagedirection\else
+        \ifpgf at circuit@bipole at isvoltage
+            \ifpgf at circuit@bipole at voltage@backward
+                \pgfkeys{\circuitikzbasekey/bipole/current/direction = forward,
+                    \circuitikzbasekey/bipole/current/x position = after,
+                \circuitikzbasekey/bipole/current/y position = below }
+            \else
+                \pgfkeys{\circuitikzbasekey/bipole/current/direction = backward,
+                    \circuitikzbasekey/bipole/current/x position = before,
+                \circuitikzbasekey/bipole/current/y position = above }
+            \fi\fi\fi
+    }
+}
+
+\ifpgf at circ@oldvoltagedirection
+    \ctikzset{i</.style = { i = #1, \circuitikzbasekey/bipole/current/direction = backward } }
+\else
+    \ctikzset{i</.style = { i = #1, \circuitikzbasekey/bipole/current/direction = backward, \circuitikzbasekey/bipole/current/x position = before } }
+\fi
+\ctikzset{i_/.style = { i = #1, \circuitikzbasekey/bipole/current/y position = below } }
+\ctikzset{i>/.style = {i = #1, \circuitikzbasekey/bipole/current/direction = forward } }
+\ctikzset{i^/.style = { i= #1, \circuitikzbasekey/bipole/current/y position = above } }
+
+%% Output routine
+\def\pgf at circ@drawcurrent{
+    \pgfextra{
+        \edef\pgf at circ@rounded at dir{\pgf at circ@direction}
+        \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@rounded at dir\pgf at nil}
+
+        \ifnum\pgfcircmathresult >4 \ifnum\pgfcircmathresult <86
+        \ifpgf at circuit@bipole at current@below
+            \def\pgf at circ@dir{north west} \else \def\pgf at circ@dir{south east}
+        \fi
+        \fi\fi
+        \ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95
+        \ifpgf at circuit@bipole at current@below
+            \def\pgf at circ@dir{west} \else \def\pgf at circ@dir{east}
+        \fi
+        \fi\fi
+        \ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176
+        \ifpgf at circuit@bipole at current@below
+            \def\pgf at circ@dir{south west}\else \def\pgf at circ@dir{north east}
+        \fi
+        \fi\fi
+        \ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185
+        \ifpgf at circuit@bipole at current@below
+            \def\pgf at circ@dir{south}\else\def\pgf at circ@dir{north}
+        \fi
+        \fi\fi
+        \ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266
+        \ifpgf at circuit@bipole at current@below
+            \def\pgf at circ@dir{south east}\else\def\pgf at circ@dir{north west}
+        \fi
+        \fi\fi
+        \ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275
+        \ifpgf at circuit@bipole at current@below
+            \def\pgf at circ@dir{east}\else \def\pgf at circ@dir{west}
+        \fi
+        \fi\fi
+        \ifnum\pgfcircmathresult >274 \ifnum\pgfcircmathresult <356
+        \ifpgf at circuit@bipole at current@below
+            \def\pgf at circ@dir{north east}\else\def\pgf at circ@dir{south west}
+        \fi
+        \fi\fi
+        \ifnum\pgfcircmathresult <5
+        \ifpgf at circuit@bipole at current@below
+            \def\pgf at circ@dir{north}\else\def\pgf at circ@dir{south}
+        \fi
+        \fi
+        \ifnum\pgfcircmathresult >355
+        \ifpgf at circuit@bipole at current@below
+            \def\pgf at circ@dir{north}\else\def\pgf at circ@dir{south}
+        \fi
+        \fi
+        % export anchor position (if not needed, is always the same macro)
+        \expandafter\xdef\csname pgfcirc@\pgfcirc at a@prefix-Ilab-anchor\endcsname{\pgf at circ@dir}
+
+        \ifpgf at circuit@bipole at current@below
+            \def\pgf at circ@bipole at current@label at where{-90}
+        \else
+            \def\pgf at circ@bipole at current@label at where{+90}
+        \fi
+    }
+
+    %
+    \pgfextra{\def\pgf at temp{short}\edef\pgf at circ@temp{\ctikzvalof{bipole/kind}}}
+    \ifx\pgf at circ@temp\pgf at temp%draw current at a short at middle of the line
+        coordinate (\pgfcirc at a@prefix-Ifrom) at (\tikztostart)
+        coordinate (\pgfcirc at a@prefix-Ito) at (\tikztotarget)
+    \else% normal bipole or source
+        \ifpgf at circuit@bipole at current@before
+            coordinate (\pgfcirc at a@prefix-Ifrom) at (\tikztostart)
+            coordinate (\pgfcirc at a@prefix-Ito) at (pgfcirc at anchorstartnode)
+        \else
+            coordinate (\pgfcirc at a@prefix-Ifrom) at (pgfcirc at anchorendnode)
+            coordinate (\pgfcirc at a@prefix-Ito) at (\tikztotarget)
+        \fi
+    \fi
+    \ifpgf at circuit@bipole at current@backward
+        \pgfextra{
+            \pgfmathsubtract{\pgf at circ@rounded at dir}{180}
+            \edef\pgf at circ@rounded at dir{\expandafter\pgf at circ@stripdecimals\pgfmathresult\pgf at nil}
+        }
+    \fi
+    coordinate (\pgfcirc at a@prefix-Ipos) at ($(\pgfcirc at a@prefix-Ifrom)! \ctikzvalof{current/distance} !(\pgfcirc at a@prefix-Ito)$)
+    % if the current label is not empty (in which case we have already all the anchors)
+    \pgf at circ@ifkeyempty{bipole/current/label/name}\else
+    % put the arrow node
+    node[currarrow, rotate=\pgf at circ@rounded at dir, anchor=center](Iarrow) at (\pgfcirc at a@prefix-Ipos) {}
+    % put the label
+    node[anchor=\pgf at circ@dir, \circuitikzbasekey/bipole current style]
+        (\ctikzvalof{bipole/name}current)
+        at (Iarrow.\pgf at circ@bipole at current@label at where){\pgf at circ@finallabels{current/label}}
+    \fi % end ifempty
+    \ifpgf at circuit@bipole at current@backward
+        \pgfcirc at swap@coordinates{\pgfcirc at a@prefix-Ifrom}{\pgfcirc at a@prefix-Ito}
+    \fi
+}
+
+%%%---------- close: tex/pgfcirccurrent
+%%%%%%%%%%% Springe nach tex/pgfcircflow
+%%%---------- open: tex/pgfcircflow.tex
+% Copyright 2018-2020 by Romano Giannetti
+% Copyright 2015-2020 by Stefan Lindner
+% Copyright 2013-2020 by Stefan Erhardt
+% Copyright 2007-2020 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% flow handling
+
+
+%% styles
+\ctikzset{bipole flow style/.style={}}
+\tikzset{bipole flow style/.code={
+        \ctikzset{bipole flow style/.style={#1}}
+}}
+\tikzset{bipole flow append style/.code={
+        \ctikzset{bipole flow style/.append style={#1}}
+}}
+
+%% Options
+\ctikzset{f^>/.style = {
+        f = #1,
+        \circuitikzbasekey/bipole/flow/direction = forward,
+        \circuitikzbasekey/bipole/flow/x position = after,
+        \circuitikzbasekey/bipole/flow/y position = above
+    }
+}
+
+\ctikzset{f_>/.style = {
+        f = #1,
+        \circuitikzbasekey/bipole/flow/direction = forward,
+        \circuitikzbasekey/bipole/flow/x position = after,
+        \circuitikzbasekey/bipole/flow/y position = below
+    }
+}
+
+\ctikzset{f>^/.style = {
+        f = #1,
+        \circuitikzbasekey/bipole/flow/direction = forward,
+        \circuitikzbasekey/bipole/flow/x position = before,
+        \circuitikzbasekey/bipole/flow/y position = above
+    }
+}
+
+\ctikzset{f>_/.style = {
+        f = #1,
+        \circuitikzbasekey/bipole/flow/direction = forward,
+        \circuitikzbasekey/bipole/flow/x position = before,
+        \circuitikzbasekey/bipole/flow/y position = below
+    }
+}
+
+\ctikzset{f^</.style = {
+        f = #1,
+        \circuitikzbasekey/bipole/flow/direction = backward,
+        \circuitikzbasekey/bipole/flow/x position = after,
+        \circuitikzbasekey/bipole/flow/y position = above
+    }
+}
+
+\ctikzset{f_</.style = {
+        f = #1,
+        \circuitikzbasekey/bipole/flow/direction = backward,
+        \circuitikzbasekey/bipole/flow/x position = after,
+        \circuitikzbasekey/bipole/flow/y position = below
+    }
+}
+
+\ctikzset{f<^/.style = {
+        f = #1,
+        \circuitikzbasekey/bipole/flow/direction = backward,
+        \circuitikzbasekey/bipole/flow/x position = before,
+        \circuitikzbasekey/bipole/flow/y position = above
+    }
+}
+
+\ctikzset{f<_/.style = {
+        f = #1,
+        \circuitikzbasekey/bipole/flow/direction = backward,
+        \circuitikzbasekey/bipole/flow/x position = before,
+        \circuitikzbasekey/bipole/flow/y position = below
+    }
+}
+
+\ctikzset{f</.style = { f = #1, \circuitikzbasekey/bipole/flow/direction = backward} }
+\ctikzset{f_/.style = { f = #1, \circuitikzbasekey/bipole/flow/y position = below } }
+\ctikzset{f>/.style = { f = #1, \circuitikzbasekey/bipole/flow/direction = forward } }
+\ctikzset{f^/.style = { f = #1, \circuitikzbasekey/bipole/flow/y position = above } }
+
+\ctikzset{f/.code = {
+        \pgfcirc at has@ftrue
+        \pgfkeys{\circuitikzbasekey/bipole/flow/direction = forward,
+            \circuitikzbasekey/bipole/flow/x position = after,
+        \circuitikzbasekey/bipole/flow/y position = above }
+        \pgfkeys{/tikz/circuitikz/bipole/flow/label/name=#1}
+        \ctikzsetvalof{bipole/flow/label/unit}{}
+        \ifpgf at circ@siunitx
+            \pgf at circ@handleSI{#1}
+            \ifpgf at circ@siunitx at res
+                \edef\pgf at temp{\pgf at circ@handleSI at val}
+                \pgfkeyslet{/tikz/circuitikz/bipole/flow/label/name}{\pgf at temp}
+                \edef\pgf at temp{\pgf at circ@handleSI at unit}
+                \pgfkeyslet{/tikz/circuitikz/bipole/flow/label/unit}{\pgf at temp}
+            \else
+        \fi
+        \else
+    \fi
+}
+}
+
+%% Output routine
+
+\def\pgf at circ@drawflow{
+    \pgfextra{
+        \edef\pgf at circ@rounded at dir{\pgf at circ@direction}
+        \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@rounded at dir\pgf at nil}
+
+        \ifnum\pgfcircmathresult >4 \ifnum\pgfcircmathresult <86
+                \ifpgf at circuit@bipole at flow@below
+                        \def\pgf at circ@dir{north west} \else \def\pgf at circ@dir{south east}
+                \fi
+        \fi\fi
+        \ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95
+                \ifpgf at circuit@bipole at flow@below
+                        \def\pgf at circ@dir{west} \else \def\pgf at circ@dir{east}
+                \fi
+        \fi\fi
+        \ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176
+                \ifpgf at circuit@bipole at flow@below
+                         \def\pgf at circ@dir{south west}\else \def\pgf at circ@dir{north east}
+                \fi
+        \fi\fi
+        \ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185
+                \ifpgf at circuit@bipole at flow@below
+                          \def\pgf at circ@dir{south}\else\def\pgf at circ@dir{north}
+                \fi
+        \fi\fi
+        \ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266
+                \ifpgf at circuit@bipole at flow@below
+                         \def\pgf at circ@dir{south east}\else\def\pgf at circ@dir{north west}
+                \fi
+        \fi\fi
+        \ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275
+                \ifpgf at circuit@bipole at flow@below
+                         \def\pgf at circ@dir{east}\else \def\pgf at circ@dir{west}
+                \fi
+        \fi\fi
+        \ifnum\pgfcircmathresult >274 \ifnum\pgfcircmathresult <356
+                \ifpgf at circuit@bipole at flow@below
+                          \def\pgf at circ@dir{north east}\else\def\pgf at circ@dir{south west}
+                \fi
+        \fi\fi
+        \ifnum\pgfcircmathresult <5
+                \ifpgf at circuit@bipole at flow@below
+                         \def\pgf at circ@dir{north}\else\def\pgf at circ@dir{south}
+                \fi
+        \fi
+        \ifnum\pgfcircmathresult >355
+                \ifpgf at circuit@bipole at flow@below
+                         \def\pgf at circ@dir{north}\else\def\pgf at circ@dir{south}
+                \fi
+        \fi
+
+        \ifpgf at circuit@bipole at flow@below
+                \def\pgf at circ@bipole at flow@label at where{-90}
+        \else
+                \def\pgf at circ@bipole at flow@label at where{+90}
+        \fi
+        % export anchor position (if not needed, is always the same macro)
+        \expandafter\xdef\csname pgfcirc@\pgfcirc at a@prefix-Flab-anchor\endcsname{\pgf at circ@dir}
+    }
+
+    \pgfextra{\def\pgf at temp{short}\edef\pgf at circ@temp{\ctikzvalof{bipole/kind}}}
+    \ifx\pgf at circ@temp\pgf at temp%draw current at a short at middle of the line
+        coordinate (pgfcirc at Ffrom@flat) at (\tikztostart)
+        coordinate (pgfcirc at Fto@flat) at (\tikztotarget)
+    \else% normal bipole or source
+        \ifpgf at circuit@bipole at flow@before
+            coordinate (pgfcirc at Ffrom@flat) at (\tikztostart)
+            coordinate (pgfcirc at Fto@flat) at (pgfcirc at anchorstartnode)
+        \else
+            coordinate (pgfcirc at Ffrom@flat) at (pgfcirc at anchorendnode)
+            coordinate (pgfcirc at Fto@flat) at (\tikztotarget)
+        \fi
+    \fi
+    \pgfextra{
+        \newdimen{\absfshift}
+        \def\flow at offset{\ctikzvalof{flow/offset}\pgf at circ@Rlen}
+        \absfshift=\flow at offset
+        \ifpgf at circuit@bipole at flow@backward
+            \pgfmathsubtract{\pgf at circ@rounded at dir}{180}
+            \edef\pgf at circ@rounded at dir{\expandafter\pgf at circ@stripdecimals\pgfmathresult\pgf at nil}
+        \fi
+    }
+    \ifpgf at circuit@bipole at flow@below
+        coordinate (pgfcirc at Ffrom@up) at ($(pgfcirc at Ffrom@flat) ! \absfshift !-90: (pgfcirc at Fto@flat)$)
+        coordinate (pgfcirc at Fto@up) at ($(pgfcirc at Fto@flat) ! \absfshift !90: (pgfcirc at Ffrom@flat)$)
+    \else
+        coordinate (pgfcirc at Ffrom@up) at ($(pgfcirc at Ffrom@flat) ! \absfshift !90: (pgfcirc at Fto@flat)$)
+        coordinate (pgfcirc at Fto@up) at ($(pgfcirc at Fto@flat) ! \absfshift !-90: (pgfcirc at Ffrom@flat)$)
+    \fi
+    coordinate (\pgfcirc at a@prefix-Fpos) at ($(pgfcirc at Ffrom@up) ! \ctikzvalof{flow/distance} !(pgfcirc at Fto@up)$)
+    \pgfextra{
+        \absfshift=0.25\pgf at circ@Rlen% This is half size of the "flowarrow" shape!
+    }
+    coordinate (\pgfcirc at a@prefix-Ffrom) at ($(\pgfcirc at a@prefix-Fpos)!\absfshift!(pgfcirc at Ffrom@up)$)
+    coordinate (\pgfcirc at a@prefix-Fto) at ($(\pgfcirc at a@prefix-Fpos)!\absfshift!(pgfcirc at Fto@up) $)
+    %
+    % coordinate (\pgfcirc at a@prefix-Fpos) at
+    %     ([yshift=\flow at offset]$(\pgfcirc at a@prefix-Ffrom)! \ctikzvalof{flow/distance} !(\pgfcirc at a@prefix-Fto)$)
+    % if the flow label is not empty (in which case we have already all the anchors)
+    \pgf at circ@ifkeyempty{bipole/flow/label/name}\else
+        % the flow arrow is really a node "flowarrow", not a real arrow
+        node[flowarrow, rotate=\pgf at circ@rounded at dir, anchor=center](Farrowpos) at (\pgfcirc at a@prefix-Fpos) {}
+
+        node[anchor=\pgf at circ@dir, \circuitikzbasekey/bipole flow style]
+        (\ctikzvalof{bipole/name}flow) at (Farrowpos.\pgf at circ@bipole at flow@label at where) {\pgf at circ@finallabels{flow/label}}
+    \fi
+
+    % adjust from and to before exporting --- it's much more simple like this then rework the algorithm above
+    \ifpgf at circuit@bipole at flow@backward
+        \pgfcirc at swap@coordinates{\pgfcirc at a@prefix-Ffrom}{\pgfcirc at a@prefix-Fto}
+    \fi
+
+}
+
+%%%---------- close: tex/pgfcircflow
+
+% defaults
+
+\setupmodule
+   [current=european,
+    voltage=european,
+    resistor=american,
+    inductor=cute,
+    logic=american,
+    siunitx=true,
+    arrowmos=false]
+
+\processaction
+   [\currentmoduleparameter{voltage}]
+   [european=>\ctikzset{voltage=european},
+    american=>\ctikzset{voltage=american}]
+
+\processaction
+   [\currentmoduleparameter{current}]
+   [european=>\ctikzset{ current=european},
+    american=>\ctikzset{ current=american}]
+
+\processaction
+   [\currentmoduleparameter{label}]
+   [straight=>\ctikzset{label/align = straight},
+    align=>\ctikzset{label/align = rotate},
+    smart=>\ctikzset{label/align = smart}]
+
+\processaction
+   [\currentmoduleparameter{resistor}]
+   [european=>\ctikzset{ resistor=european},
+    american=>\ctikzset{ resistor=american}]
+
+\processaction
+   [\currentmoduleparameter{inductor}]
+   [european=>\ctikzset{ inductor=european},
+    american=>\ctikzset{ inductor=american},
+    cute=>\ctikzset{ inductor=cute}]
+
+\processaction
+   [\currentmoduleparameter{diode}]
+   [full=>\ctikzset{ diode=full},
+    empty=>\ctikzset{ diode=empty}]
+
+\processaction
+   [\currentmoduleparameter{logic}]
+   [european=>\ctikzset{ logic ports=european},
+    american=>\ctikzset{ logic ports=american}]
+
+\processaction
+   [\currentmoduleparameter{siunitx}]
+   [true=>\def\SI#1#2{#1\,#2}
+    \def\ampere{\rm{A}}
+    \def\volt{\rm{V}}
+    \def\ohm{\Omega}
+    \def\siemens{\rm{S}}
+    \def\farad{\rm{F}}
+    \def\henry{\rm{H}}
+    \def\second{\rm{s}}
+    \def\coulomb{\rm{C}}
+    \def\siemens{\rm{S}}
+    \def\radians{\rm{rad}}
+    \def\milli{\rm{m}}
+    \def\micro{\mu}
+    \def\nano{\rm{n}}
+    \def\pico{\rm{p}}
+    \def\kilo{\rm{k}}
+    \def\mega{\rm{M}}
+    \def\giga{\rm{G}}
+    \def\tera{\rm{T}},
+    false=>]
+%   \s!default=>\pgf at circ@siunitxtrue,
+
+\processaction
+   [\currentmoduleparameter{arrowmos}]
+   [true=>\pgf at circuit@mos at arrowstrue,
+    false=>\pgf at circuit@mos at arrowsfalse]
+%   \s!default=>\pgf at circuit@mos at arrowstrue,
+
+
+\ifpgf at circ@siunitx
+ % nothing! siunitx and xstrings don't work in context
+\fi
+
+
+% Context specific
+
+\ctikzset{tripoles/op amp/font/.initial=\switchtobodyfont[small]}
+
+%%%%%%%%%%% Springe nach tex/pgfcircpath
+%%%---------- open: tex/pgfcircpath.tex
+% Copyright 2018-2020 by Romano Giannetti
+% Copyright 2015-2020 by Stefan Lindner
+% Copyright 2013-2020 by Stefan Erhardt
+% Copyright 2007-2020 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+
+\def\pgf at circ@direction{0.0}
+
+% swap two coordinates
+\def\pgfcirc at swap@coordinates#1#2{%
+    coordinate (pgfcirc at tmp@swap) at (#1)
+    coordinate (#1) at (#2)
+    coordinate (#2) at (pgfcirc at tmp@swap)
+}
+
+% Names
+\ctikzset{name/.style = { n=#1 } } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@
+\ctikzset{n/.code = {
+	\pgfkeys{/tikz/circuitikz/bipole/name=#1}
+}}
+
+% Reflect the node along
+\ctikzset{mirrored/.is choice}
+\ctikzset{mirror value/.initial=1}
+\ctikzset{mirrored/true/.code = {\ctikzsetvalof{mirror value}{-1}} }
+\ctikzset{mirrored/false/.code = {\ctikzsetvalof{mirror value}{1}} }
+\ctikzset{mirror/.style = {/tikz/circuitikz/mirrored=true}}
+
+% Invert node along path
+\ctikzset{inverted/.is choice}
+\ctikzset{invert value/.initial=1}
+\ctikzset{inverted/true/.code = {\ctikzsetvalof{invert value}{-1}\pgf at circuit@bipole at invertedtrue}}
+\ctikzset{inverted/false/.code = {\ctikzsetvalof{invert value}{1}\pgf at circuit@bipole at invertedfalse}}
+\ctikzset{invert/.style = {/tikz/circuitikz/inverted=true}}
+\newif\ifpgf at circuit@bipole at inverted
+\ctikzset{bipole/inverted/.is if=pgf at circuit@bipole at inverted}
+
+\newif\ifpgf at circuit@bipole at voltage@backward
+\ctikzset{bipole/voltage/direction/.is choice}
+\ctikzset{bipole/voltage/direction/forward/.code={\pgf at circuit@bipole at voltage@backwardfalse}}
+\ctikzset{bipole/voltage/direction/backward/.code={\pgf at circuit@bipole at voltage@backwardtrue}}
+
+% Initialize paths
+\def\pgfcircresetpath{
+    \ctikzset{bipole/name=, bipole/label/name=, bipole/label/position=90, ,bipole/annotation/name=, bipole/annotation/position=-90,
+        bipole/inverted=false, bipole/kind=,
+        bipole/voltage/direction=backward, bipole/voltage/label/name=, bipole/voltage/position=below,
+        bipole/nodes/left=none, bipole/nodes/right=none, bipole/is voltage=false,bipole/is voltageoutsideofsymbol=false,bipole/is strokedsymbol=false,
+        bipole/is current=false, bipole/current/label/name=, bipole/current/x position=after,
+        bipole/current/y position=above, bipole/current/direction=forward,
+        mirrored=false
+    }
+}
+
+%
+% expandable IF for the extra nodes (thanks to Henri Menke)
+% see https://chat.stackexchange.com/transcript/message/56560808#56560808
+%
+\def\pgfcirc at if@has at i{%
+    \ifpgfcirc at has@i
+        \expandafter\pgfutil at firstoftwo
+    \else
+        \expandafter\pgfutil at secondoftwo
+    \fi}
+\def\pgfcirc at if@has at v{%
+    \ifpgfcirc at has@v
+        \expandafter\pgfutil at firstoftwo
+    \else
+        \expandafter\pgfutil at secondoftwo
+    \fi}
+\def\pgfcirc at if@has at f{%
+    \ifpgfcirc at has@f
+        \expandafter\pgfutil at firstoftwo
+    \else
+        \expandafter\pgfutil at secondoftwo
+    \fi}
+
+
+
+%% Generic bipole path
+\def\pgf at circ@bipole at path#1#2{
+    % Create a bipole path from the shapes defined with \pgfcircdeclarebipole
+    % or \pgfcircdeclarebipolescaled; the node shapes are named with a "shape"
+    % appended to the main (path-style) name
+    % #1 path-style node name
+    % #2 the argument passed from the to-path structure; don't touch
+    %
+    % Example:
+    % \def\pgf at circ@capacitor at path#1{\pgf at circ@bipole at path{capacitor}{#1}}
+    %
+    \pgf at circ@bipole at path@base{shape}{}{#1}{#2}
+}
+%
+% this is used for components that are mainly node-style but have a path-style form
+%
+\def\pgfcirc at node@to at path#1#2#3{%
+    % add a path-style component based on a node-style one without mangling the name
+    % of the shape.
+    % #1: node-type shape name (existing)
+    % #2: path-type name (to be created)
+    % #3: additional options to add to the path style
+    %
+    \expandafter\def\csname pgf at circ@#1 at path\endcsname##1{\pgf at circ@bipole at path@base{}{##1}{#1}{}}%
+    \compattikzset{#2/.style = {\circuitikzbasekey,
+        /tikz/to path=\csname pgf at circ@#1 at path\endcsname{##1},
+        #3}}%
+    \ctikzset{bipoles/#1/height/.initial=1}%
+}
+%%
+%% ultra-generic bipole path
+%% I am not sure what the last argument is needed for, but don't touch it or everything explodes
+%%
+\def\pgf at circ@bipole at path@base#1#2#3#4{%
+    %
+    % Create a path-style component based on a node-style shape
+    % #1: postfix to be added to the name path to obtain the main shape name
+    % #2: text to be passed as text to the node
+    % #3: name of the bipole component
+    % #4: this will be filled by the argument of the to-path
+    %
+    \pgfextra{
+        \ctikzset{bipole/kind = #3}
+        \edef\pgf at temp{\ctikzvalof{bipole/name}}
+        \def\pgf at circ@temp{}
+        \ifx\pgf at temp\pgf at circ@temp % if it has not a name
+            \pgfmathrandominteger{\pgf at circ@rand}{1000}{9999}
+            \ctikzset{bipole/name = pgfcirc@#3\pgf at circ@rand} % create it (re-usage should not create problem, but...)
+            \edef\pgfcirc at a@prefix{pgfcirc}% do not pollute the namespace for nothing
+        \else
+            \edef\pgfcirc at a@prefix{\ctikzvalof{bipole/name}}% for exporting v-i-f anchors
+        \fi
+    }
+    % save start and stop values
+    % notice that we DO NOT MOVE the path position at all!
+    coordinate (\ctikzvalof{bipole/name}start) at (\tikztostart)
+    coordinate (\ctikzvalof{bipole/name}end) at (\tikztotarget)
+    \pgfextra{
+        % find the direction (angle) of the path
+        \pgfmathanglebetweenpoints{\pgfpointanchor{\ctikzvalof{bipole/name}start}{center}}
+            {\pgfpointanchor{\ctikzvalof{bipole/name}end}{center}}
+        \edef\pgf at circ@direction{\pgfmathresult}
+        \expandafter\xdef\csname pgfcirc@\pgfcirc at a@prefix-direction\endcsname{\pgf at circ@direction}
+    }
+    % position the component in the middle of the path. We DO NOT MOVE the current position!
+    node[#3#1, rotate=\pgf at circ@direction, yscale=\ctikzvalof{mirror value},
+        xscale=\ctikzvalof{invert value}] (\ctikzvalof{bipole/name})
+        at ($(\tikztostart) ! .5 ! (\tikztotarget)$) {#2}
+    % set start and end labels
+    \ifpgf at circuit@bipole at inverted
+        \ifcsname pgf at anchor@#3#1 at pathstart\endcsname%if special path-anchors are defined, use them!
+            coordinate	(pgfcirc at anchorstartnode) at (\ctikzvalof{bipole/name}.pathend)
+            coordinate	(pgfcirc at anchorendnode) at (\ctikzvalof{bipole/name}.pathstart)
+        \else
+            coordinate	(pgfcirc at anchorstartnode) at (\ctikzvalof{bipole/name}.right)
+            coordinate	(pgfcirc at anchorendnode) at (\ctikzvalof{bipole/name}.left)
+        \fi
+        \else
+        \ifcsname pgf at anchor@#3#1 at pathstart\endcsname%if special path-anchors are defined, use them!
+            coordinate	(pgfcirc at anchorstartnode) at (\ctikzvalof{bipole/name}.pathstart)
+            coordinate	(pgfcirc at anchorendnode) at (\ctikzvalof{bipole/name}.pathend)
+        \else
+            coordinate	(pgfcirc at anchorstartnode) at (\ctikzvalof{bipole/name}.left)
+            coordinate	(pgfcirc at anchorendnode) at (\ctikzvalof{bipole/name}.right)
+        \fi
+    \fi
+    % draw the leads unless it's an open circuit
+    % stop at the component
+    \pgfextra{\def\pgf at temp{open}\def\pgf at circ@temp{#3}}
+    \ifx\pgf at temp\pgf at circ@temp  % if it is an open do nothing
+    \else
+        % it is important to start the path with -- to have correct line joins!
+        -- (\tikztostart) -- (pgfcirc at anchorstartnode)
+    \fi
+    % Add all the "ornaments": labels, annotations, voltages, currents and flows
+    \drawpoles
+    \pgf at circ@ifkeyempty{bipole/label/name}\else\pgf at circ@drawlabels{label}\fi
+    \pgf at circ@ifkeyempty{bipole/annotation/name}\else\pgf at circ@drawlabels{annotation}\fi
+    % the following  must be made in their own path scope to avoid crash in TikZ 3.1.8/3.1.8a
+    % it should be logically safe for older version too --- even if TikZ reverted the change
+    % use explandable ifs too, thanks to Henri Menke
+    {\pgfcirc at if@has at v{\pgf at circ@drawvoltage}{}}%
+    {\pgfcirc at if@has at i{\pgf at circ@drawcurrent}{}}%
+    {\pgfcirc at if@has at f{\pgf at circ@drawflow}{}}%
+    % finish the path from the component to the final target
+    % you never know --- re-set \pgf at temp to detect open
+    \pgfextra{\def\pgf at temp{open}\def\pgf at circ@temp{#3}}
+    \ifx\pgf at temp\pgf at circ@temp  % if it is an open do nothing
+        (\tikztotarget)
+    \else
+        (pgfcirc at anchorendnode)  -- (\tikztotarget)
+    \fi
+    % reset internal circuit keys
+    \pgfextra{\pgfcircresetpath}
+    %draw pending nodes an path
+    \tikztonodes
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Handling of terminals
+
+\ctikzset{bipole/nodes/.is family}
+\ctikzset{bipole/nodes/left/.initial=none}
+\ctikzset{bipole/nodes/right/.initial=none}
+\tikzset{bipole nodes/.style n args={2}{%
+    \circuitikzbasekey/bipole/nodes/left=#1,
+    \circuitikzbasekey/bipole/nodes/right=#2
+    }
+}
+
+%% Easily usable styles
+
+\ctikzset{o-o/.style = {\circuitikzbasekey/bipole/nodes/left=ocirc, \circuitikzbasekey/bipole/nodes/right=ocirc}}
+\ctikzset{-o/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=ocirc}}
+\ctikzset{o-/.style = {\circuitikzbasekey/bipole/nodes/left=ocirc, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{*-o/.style = {\circuitikzbasekey/bipole/nodes/left=circ, \circuitikzbasekey/bipole/nodes/right=ocirc}}
+\ctikzset{o-*/.style = {\circuitikzbasekey/bipole/nodes/left=ocirc, \circuitikzbasekey/bipole/nodes/right=circ}}
+\ctikzset{d-o/.style = {\circuitikzbasekey/bipole/nodes/left=diamondpole, \circuitikzbasekey/bipole/nodes/right=ocirc}}
+\ctikzset{o-d/.style = {\circuitikzbasekey/bipole/nodes/left=ocirc, \circuitikzbasekey/bipole/nodes/right=diamondpole}}
+\ctikzset{*-/.style = {\circuitikzbasekey/bipole/nodes/left=circ, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{-*/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=circ}}
+\ctikzset{d-/.style = {\circuitikzbasekey/bipole/nodes/left=diamondpole, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{-d/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=diamondpole}}
+\ctikzset{*-*/.style = {\circuitikzbasekey/bipole/nodes/left=circ, \circuitikzbasekey/bipole/nodes/right=circ}}
+\ctikzset{d-*/.style = {\circuitikzbasekey/bipole/nodes/left=diamondpole, \circuitikzbasekey/bipole/nodes/right=circ}}
+\ctikzset{*-d/.style = {\circuitikzbasekey/bipole/nodes/left=circ, \circuitikzbasekey/bipole/nodes/right=diamondpole}}
+\ctikzset{d-d/.style = {\circuitikzbasekey/bipole/nodes/left=diamondpole, \circuitikzbasekey/bipole/nodes/right=diamondpole}}
+
+% rectjoinfill workarounds
+
+\ctikzset{.-/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{.-*/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=circ}}
+\ctikzset{.-o/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=ocirc}}
+\ctikzset{.-d/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=diamondpole}}
+\ctikzset{-./.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+\ctikzset{o-./.style = {\circuitikzbasekey/bipole/nodes/left=ocirc, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+\ctikzset{*-./.style = {\circuitikzbasekey/bipole/nodes/left=circ, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+\ctikzset{d-./.style = {\circuitikzbasekey/bipole/nodes/left=diamondpole, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+\ctikzset{.-./.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+
+\tikzset{reversed/.style = {\circuitikzbasekey/bipole/inverted=true}}
+
+\def\drawpoles{
+    \pgfextra{ \edef\pgf at circ@temp{\ctikzvalof{bipole/nodes/left}} \def\pgf at temp{none}}
+    \ifx\pgf at temp\pgf at circ@temp\else(\tikztostart) node[\pgf at circ@temp] {}\fi
+    \pgfextra{ \edef\pgf at circ@temp{\ctikzvalof{bipole/nodes/right}} }
+    \ifx\pgf at temp\pgf at circ@temp\else(\tikztotarget) node[\pgf at circ@temp] {}\fi
+}
+
+%% Path definitions
+\def\pgf at circ@resistor at path#1{\ifpgf at circuit@europeanresistor\pgf at circ@bipole at path{generic}{#1}\else\pgf at circ@bipole at path{resistor}{#1}\fi}
+\def\pgf at circ@vresistor at path#1{\ifpgf at circuit@europeanresistor\pgf at circ@bipole at path{tgeneric}{#1}\else\pgf at circ@bipole at path{vresistor}{#1}\fi}
+\def\pgf at circ@sresistor at path#1{\ifpgf at circuit@europeanresistor\pgf at circ@bipole at path{thermistor}{#1}\else\pgf at circ@bipole at path{resistivesens}{#1}\fi}
+\def\pgf at circ@potentiometer at path#1{\ifpgf at circuit@europeanresistor\pgf at circ@bipole at path{genericpotentiometer}{#1}\else\pgf at circ@bipole at path{potentiometer}{#1}\fi}
+\def\pgf at circ@thermistor at path#1{\pgf at circ@bipole at path{thermistor}{#1}}
+\def\pgf at circ@thermistorptc at path#1{\pgf at circ@bipole at path{thermistorptc}{#1}}
+\def\pgf at circ@thermistorntc at path#1{\pgf at circ@bipole at path{thermistorntc}{#1}}
+\def\pgf at circ@varistor at path#1{\pgf at circ@bipole at path{varistor}{#1}}
+\def\pgf at circ@capacitor at path#1{\pgf at circ@bipole at path{capacitor}{#1}}
+\def\pgf at circ@capacitivesens at path#1{\pgf at circ@bipole at path{capacitivesens}{#1}}
+\def\pgf at circ@ecapacitor at path#1{\pgf at circ@bipole at path{ecapacitor}{#1}}
+%% polar capacitor is deprectaed, use curved capacitor instead
+\def\pgf at circ@polarcapacitor at path#1{\pgf at circ@bipole at path{polarcapacitor}{#1}}
+\def\pgf at circ@ccapacitor at path#1{\pgf at circ@bipole at path{ccapacitor}{#1}}
+\def\pgf at circ@vcapacitor at path#1{\pgf at circ@bipole at path{vcapacitor}{#1}}
+\def\pgf at circ@piezoelectric at path#1{\pgf at circ@bipole at path{piezoelectric}{#1}}
+\def\pgf at circ@battery at path#1{\pgf at circ@bipole at path{battery}{#1}}
+\def\pgf at circ@batteryone at path#1{\pgf at circ@bipole at path{battery1}{#1}}
+\def\pgf at circ@batterytwo at path#1{\pgf at circ@bipole at path{battery2}{#1}}
+\def\pgf at circ@europeaninductor at path#1{\pgf at circ@bipole at path{fullgeneric}{#1}}
+\def\pgf at circ@americaninductor at path#1{\pgf at circ@bipole at path{americaninductor}{#1}}
+\def\pgf at circ@cuteinductor at path#1{\pgf at circ@bipole at path{cuteinductor}{#1}}
+\def\pgf at circ@cutechoke at path#1{\pgf at circ@bipole at path{cutechoke}{#1}}
+\def\pgf at circ@inductor at path#1{%
+    \pgfextra{
+        \edef\pgf at circ@temp{\ctikzvalof{inductor}}%
+        \def\pgf at temp{european}%
+    }
+    \ifx\pgf at temp\pgf at circ@temp%
+        \pgf at circ@europeaninductor at path{#1}%
+    \else%
+        \pgfextra{	\def\pgf at temp{cute} }%
+        \ifx\pgf at temp\pgf at circ@temp%
+            \pgf at circ@cuteinductor at path{#1}%
+        \else%
+            \pgf at circ@americaninductor at path{#1}%
+        \fi%
+    \fi%
+}
+\def\pgf at circ@vinductor at path#1{
+    \pgfextra{
+        \edef\pgf at circ@temp{\ctikzvalof{inductor}}%
+        \def\pgf at temp{european}%
+    }
+    \ifx\pgf at temp\pgf at circ@temp%
+        \pgf at circ@veuropeaninductor at path{#1}%
+    \else%
+        \pgfextra{	\def\pgf at temp{cute} }%
+        \ifx\pgf at temp\pgf at circ@temp%
+            \pgf at circ@vcuteinductor at path{#1}%
+        \else%
+            \pgf at circ@vamericaninductor at path{#1}%
+        \fi%
+    \fi%
+}
+\def\pgf at circ@inductivesens at path#1{%
+    \pgfextra{
+        \edef\pgf at circ@temp{\ctikzvalof{inductor}}%
+        \def\pgf at temp{european}%
+    }
+    \ifx\pgf at temp\pgf at circ@temp%
+        \pgf at circ@europeaninductivesens at path{#1}%
+    \else%
+        \pgfextra{	\def\pgf at temp{cute} }%
+        \ifx\pgf at temp\pgf at circ@temp%
+            \pgf at circ@cuteinductivesens at path{#1}%
+        \else%
+            \pgf at circ@americaninductivesens at path{#1}%
+        \fi%
+    \fi%
+}
+\def\pgf at circ@veuropeaninductor at path#1{\pgf at circ@bipole at path{tfullgeneric}{#1}}
+\def\pgf at circ@vamericaninductor at path#1{\pgf at circ@bipole at path{vamericaninductor}{#1}}
+\def\pgf at circ@vcuteinductor at path#1{\pgf at circ@bipole at path{vcuteinductor}{#1}}
+\def\pgf at circ@europeaninductivesens at path#1{\pgf at circ@bipole at path{sfullgeneric}{#1}}
+\def\pgf at circ@americaninductivesens at path#1{\pgf at circ@bipole at path{samericaninductor}{#1}}
+\def\pgf at circ@cuteinductivesens at path#1{\pgf at circ@bipole at path{scuteinductor}{#1}}
+\def\pgf at circ@lamp at path#1{\pgf at circ@bipole at path{lamp}{#1}}
+\def\pgf at circ@bulb at path#1{\pgf at circ@bipole at path{bulb}{#1}}
+\def\pgf at circ@esource at path#1{\pgf at circ@bipole at path{esource}{#1}}
+\def\pgf at circ@pvsource at path#1{\pgf at circ@bipole at path{pvsource}{#1}}
+\def\pgf at circ@vsource at path#1{\pgf at circ@bipole at path{vsource}{#1}}
+\def\pgf at circ@dcvsource at path#1{\pgf at circ@bipole at path{dcvsource}{#1}}
+\def\pgf at circ@vsourceam at path#1{\pgf at circ@bipole at path{vsourceAM}{#1}}
+\def\pgf at circ@vsourcesin at path#1{\pgf at circ@bipole at path{vsourcesin}{#1}}
+\def\pgf at circ@isource at path#1{\pgf at circ@bipole at path{isource}{#1}}
+\def\pgf at circ@oosource at path#1{\pgf at circ@bipole at path{oosource}{#1}}
+\def\pgf at circ@oosourcetrans at path#1{\pgf at circ@bipole at path{oosourcetrans}{#1}}
+\def\pgf at circ@ooosource at path#1{\pgf at circ@bipole at path{ooosource}{#1}}
+\def\pgf at circ@dcisource at path#1{\pgf at circ@bipole at path{dcisource}{#1}}
+\def\pgf at circ@isourcesin at path#1{\pgf at circ@bipole at path{isourcesin}{#1}}
+\def\pgf at circ@vsourcesquare at path#1{\pgf at circ@bipole at path{vsourcesquare}{#1}}
+\def\pgf at circ@vsourcetri at path#1{\pgf at circ@bipole at path{vsourcetri}{#1}}
+\def\pgf at circ@isourceam at path#1{\pgf at circ@bipole at path{isourceAM}{#1}}
+\def\pgf at circ@ecsource at path#1{\pgf at circ@bipole at path{ecsource}{#1}}
+\def\pgf at circ@cvsource at path#1{\pgf at circ@bipole at path{cvsource}{#1}}
+\def\pgf at circ@cvsourceam at path#1{\pgf at circ@bipole at path{cvsourceAM}{#1}}
+\def\pgf at circ@cvsourcesin at path#1{\pgf at circ@bipole at path{cvsourcesin}{#1}}
+\def\pgf at circ@cisource at path#1{\pgf at circ@bipole at path{cisource}{#1}}
+\def\pgf at circ@cisourceam at path#1{\pgf at circ@bipole at path{cisourceAM}{#1}}
+\def\pgf at circ@cisourcesin at path#1{\pgf at circ@bipole at path{cisourcesin}{#1}}
+\def\pgf at circ@short at path#1{\pgf at circ@bipole at path{short}{#1}}
+\def\pgf at circ@cspst at path#1{\pgf at circ@bipole at path{cspst}{#1}}
+\def\pgf at circ@ospst at path#1{\pgf at circ@bipole at path{ospst}{#1}}
+\def\pgf at circ@nos at path#1{\pgf at circ@bipole at path{nos}{#1}}
+\def\pgf at circ@ncs at path#1{\pgf at circ@bipole at path{ncs}{#1}}
+\def\pgf at circ@pushbutton at path#1{\pgf at circ@bipole at path{pushbutton}{#1}}
+\def\pgf at circ@ncpushbutton at path#1{\pgf at circ@bipole at path{ncpushbutton}{#1}}
+\def\pgf at circ@pushbuttonc at path#1{\pgf at circ@bipole at path{pushbuttonc}{#1}}
+\def\pgf at circ@ncpushbuttono at path#1{\pgf at circ@bipole at path{ncpushbuttono}{#1}}
+\def\pgf at circ@open at path#1{\pgf at circ@bipole at path{open}{#1}}
+\def\pgf at circ@generic at path#1{\pgf at circ@bipole at path{generic}{#1}}
+\def\pgf at circ@ageneric at path#1{\pgf at circ@bipole at path{ageneric}{#1}}
+\def\pgf at circ@tgeneric at path#1{\pgf at circ@bipole at path{tgeneric}{#1}}
+\def\pgf at circ@xgeneric at path#1{\pgf at circ@bipole at path{xgeneric}{#1}}
+\def\pgf at circ@fullgeneric at path#1{\pgf at circ@bipole at path{fullgeneric}{#1}}
+\def\pgf at circ@tfullgeneric at path#1{\pgf at circ@bipole at path{tfullgeneric}{#1}}
+\def\pgf at circ@ammeter at path#1{\pgf at circ@bipole at path{ammeter}{#1}}
+\def\pgf at circ@ohmmeter at path#1{\pgf at circ@bipole at path{ohmmeter}{#1}}
+\def\pgf at circ@voltmeter at path#1{\pgf at circ@bipole at path{voltmeter}{#1}}
+\def\pgf at circ@oscope at path#1{\pgf at circ@bipole at path{oscope}{#1}}
+\def\pgf at circ@empty at path#1{}
+\def\pgf at circ@photoresistor at path#1{\pgf at circ@bipole at path{photoresistor}{#1}}
+\def\pgf at circ@emptythyristor at path#1{\pgf at circ@bipole at path{emptythyristor}{#1}}
+\def\pgf at circ@fullthyristor at path#1{\pgf at circ@bipole at path{fullthyristor}{#1}}
+\def\pgf at circ@toggleswitch at path#1{\pgf at circ@bipole at path{toggleswitch}{#1}}
+\def\pgf at circ@memristor at path#1{\pgf at circ@bipole at path{memristor}{#1}}
+\def\pgf at circ@emptytriac at path#1{\pgf at circ@bipole at path{emptytriac}{#1}}
+\def\pgf at circ@fulltriac at path#1{\pgf at circ@bipole at path{fulltriac}{#1}}
+\def\pgf at circ@tline at path#1{\pgf at circ@bipole at path{tline}{#1}}
+\def\pgf at circ@mstline at path#1{\pgf at circ@bipole at path{mstline}{#1}}
+\def\pgf at circ@squid at path#1{\pgf at circ@bipole at path{squid}{#1}}
+\def\pgf at circ@barrier at path#1{\pgf at circ@bipole at path{barrier}{#1}}
+\def\pgf at circ@openbarrier at path#1{\pgf at circ@bipole at path{openbarrier}{#1}}
+\def\pgf at circ@thermocouple at path#1{\pgf at circ@bipole at path{thermocouple}{#1}}
+\def\pgf at circ@fuse at path#1{\pgf at circ@bipole at path{fuse}{#1}}
+\def\pgf at circ@afuse at path#1{\pgf at circ@bipole at path{afuse}{#1}}
+
+\def\pgf at circ@gfsurgearrester at path#1{\ifpgf at circuit@europeangfsurgearrester\pgf at circ@europeangfsurgearrester at path{#1}\else\pgf at circ@americangfsurgearrester at path{#1}\fi}
+\def\pgf at circ@europeangfsurgearrester at path#1{\pgf at circ@bipole at path{european gas filled surge arrester}{#1}}
+\def\pgf at circ@americangfsurgearrester at path#1{\pgf at circ@bipole at path{american gas filled surge arrester}{#1}}
+
+\def\pgf at circ@twoport at path#1{\pgf at circ@bipole at path{twoport}{#1}}
+\def\pgf at circ@twoportsplit at path#1{\pgf at circ@bipole at path{twoportsplit}{#1}}
+\def\pgf at circ@vco at path#1{\pgf at circ@bipole at path{vco}{#1}}
+\def\pgf at circ@bandpass at path#1{\pgf at circ@bipole at path{bandpass}{#1}}
+\def\pgf at circ@bandstop at path#1{\pgf at circ@bipole at path{bandstop}{#1}}
+\def\pgf at circ@highpass at path#1{\pgf at circ@bipole at path{highpass}{#1}}
+\def\pgf at circ@lowpass at path#1{\pgf at circ@bipole at path{lowpass}{#1}}
+\def\pgf at circ@allpass at path#1{\pgf at circ@bipole at path{allpass}{#1}}
+\def\pgf at circ@adc at path#1{\pgf at circ@bipole at path{adc}{#1}}
+\def\pgf at circ@dac at path#1{\pgf at circ@bipole at path{dac}{#1}}
+\def\pgf at circ@dsp at path#1{\pgf at circ@bipole at path{dsp}{#1}}
+\def\pgf at circ@fft at path#1{\pgf at circ@bipole at path{fft}{#1}}
+\def\pgf at circ@amp at path#1{\pgf at circ@bipole at path{amp}{#1}}
+\def\pgf at circ@vamp at path#1{\pgf at circ@bipole at path{vamp}{#1}}
+\def\pgf at circ@piattenuator at path#1{\pgf at circ@bipole at path{piattenuator}{#1}}
+\def\pgf at circ@vpiattenuator at path#1{\pgf at circ@bipole at path{vpiattenuator}{#1}}
+\def\pgf at circ@tattenuator at path#1{\pgf at circ@bipole at path{tattenuator}{#1}}
+\def\pgf at circ@vtattenuator at path#1{\pgf at circ@bipole at path{vtattenuator}{#1}}
+\def\pgf at circ@phaseshifter at path#1{\pgf at circ@bipole at path{phaseshifter}{#1}}
+\def\pgf at circ@vphaseshifter at path#1{\pgf at circ@bipole at path{vphaseshifter}{#1}}
+\def\pgf at circ@detector at path#1{\pgf at circ@bipole at path{detector}{#1}}
+%
+\def\pgf at circ@sacdc at path#1{\pgf at circ@bipole at path{sacdc}{#1}}
+\def\pgf at circ@sdcac at path#1{\pgf at circ@bipole at path{sdcac}{#1}}
+\def\pgf at circ@tacdc at path#1{\pgf at circ@bipole at path{tacdc}{#1}}
+\def\pgf at circ@tdcac at path#1{\pgf at circ@bipole at path{tdcac}{#1}}
+
+%%Mechanical
+\def\pgf at circ@spring at path#1{\pgf at circ@bipole at path{spring}{#1}}
+\def\pgf at circ@inerter at path#1{\pgf at circ@bipole at path{inerter}{#1}}
+\def\pgf at circ@mass at path#1{\pgf at circ@bipole at path{mass}{#1}}
+\def\pgf at circ@damper at path#1{\pgf at circ@bipole at path{damper}{#1}}
+\def\pgf at circ@viscoe at path#1{\pgf at circ@bipole at path{viscoe}{#1}}
+
+%% Styles
+
+\def\comnpatname{\ifpgf at circuit@compat *\else\fi}
+\def\compattikzset#1{%
+    % \typeout{BIPOLEDEF:\space \detokenize{#1}}%
+    \tikzset{\comnpatname#1}}
+
+%\def\ctikzsetbipole#1#2{%
+%	\tikzset{#1/.style= {to path=#2, \circuitikzbasekey, l=##1}}%
+%}
+
+\compattikzset{spring/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@spring at path, l=#1}}
+\compattikzset{inerter/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@inerter at path, l=#1}}
+\compattikzset{mass/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@mass at path, l=#1}}
+\compattikzset{damper/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@damper at path, l=#1}}
+\compattikzset{viscoe/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@viscoe at path, l=#1}}
+\compattikzset{resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf at circ@resistor at path, l=#1}}
+\compattikzset{american resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf at circ@bipole at path{resistor}{#1}, l=#1}}
+\compattikzset{european resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf at circ@bipole at path{generic}{#1}, l=#1}}
+\compattikzset{potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@potentiometer at path, l=#1}}
+\compattikzset{varistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@varistor at path, l=#1}}
+\compattikzset{photoresistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@photoresistor at path, l=#1}}
+\compattikzset{thermistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@thermistor at path, l=#1}}
+\compattikzset{thermistor ptc/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@thermistorptc at path, l=#1}}
+\compattikzset{thermistor ntc/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@thermistorntc at path, l=#1}}
+\compattikzset{american potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@bipole at path{potentiometer}{#1}, l=#1}}
+\compattikzset{european potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@bipole at path{genericpotentiometer}{#1}, l=#1}}
+\compattikzset{variable resistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@vresistor at path, l=#1}}
+\compattikzset{variable american resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf at circ@bipole at path{vresistor}{#1}, l=#1}}
+\compattikzset{variable european resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf at circ@bipole at path{tgeneric}{#1}, l=#1}}
+\compattikzset{capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@capacitor at path, l=#1}}
+\compattikzset{elko/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@ecapacitor at path, l=#1}}
+\compattikzset{ecapacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@ecapacitor at path, l=#1}}
+% polar capacitor is deprecated, use curved capacitor instead
+\compattikzset{polar capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@polarcapacitor at path, l=#1}}
+\compattikzset{curved capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@ccapacitor at path, l=#1}}
+\compattikzset{variable capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@vcapacitor at path, l=#1}}
+\compattikzset{piezoelectric/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@piezoelectric at path, l=#1}}
+\compattikzset{battery/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@battery at path, \circuitikzbasekey/bipole/is voltage=true,  \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{battery1/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@batteryone at path, \circuitikzbasekey/bipole/is voltage=true,  \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{battery2/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@batterytwo at path, \circuitikzbasekey/bipole/is voltage=true,  \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@inductor at path, l=#1}}
+\compattikzset{gf surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@gfsurgearrester at path, l=#1}}
+\compattikzset{american gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@americangfsurgearrester at path, l=#1}}
+\compattikzset{european gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@europeangfsurgearrester at path, l=#1}}
+\compattikzset{gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@gfsurgearrester at path, l=#1}}
+\compattikzset{american inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@americaninductor at path, l=#1}}
+\compattikzset{cute inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@cuteinductor at path, l=#1}}
+\compattikzset{cute choke/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@cutechoke at path, l=#1}}
+\compattikzset{european inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@europeaninductor at path, l=#1}}
+\compattikzset{variable inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@vinductor at path, l=#1}}
+\compattikzset{variable european inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@veuropeaninductor at path, l=#1}}
+\compattikzset{variable american inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@vamericaninductor at path, l=#1}}
+\compattikzset{variable cute inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@vcuteinductor at path, l=#1}}
+\compattikzset{tline/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@tline at path, l=#1}}
+\compattikzset{transmission line/.style = {tline = #1}}
+\compattikzset{TL/.style = {tline = #1}}
+\compattikzset{mstline/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@mstline at path, l=#1}}
+\compattikzset{european voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@vsource at path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{american voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@vsourceam at path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{european current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@isource at path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{american current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@isourceam at path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{empty controlled source/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@ecsource at path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{european controlled voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@cvsource at path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{american controlled voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@cvsourceam at path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{european controlled current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@cisource at path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{american controlled current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@cisourceam at path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{sinusoidal voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@vsourcesin at path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }}
+\compattikzset{square voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@vsourcesquare at path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }}
+\compattikzset{triangle voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@vsourcetri at path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }}
+\compattikzset{sinusoidal current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@isourcesin at path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{controlled sinusoidal voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@cvsourcesin at path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{controlled sinusoidal current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@cisourcesin at path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+
+\compattikzset{voltage source/.style = {\comnpatname \ifpgf at circuit@europeanvoltage european \else american \fi voltage source, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{current source/.style = {\comnpatname \ifpgf at circuit@europeancurrent european \else american \fi current source = #1, \circuitikzbasekey/bipole/is current=true}}
+\compattikzset{controlled voltage source/.style = {\comnpatname \ifpgf at circuit@europeanvoltage european \else american \fi controlled voltage source, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{controlled current source/.style = {\comnpatname \ifpgf at circuit@europeancurrent european \else american \fi controlled current source = #1, \circuitikzbasekey/bipole/is current=true}}
+
+
+\compattikzset{generic/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@generic at path, l=#1}}
+\compattikzset{xgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@xgeneric at path, l=#1}}
+\compattikzset{ageneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@ageneric at path, l=#1}}
+\compattikzset{tgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@tgeneric at path, l=#1}}
+\compattikzset{fullgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@fullgeneric at path, l=#1}}
+\compattikzset{tfullgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@tfullgeneric at path, l=#1}}
+\compattikzset{short/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@short at path}}
+\compattikzset{open/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@open at path}}
+
+\compattikzset{lamp/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@lamp at path}}
+\compattikzset{bulb/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@bulb at path, l=#1}}
+
+\compattikzset{squid/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@squid at path}}
+\compattikzset{barrier/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@barrier at path}}
+\compattikzset{openbarrier/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@openbarrier at path}}
+\compattikzset{thermocouple/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@thermocouple at path}}
+\compattikzset{fuse/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@fuse at path}}
+\compattikzset{asymmetric fuse/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@afuse at path}}
+
+\compattikzset{twoport/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@twoport at path}}
+\compattikzset{twoportsplit/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@twoportsplit at path}}
+\compattikzset{vco/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@vco at path}}
+\compattikzset{bandpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@bandpass at path}}
+\compattikzset{bandstop/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@bandstop at path}}
+\compattikzset{highpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@highpass at path}}
+\compattikzset{lowpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@lowpass at path}}
+\compattikzset{allpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@allpass at path}}
+\compattikzset{adc/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@adc at path}}
+\compattikzset{dac/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@dac at path}}
+\compattikzset{dsp/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@dsp at path}}
+\compattikzset{fft/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@fft at path}}
+\compattikzset{amp/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@amp at path}}
+\compattikzset{vamp/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@vamp at path}}
+\compattikzset{piattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@piattenuator at path}}
+\compattikzset{vpiattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@vpiattenuator at path}}
+\compattikzset{tattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@tattenuator at path}}
+\compattikzset{vtattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@vtattenuator at path}}
+\compattikzset{phaseshifter/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@phaseshifter at path}}
+\compattikzset{vphaseshifter/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@vphaseshifter at path}}
+\compattikzset{detector/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@detector at path}}
+%
+\compattikzset{sacdc/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@sacdc at path, l=#1}}
+\compattikzset{sdcac/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@sdcac at path, l=#1}}
+\compattikzset{tacdc/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@tacdc at path, l=#1}}
+\compattikzset{tdcac/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@tdcac at path, l=#1}}
+
+% % % % % %
+% % Begin of Diodes
+% % % % % %
+
+\def\pgf at circ@fulldiode at path#1{\pgf at circ@bipole at path{fulldiode}{#1}}
+\def\pgf at circ@fullzdiode at path#1{\pgf at circ@bipole at path{fullzdiode}{#1}}
+\def\pgf at circ@fullzzdiode at path#1{\pgf at circ@bipole at path{fullzzdiode}{#1}}
+\def\pgf at circ@fullsdiode at path#1{\pgf at circ@bipole at path{fullsdiode}{#1}}
+\def\pgf at circ@fulltdiode at path#1{\pgf at circ@bipole at path{fulltdiode}{#1}}
+\def\pgf at circ@fulllediode at path#1{\pgf at circ@bipole at path{fulllediode}{#1}}
+\def\pgf at circ@fullpdiode at path#1{\pgf at circ@bipole at path{fullpdiode}{#1}}
+\def\pgf at circ@fullvarcap at path#1{\pgf at circ@bipole at path{fullvarcap}{#1}}
+\def\pgf at circ@fullbidirectionaldiode at path#1{\pgf at circ@bipole at path{fullbidirectionaldiode}{#1}}
+\def\pgf at circ@emptydiode at path#1{\pgf at circ@bipole at path{emptydiode}{#1}}
+\def\pgf at circ@emptyzdiode at path#1{\pgf at circ@bipole at path{emptyzdiode}{#1}}
+\def\pgf at circ@emptyzzdiode at path#1{\pgf at circ@bipole at path{emptyzzdiode}{#1}}
+\def\pgf at circ@emptysdiode at path#1{\pgf at circ@bipole at path{emptysdiode}{#1}}
+\def\pgf at circ@emptytdiode at path#1{\pgf at circ@bipole at path{emptytdiode}{#1}}
+\def\pgf at circ@emptylediode at path#1{\pgf at circ@bipole at path{emptylediode}{#1}}
+\def\pgf at circ@emptypdiode at path#1{\pgf at circ@bipole at path{emptypdiode}{#1}}
+\def\pgf at circ@emptyvarcap at path#1{\pgf at circ@bipole at path{emptyvarcap}{#1}}
+\def\pgf at circ@emptybidirectionaldiode at path#1{\pgf at circ@bipole at path{emptybidirectionaldiode}{#1}}
+
+\compattikzset{full diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@fulldiode at path}}
+\compattikzset{full Schottky diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@fullsdiode at path}}
+\compattikzset{full Zener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@fullzdiode at path}}
+\compattikzset{full ZZener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@fullzzdiode at path}}
+\compattikzset{full tunnel diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@fulltdiode at path}}
+\compattikzset{full photodiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@fullpdiode at path}}
+\compattikzset{full led/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@fulllediode at path}}
+\compattikzset{full varcap/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@fullvarcap at path}}
+\compattikzset{full bidirectionaldiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@fullbidirectionaldiode at path}}
+\compattikzset{full thyristor/.style =  {\circuitikzbasekey, /tikz/to path=\pgf at circ@fullthyristor at path}}
+\compattikzset{full triac/.style =  {\circuitikzbasekey, /tikz/to path=\pgf at circ@fulltriac at path}}
+
+\compattikzset{empty diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@emptydiode at path}}
+\compattikzset{empty Schottky diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@emptysdiode at path}}
+\compattikzset{empty Zener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@emptyzdiode at path}}
+\compattikzset{empty ZZener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@emptyzzdiode at path}}
+\compattikzset{empty tunnel diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@emptytdiode at path}}
+\compattikzset{empty photodiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@emptypdiode at path}}
+\compattikzset{empty led/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@emptylediode at path}}
+\compattikzset{empty varcap/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@emptyvarcap at path}}
+\compattikzset{empty bidirectionaldiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@emptybidirectionaldiode at path}}
+\compattikzset{empty thyristor/.style =  {\circuitikzbasekey, /tikz/to path=\pgf at circ@emptythyristor at path}}
+\compattikzset{empty triac/.style =  {\circuitikzbasekey, /tikz/to path=\pgf at circ@emptytriac at path}}
+
+\compattikzset{stroke diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf at circ@emptydiode at path}}
+\compattikzset{stroke Schottky diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf at circ@emptysdiode at path}}
+\compattikzset{stroke Zener diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf at circ@emptyzdiode at path}}
+\compattikzset{stroke ZZener diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf at circ@emptyzzdiode at path}}
+\compattikzset{stroke tunnel diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf at circ@emptytdiode at path}}
+\compattikzset{stroke photodiode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf at circ@emptypdiode at path}}
+\compattikzset{stroke led/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf at circ@emptylediode at path}}
+\compattikzset{stroke varcap/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf at circ@emptyvarcap at path}}
+\compattikzset{stroke thyristor/.style =  {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf at circ@emptythyristor at path}}
+%\compattikzset{stroke triac/.style =  {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf at circ@emptytriac at path}}
+
+\def\pgfcircdiodestylemacro{\ifpgf at circuit@strokediode stroke \else\ifpgf at circuit@fulldiode full \else empty \fi\fi}
+
+\compattikzset{Schottky diode/.style = {\comnpatname \pgfcircdiodestylemacro Schottky diode}}
+\compattikzset{Zener diode/.style = {\comnpatname \pgfcircdiodestylemacro Zener diode}}
+\compattikzset{ZZener diode/.style = {\comnpatname \pgfcircdiodestylemacro ZZener diode}}
+\compattikzset{tunnel diode/.style = {\comnpatname \pgfcircdiodestylemacro tunnel diode}}
+\compattikzset{photodiode/.style = {\comnpatname \pgfcircdiodestylemacro photodiode}}
+\compattikzset{led/.style = {\comnpatname \pgfcircdiodestylemacro led}}
+\compattikzset{varcap/.style = {\comnpatname \pgfcircdiodestylemacro varcap}}
+\compattikzset{diode/.style = {\comnpatname \pgfcircdiodestylemacro diode}}
+\compattikzset{thyristor/.style =  {\comnpatname \pgfcircdiodestylemacro thyristor}}
+\compattikzset{triac/.style =  {\comnpatname \ifpgf at circuit@fulldiode full \else empty \fi triac}}%no stroke triac!
+\compattikzset{bidirectionaldiode/.style =  {\comnpatname \ifpgf at circuit@fulldiode full \else empty \fi bidirectionaldiode}}%no stroke bidirectionaldiode! (based on triac)
+
+%% Define Shortcuts
+\compattikzset{Do/.style = {\comnpatname empty diode}}
+\compattikzset{tDo/.style = {\comnpatname empty tunnel diode}}
+\compattikzset{zDo/.style = {\comnpatname empty Zener diode}}
+\compattikzset{zzDo/.style = {\comnpatname empty ZZener diode}}
+\compattikzset{sDo/.style = {\comnpatname empty Schottky diode}}
+\compattikzset{pDo/.style = {\comnpatname empty photodiode}}
+\compattikzset{leDo/.style = {\comnpatname empty led}}
+\compattikzset{VCo/.style = {\comnpatname empty varcap}}
+\compattikzset{biDo/.style = {\comnpatname empty bidirectionaldiode}}
+\compattikzset{Tyo/.style = {\comnpatname empty thyristor}}
+\compattikzset{Tro/.style = {\comnpatname empty triac}}
+
+\compattikzset{D*/.style = {\comnpatname full diode}}
+\compattikzset{tD*/.style = {\comnpatname full tunnel diode}}
+\compattikzset{zD*/.style = {\comnpatname full Zener diode}}
+\compattikzset{zzD*/.style = {\comnpatname full ZZener diode}}
+\compattikzset{sD*/.style = {\comnpatname full Schottky diode}}
+\compattikzset{pD*/.style = {\comnpatname full photodiode}}
+\compattikzset{leD*/.style = {\comnpatname full led}}
+\compattikzset{VC*/.style = {\comnpatname full varcap}}
+\compattikzset{biD*/.style = {\comnpatname full bidirectionaldiode}}
+\compattikzset{Ty*/.style = {\comnpatname full thyristor}}
+\compattikzset{Tr*/.style = {\comnpatname full triac}}
+
+\compattikzset{D/.style = {\comnpatname diode}}
+\compattikzset{tD/.style = {\comnpatname tunnel diode}}
+\compattikzset{zD/.style = {\comnpatname Zener diode}}
+\compattikzset{zzD/.style = {\comnpatname ZZener diode}}
+\compattikzset{sD/.style = {\comnpatname Schottky diode}}
+\compattikzset{pD/.style = {\comnpatname photodiode}}
+\compattikzset{leD/.style = {\comnpatname led}}
+\compattikzset{VC/.style = {\comnpatname varcap}}
+\compattikzset{biD/.style = {\comnpatname bidirectionaldiode}}
+\compattikzset{Ty/.style = {\comnpatname thyristor}}
+\compattikzset{Tr/.style = {\comnpatname triac}}
+
+\compattikzset{D-/.style = {\comnpatname stroke diode}}
+\compattikzset{tD-/.style = {\comnpatname stroke tunnel diode}}
+\compattikzset{zD-/.style = {\comnpatname stroke Zener diode}}
+\compattikzset{zzD-/.style = {\comnpatname stroke ZZener diode}}
+\compattikzset{sD-/.style = {\comnpatname stroke Schottky diode}}
+\compattikzset{pD-/.style = {\comnpatname stroke photodiode}}
+\compattikzset{leD-/.style = {\comnpatname stroke led}}
+\compattikzset{VC-/.style = {\comnpatname stroke varcap}}
+\compattikzset{Ty-/.style = {\comnpatname stroke thyristor}}
+\compattikzset{Tr-/.style = {\comnpatname empty triac}}%no stroke triac!
+\compattikzset{biD-/.style = {\comnpatname empty bidirectionaldiode}}%no stroke bidirectionaldiode! (based on triac)
+
+% % % % % %
+% % End of Diodes
+% % % % % %
+
+
+\compattikzset{memristor/.style =  {\circuitikzbasekey, /tikz/to path=\pgf at circ@memristor at path}}
+\compattikzset{closing switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@cspst at path, l=#1}}
+\compattikzset{opening switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@ospst at path, l=#1}}
+\compattikzset{ncs/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@ncs at path, l=#1}}
+\compattikzset{nos/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@nos at path, l=#1}}
+\compattikzset{normal closed switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@ncs at path, l=#1}}
+\compattikzset{normal open switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@nos at path, l=#1}}
+\compattikzset{switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@cspst at path, l=#1}}
+\compattikzset{push button/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@pushbutton at path, l=#1}}
+\compattikzset{nopb/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@pushbutton at path, l=#1}}
+\compattikzset{normally open push button/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@pushbutton at path, l=#1}}
+\compattikzset{ncpb/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@ncpushbutton at path, l=#1}}
+\compattikzset{normally closed push button/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@ncpushbutton at path, l=#1}}
+\compattikzset{nopbc/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@pushbuttonc at path, l=#1}}
+\compattikzset{normally open push button closed/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@pushbuttonc at path, l=#1}}
+\compattikzset{ncpbo/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@ncpushbuttono at path, l=#1}}
+\compattikzset{normally closed push button open/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@ncpushbuttono at path, l=#1}}
+\compattikzset{toggle switch/.style =  {\circuitikzbasekey, /tikz/to path=\pgf at circ@toggleswitch at path}}
+
+\compattikzset{ammeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@ammeter at path}}
+\compattikzset{voltmeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@voltmeter at path}}
+\compattikzset{ohmmeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@ohmmeter at path}}
+\tikzset{oscope/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@oscope at path, l=#1}}
+
+% cute switches
+%% closed cute switch
+\def\pgf at circ@cuteclosedswitch at path#1{\pgf at circ@bipole at path{cuteclosedswitch}{#1}}
+\compattikzset{cute closed switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@cuteclosedswitch at path, l=#1}}
+\compattikzset{ccsw/.style= {\comnpatname cute closed switch= #1}}
+
+%% open cute switch
+\def\pgf at circ@cuteopenswitch at path#1{\pgf at circ@bipole at path{cuteopenswitch}{#1}}
+\compattikzset{cute open switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@cuteopenswitch at path, l=#1}}
+\compattikzset{cosw/.style= {\comnpatname cute open switch= #1}}
+
+%% closing cute switch
+\def\pgf at circ@cuteclosingswitch at path#1{\pgf at circ@bipole at path{cuteclosingswitch}{#1}}
+\compattikzset{cute closing switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@cuteclosingswitch at path, l=#1}}
+\compattikzset{ccgsw/.style= {\comnpatname cute closing switch= #1}}
+
+%% opening cute switch
+\def\pgf at circ@cuteopeningswitch at path#1{\pgf at circ@bipole at path{cuteopeningswitch}{#1}}
+\compattikzset{cute opening switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@cuteopeningswitch at path, l=#1}}
+\compattikzset{cogsw/.style= {\comnpatname cute opening switch= #1}}
+
+
+% short forms
+\compattikzset{esource/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@esource at path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true,  v=#1}}
+\compattikzset{pvsource/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@pvsource at path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true,  v=#1}}
+\compattikzset{dcvsource/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@dcvsource at path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{dcisource/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@dcisource at path, \circuitikzbasekey/bipole/is current=true, l=#1}}
+
+\compattikzset{ioosource/.style = {\circuitikzbasekey, \circuitikzbasekey/bipole/is current=true,/tikz/to path=\pgf at circ@oosource at path, i=#1}}
+\compattikzset{voosource/.style = {\circuitikzbasekey, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, /tikz/to path=\pgf at circ@oosource at path, v=#1}}
+\compattikzset{oosourcetrans/.style = {\circuitikzbasekey, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, /tikz/to path=\pgf at circ@oosourcetrans at path, v=#1}}
+\compattikzset{ooosource/.style = {\circuitikzbasekey, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, /tikz/to path=\pgf at circ@ooosource at path, v=#1}}
+
+\compattikzset{vsource/.style = {\comnpatname voltage source = #1}}
+\compattikzset{isource/.style = {\comnpatname current source = #1}}
+\compattikzset{cisource/.style = {\comnpatname controlled current source = #1}}
+\compattikzset{ecsource/.style = {\comnpatname empty controlled source = #1}}
+\compattikzset{cvsource/.style = {\comnpatname controlled voltage source = #1}}
+\compattikzset{vsourcesin/.style = {\comnpatname sinusoidal voltage source = #1}}
+\compattikzset{vsourcesquare/.style = {\comnpatname square voltage source = #1}}
+\compattikzset{vsourcetri/.style = {triangle voltage source = #1}}
+\compattikzset{isourcesin/.style = {\comnpatname sinusoidal current source = #1}}
+\compattikzset{cisourcesin/.style = {\comnpatname controlled sinusoidal current source = #1}}
+\compattikzset{cvsourcesin/.style = {\comnpatname controlled sinusoidal  voltage source = #1}}
+
+\compattikzset{controlled vsource/.style = {\comnpatname controlled voltage source = #1}}
+\compattikzset{controlled isource/.style = {\comnpatname controlled current source = #1}}
+\compattikzset{controlled vsourcesin/.style = {\comnpatname controlled sinusoidal  voltage source = #1}}
+\compattikzset{controlled isourcesin/.style = {\comnpatname controlled sinusoidal current source = #1}}
+
+\compattikzset{R/.style= {\comnpatname resistor = #1}}
+\compattikzset{vR/.style= {\comnpatname variable resistor = #1}}
+\compattikzset{phR/.style= {\comnpatname photoresistor = #1}}
+\compattikzset{thR/.style= {\comnpatname thermistor = #1}}
+\compattikzset{thRp/.style= {\comnpatname thermistor ptc= #1}}
+\compattikzset{thRn/.style= {\comnpatname thermistor ntc= #1}}
+\compattikzset{pR/.style= {\comnpatname potentiometer = #1}}
+\compattikzset{C/.style = {\comnpatname capacitor = #1}}
+\compattikzset{eC/.style = {\comnpatname ecapacitor = #1}}
+%% pC is deprecated, use cC instead
+\compattikzset{pC/.style = {\comnpatname polar capacitor = #1}}
+\compattikzset{cC/.style = {\comnpatname curved capacitor = #1}}
+\compattikzset{vC/.style = {\comnpatname variable capacitor = #1}}
+\compattikzset{PZ/.style = {\comnpatname piezoelectric = #1}}
+\compattikzset{L/.style = {\comnpatname inductor = #1}}
+\compattikzset{vL/.style = {\comnpatname variable inductor = #1}}
+\compattikzset{V/.style = {\comnpatname voltage source = #1}}
+\compattikzset{cV/.style = {\comnpatname controlled voltage source = #1}}
+\compattikzset{sV/.style = {\comnpatname sinusoidal voltage source = #1}}
+\compattikzset{sqV/.style = {\comnpatname square voltage source = #1}}
+\compattikzset{tV/.style = {\comnpatname triangle voltage source = #1}}
+\compattikzset{csV/.style = {\comnpatname controlled sinusoidal voltage source = #1}}
+\def\pgf at temp#1{
+    \compattikzset{V#1/.style = {\comnpatname voltage source, v#1=##1} }
+    \compattikzset{cV#1/.style = {\comnpatname controlled  voltage source, v#1=##1} }
+    \compattikzset{sV#1/.style = {\comnpatname sinusoidal  voltage source, v#1=##1} }
+    \compattikzset{csV#1/.style = {\comnpatname controlled sinusoidal voltage source, v#1=##1} }
+}
+\pgf at temp{_>} \pgf at temp{_<} \pgf at temp{^>} \pgf at temp{^<}
+\pgf at temp{>} \pgf at temp{<} \pgf at temp{^} \pgf at temp{_}
+
+%current sources
+\compattikzset{I/.style = {\comnpatname current source = #1}}
+\compattikzset{cI/.style = {\comnpatname controlled current source = #1}}
+\compattikzset{sI/.style = {\comnpatname sinusoidal current source = #1}}
+\compattikzset{csI/.style = {\comnpatname controlled sinusoidal current source = #1}}
+\def\pgf at temp#1{
+    \compattikzset{I#1/.style = {\comnpatname current source, i#1=##1} }
+    \compattikzset{cI#1/.style = {\comnpatname controlled current source, i#1=##1} }
+    \compattikzset{sI#1/.style = {\comnpatname sinusoidal current source, i#1=##1} }
+    \compattikzset{csI#1/.style = {\comnpatname controlled sinusoidal current source, i#1=##1} }
+}
+\pgf at temp{_>} \pgf at temp{_<} \pgf at temp{^>} \pgf at temp{^<}
+\pgf at temp{>_} \pgf at temp{<_} \pgf at temp{>^} \pgf at temp{<^}
+\pgf at temp{>} \pgf at temp{<} \pgf at temp{^} \pgf at temp{_}
+
+% cute sources
+\def\pgf at circ@vsourceC at path#1{\pgf at circ@bipole at path{vsourceC}{#1}}
+\compattikzset{cute european voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@vsourceC at path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{vsourceC/.style= {\comnpatname cute european voltage source= #1}}
+\compattikzset{ceV/.style= {\comnpatname cute european voltage source= #1}}
+
+\def\pgf at circ@isourceC at path#1{\pgf at circ@bipole at path{isourceC}{#1}}
+\compattikzset{cute european current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@isourceC at path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{isourceC/.style= {\comnpatname cute european current source= #1}}
+\compattikzset{ceI/.style= {\comnpatname cute european current source= #1}}
+
+\def\pgf at circ@cvsourceC at path#1{\pgf at circ@bipole at path{cvsourceC}{#1}}
+\compattikzset{cute european controlled voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@cvsourceC at path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{cvsourceC/.style= {\comnpatname cute european controlled voltage source= #1}}
+\compattikzset{cceV/.style= {\comnpatname cute european controlled voltage source= #1}}
+
+\def\pgf at circ@cisourceC at path#1{\pgf at circ@bipole at path{cisourceC}{#1}}
+\compattikzset{cute european controlled current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@cisourceC at path,  \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{cisourceC/.style= {\comnpatname cute european controlled current source= #1}}
+\compattikzset{cceI/.style= {\comnpatname cute european controlled current source= #1}}
+
+% noise sources
+\def\pgf at circ@vsourceN at path#1{\pgf at circ@bipole at path{vsourceN}{#1}}
+\compattikzset{noise voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@vsourceN at path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{vsourceN/.style= {\comnpatname noise voltage source= #1}}
+\compattikzset{nV/.style= {\comnpatname noise voltage source= #1}}
+
+\def\pgf at circ@isourceN at path#1{\pgf at circ@bipole at path{isourceN}{#1}}
+\compattikzset{noise current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@isourceN at path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{isourceN/.style= {\comnpatname noise current source= #1}}
+\compattikzset{nI/.style= {\comnpatname noise current source= #1}}
+
+% resistive sensor american style
+\def\pgf at circ@resistivesens at path#1{\pgf at circ@bipole at path{resistivesens}{#1}}
+\compattikzset{american resistive sensor/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@resistivesens at path, l=#1}}
+\compattikzset{european resistive sensor/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@thermistorntc at path, l=#1}}
+\compattikzset{resistive sensor/.style= {\circuitikzbasekey, /tikz/to path=\pgf at circ@sresistor at path, l=#1}}
+\compattikzset{sR/.style= {\comnpatname resistive sensor= #1}}
+
+\compattikzset{capacitive sensor/.style= {\circuitikzbasekey, /tikz/to path=\pgf at circ@capacitivesens at path, l=#1}}
+\compattikzset{sC/.style= {\comnpatname capacitive sensor= #1}}
+
+\compattikzset{cute inductive sensor/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@cuteinductivesens at path, l=#1}}
+\compattikzset{european inductive sensor/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@europeaninductivesens at path, l=#1}}
+\compattikzset{american inductive sensor/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@americaninductivesens at path, l=#1}}
+\compattikzset{inductive sensor/.style= {\circuitikzbasekey, /tikz/to path=\pgf at circ@inductivesens at path, l=#1}}
+\compattikzset{sL/.style= {\comnpatname inductive sensor= #1}}
+
+\compattikzset{Mr/.style = {\comnpatname memristor}}
+
+\compattikzset{cspst/.style = {\comnpatname closing switch = #1}}
+\compattikzset{ospst/.style = {\comnpatname opening switch = #1}}
+\compattikzset{spst/.style = {\comnpatname switch = #1}}
+
+\compattikzset{afuse/.style = {\comnpatname asymmetric fuse=#1}}
+
+\compattikzset{vdd/.style = {\comnpatname vcc = #1}}
+\compattikzset{vss/.style = {\comnpatname vee = #1}}
+
+% activate the to-style crossing
+\def\pgf at circ@crossing at path#1{\pgf at circ@bipole at path{crossing}{#1}}
+\compattikzset{crossing/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@crossing at path, l=#1}}
+\compattikzset{xing/.style= {\comnpatname crossing= #1}}
+
+%% loudspeaker and microphone
+
+\def\pgf at circ@loudspeaker at path#1{\pgf at circ@bipole at path{loudspeaker}{#1}}
+\compattikzset{loudspeaker/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@loudspeaker at path, l=#1}}
+
+\def\pgf at circ@mic at path#1{\pgf at circ@bipole at path{mic}{#1}}
+\compattikzset{mic/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@mic at path, l=#1}}
+
+% more instrument
+\def\pgf at circ@rmeter at path#1{\pgf at circ@bipole at path{rmeter}{#1}}
+\compattikzset{rmeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@rmeter at path, l=#1}}
+\def\pgf at circ@rmeterwa at path#1{\pgf at circ@bipole at path{rmeterwa}{#1}}
+\compattikzset{rmeterwa/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@rmeterwa at path, l=#1}}
+\def\pgf at circ@smeter at path#1{\pgf at circ@bipole at path{smeter}{#1}}
+\compattikzset{smeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@smeter at path, l=#1}}
+% current loop probes
+\def\pgf at circ@iloop at path#1{\pgf at circ@bipole at path{iloop}{#1}}
+\compattikzset{iloop/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@iloop at path, l=#1}}
+\def\pgf at circ@iloop2 at path#1{\pgf at circ@bipole at path{iloop2}{#1}}
+\compattikzset{iloop2/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@iloop2 at path, l=#1}}
+% qucs-style probes
+\def\pgf at circ@qiprobe at path#1{\pgf at circ@bipole at path{qiprobe}{#1}}
+\compattikzset{qiprobe/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@qiprobe at path, l=#1}}
+\def\pgf at circ@qvprobe at path#1{\pgf at circ@bipole at path{qvprobe}{#1}}
+\compattikzset{qvprobe/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@qvprobe at path, l=#1}}
+\def\pgf at circ@qpprobe at path#1{\pgf at circ@bipole at path{qpprobe}{#1}}
+\compattikzset{qpprobe/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@qpprobe at path, l=#1}}
+% multiwire(s)
+\def\pgf at circ@bmultiwire at path#1{\pgf at circ@bipole at path{bmultiwire}{#1}}
+\compattikzset{bmultiwire/.style = {\circuitikzbasekey,
+/tikz/to path=\pgf at circ@bmultiwire at path, l=#1}}
+\def\pgf at circ@multiwire at path#1{\pgf at circ@bipole at path{multiwire}{#1}}
+\compattikzset{multiwire/.style = {\circuitikzbasekey,
+/tikz/to path=\pgf at circ@multiwire at path, l=#1}}
+\def\pgf at circ@tmultiwire at path#1{\pgf at circ@bipole at path{tmultiwire}{#1}}
+\compattikzset{tmultiwire/.style = {\circuitikzbasekey,
+/tikz/to path=\pgf at circ@tmultiwire at path, l=#1}}
+
+% reed switches
+\def\pgf at circ@reed at path#1{\pgf at circ@bipole at path{reed}{#1}}
+\compattikzset{reed/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@reed at path, l=#1}}
+
+% Transistor like bipoles
+
+\def\pgf at circ@trans at path#1#2{
+    \pgfextra{
+        \edef\pgf at temp{\ctikzvalof{bipole/name}}
+        \def\pgf at circ@temp{#2}
+        \ifx\pgf at temp\pgf at circ@temp % if it has not a name
+            \pgfmathrandominteger{\pgf at circ@rand}{1000}{9999}
+            \ctikzset{bipole/name = trans\pgf at circ@rand} % create it
+        \fi
+    }
+    \ifpgf at circuit@bipole at inverted
+        (\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}end) {}
+        (\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}start) {}
+    \else
+        (\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}start) {}
+        (\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}end) {}
+    \fi
+    \pgfextra{
+        \pgfmathanglebetweenpoints{\pgfpointanchor{\ctikzvalof{bipole/name}start}{center}}
+        {\pgfpointanchor{\ctikzvalof{bipole/name}end}{center}}
+        \pgfmathadd{\pgfmathresult}{-90}
+        \pgfmathround{\pgfmathresult}
+        \edef\pgf at circ@direction{\pgfmathresult}
+    }
+    ($(\tikztostart) ! .5 ! (\tikztotarget)$)
+    node[#1, /tikz/rotate=\pgf at circ@direction, xscale=\ctikzvalof{mirror value}]
+    (\ctikzvalof{bipole/name}) {}
+    node {\ctikzvalof{bipole/label/name}}
+    \ifcsname pgf at anchor@#1 at pathstart\endcsname%if special path-anchors are defined, use them!
+        (\ctikzvalof{bipole/name}start.center) --(\ctikzvalof{bipole/name}.pathstart)
+        (\ctikzvalof{bipole/name}.pathend)  -- (\ctikzvalof{bipole/name}end.center)
+    \else
+        (\ctikzvalof{bipole/name}start.center) --(\ctikzvalof{bipole/name}.left)
+        (\ctikzvalof{bipole/name}.right)  -- (\ctikzvalof{bipole/name}end.center)
+    \fi
+    \drawpoles
+    \pgfextra{
+        \pgfcircresetpath
+    }
+    (\tikztotarget) 	\tikztonodes  % e si continua
+}
+
+
+\def\pgf at circ@definetranspath#1{
+	\compattikzset{T#1/.style = {\circuitikzbasekey, /tikz/to path=\pgf at circ@trans at path{#1}{}, l=##1}}
+}
+
+\pgf at circ@definetranspath{elmech}
+\pgf at circ@definetranspath{nmos}
+\pgf at circ@definetranspath{pmos}
+\pgf at circ@definetranspath{nmosd}
+\pgf at circ@definetranspath{pmosd}
+\pgf at circ@definetranspath{hemt}
+\pgf at circ@definetranspath{npn}
+\pgf at circ@definetranspath{pnp}
+\pgf at circ@definetranspath{nfet}
+\pgf at circ@definetranspath{nigfete}
+\pgf at circ@definetranspath{nigfetd}
+\pgf at circ@definetranspath{nigfetebulk}
+\pgf at circ@definetranspath{pfet}
+\pgf at circ@definetranspath{pigfete}
+\pgf at circ@definetranspath{pigfetd}
+\pgf at circ@definetranspath{pigfetebulk}
+\pgf at circ@definetranspath{njfet}
+\pgf at circ@definetranspath{pjfet}
+\pgf at circ@definetranspath{pigbt}
+\pgf at circ@definetranspath{nigbt}
+\pgf at circ@definetranspath{Lpigbt}
+\pgf at circ@definetranspath{Lnigbt}
+%
+% Path-style logical ports
+%
+% create path-style element for one input --- one output logical ports
+%
+\def\pgfcirc at port@node at to@path#1#2{%
+    %
+    % add a logic port path style component --- we need to suppress leads
+    % and use the correct center
+    %
+    \pgfcirc at node@to at path{#1}{#2}{/tikz/no leads, \circuitikzbasekey/logic ports origin=center}%
+}
+\pgfcirc at port@node at to@path{not port}{inline not}
+\pgfcirc at port@node at to@path{buffer port}{inline buffer}
+\pgfcirc at port@node at to@path{schmitt port}{inline schmitt}
+\pgfcirc at port@node at to@path{invschmitt port}{inline invschmitt}
+
+\pgfcirc at port@node at to@path{tgate}{inline tgate}
+\pgfcirc at port@node at to@path{double tgate}{inline double tgate}
+
+%%%---------- close: tex/pgfcircpath
+
+\catcode`\@=\tikzatcode
+\catcode`\|=\tikzbarcode
+\catcode`\!=\tikzexclaimcode
+
+% define the environment
+\long\def\startcircuitikz#1\stopcircuitikz{\starttikzpicture#1\stoptikzpicture}
+
+\protect
+
+\stopmodule
+
+\endinput


Property changes on: trunk/Master/texmf-dist/tex/context/third/circuitikz/t-circuitikz-1.2.7.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/context/third/circuitikz/t-circuitikz.tex
===================================================================
--- trunk/Master/texmf-dist/tex/context/third/circuitikz/t-circuitikz.tex	2021-01-19 22:57:40 UTC (rev 57468)
+++ trunk/Master/texmf-dist/tex/context/third/circuitikz/t-circuitikz.tex	2021-01-19 22:58:18 UTC (rev 57469)
@@ -1,7 +1,7 @@
-% Copyright 2018-2020 by Romano Giannetti
-% Copyright 2015-2020 by Stefan Lindner
-% Copyright 2013-2020 by Stefan Erhardt
-% Copyright 2007-2020 by Massimo Redaelli
+% Copyright 2018-2021 by Romano Giannetti
+% Copyright 2015-2021 by Stefan Lindner
+% Copyright 2013-2021 by Stefan Erhardt
+% Copyright 2007-2021 by Massimo Redaelli
 %
 % This file may be distributed and/or modified
 %
@@ -10,8 +10,8 @@
 %
 % See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
 
-\def\pgfcircversion{1.2.7}
-\def\pgfcircversiondate{2020/12/27}
+\def\pgfcircversion{1.3.0}
+\def\pgfcircversiondate{2021/01/19}
 \writestatus{loading}{\pgfcircversiondate{} The CircuiTikz circuit drawing package version \pgfcircversion}
 
 \usemodule[tikz]
@@ -32,6 +32,7 @@
 
 \input pgfcirc.defines.tex
 \input pgfcircutils.tex
+\input pgfcircpath.tex
 
 \input pgfcircshapes.tex
 \input pgfcircmonopoles.tex
@@ -133,7 +134,6 @@
 
 \ctikzset{tripoles/op amp/font/.initial=\switchtobodyfont[small]}
 
-\input pgfcircpath.tex
 
 \catcode`\@=\tikzatcode
 \catcode`\|=\tikzbarcode

Modified: trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcirc.defines.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcirc.defines.tex	2021-01-19 22:57:40 UTC (rev 57468)
+++ trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcirc.defines.tex	2021-01-19 22:58:18 UTC (rev 57469)
@@ -1,7 +1,7 @@
-% Copyright 2018-2020 by Romano Giannetti
-% Copyright 2015-2020 by Stefan Lindner
-% Copyright 2013-2020 by Stefan Erhardt
-% Copyright 2007-2020 by Massimo Redaelli
+% Copyright 2018-2021 by Romano Giannetti
+% Copyright 2015-2021 by Stefan Lindner
+% Copyright 2013-2021 by Stefan Erhardt
+% Copyright 2007-2021 by Massimo Redaelli
 %
 % This file may be distributed and/or modified
 %
@@ -12,6 +12,17 @@
 %
 % This file has folding marks for vim (See last line).
 %
+
+%
+% This file is loaded *before* the options for the package are executed, mainly
+% for the following three ifs
+%
+% these three ifs are fundamental for the package loading options;
+% do not move away
+\newif\ifpgf at circ@siunitx
+\newif\ifpgf at circ@siunitx at res
+\newif\ifpgf at circuit@compat
+
 %% Key managements%<<<1
 
 \long\def\pgf at circ@comment#1{}
@@ -221,6 +232,228 @@
 }%
 %>>>
 
+%% Generic macro for defining a bipole shape%<<<
+% #1 - additional anchors
+% #2 - lower y-size of the bipole (from the center).
+% #3 - #shape is the name of the shape
+% #4 - upper y-size of the bipole (from the center)
+% #5 - width of the bipole
+% #6 - macros drawing the bipole
+%
+\long\def\pgfcircdeclarebipole{%
+    \pgfcircdeclarebipolescaled{default}}
+
+%% Generic macro for defining a bipole shape
+% #1 - scale factor
+% #2 - additional anchors
+% #3 - lower y-size of the bipole (from the center).
+% #4 - #shape is the name of the shape
+% #5 - upper y-size of the bipole (from the center)
+% #6 - width of the bipole
+% #7 - macros drawing the bipole
+%
+\long\def\pgfcircdeclarebipolescaled#1#2#3#4#5#6#7{
+    \pgfdeclareshape{#4shape}{
+        \savedmacro{\ctikzclass}{\edef\ctikzclass{#1}}
+        \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+        \savedanchor{\northeast}{
+            \pgf at circ@scaled at Rlen=\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen
+            \pgf at y=#5\pgf at circ@scaled at Rlen
+            \pgf at y=.5\pgf at y
+            \pgf at x=#6\pgf at circ@scaled at Rlen
+            \pgf at x=.5\pgf at x
+        }
+        \savedanchor{\northeastborder}{
+            \pgf at circ@scaled at Rlen=\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen
+            \pgf at y=#5\pgf at circ@scaled at Rlen
+            \pgf at y=.5\pgf at y
+            \pgf at y=\ctikzvalof{bipoles/border margin}\pgf at y
+            \pgf at x=#6\pgf at circ@scaled at Rlen
+            \pgf at x=.5\pgf at x
+            \pgf at x=\ctikzvalof{bipoles/border margin}\pgf at x
+        }
+        \savedanchor{\southwestborder}{
+            \pgf at circ@scaled at Rlen=\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen
+            \pgf at y=-#3\pgf at circ@scaled at Rlen
+            \pgf at y=.5\pgf at y
+            \pgf at y=\ctikzvalof{bipoles/border margin}\pgf at y
+            \pgf at x=-#6\pgf at circ@scaled at Rlen
+            \pgf at x=.5\pgf at x
+            \pgf at x=\ctikzvalof{bipoles/border margin}\pgf at x
+        }
+        \savedanchor{\southwest}{
+            \pgf at circ@scaled at Rlen=\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen
+            \pgf at y=-#3\pgf at circ@scaled at Rlen
+            \pgf at y=.5\pgf at y
+            \pgf at x=-#6\pgf at circ@scaled at Rlen
+            \pgf at x=.5\pgf at x
+        }
+        \savedanchor{\centerpoint}{
+            \pgf at circ@scaled at Rlen=\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen
+            \pgf at circ@res at down=-#3\pgf at circ@scaled at Rlen
+            \pgf at circ@res at up=#5\pgf at circ@scaled at Rlen
+            \pgfpointorigin
+            \pgf at y=\pgf at circ@res at up
+            \advance\pgf at y by\pgf at circ@res at down
+            \pgf at y=.5\pgf at y
+        }
+        \anchor{center}{\pgfpointorigin}
+        \anchor{n}{
+            \northeast
+            \pgf at x=0cm
+        }
+        \anchor{north east}{
+            \northeast
+        }
+        \anchor{north west}{
+            \northeast
+            \pgf at x=-\pgf at x
+        }
+        \anchor{ne}{
+            \northeast
+        }
+        \anchor{nw}{
+            \northeast
+            \pgf at x=-\pgf at x
+        }
+        \anchor{e}{
+            \northeast
+            \pgf at y=0cm
+        }
+        \anchor{s}{
+            \southwest
+            \pgf at x=0cm
+        }
+        \anchor{south east}{
+            \southwest
+            \pgf at x=-\pgf at x
+        }
+        \anchor{south west}{
+            \southwest
+        }
+        \anchor{se}{
+            \southwest
+            \pgf at x=-\pgf at x
+        }
+        \anchor{sw}{
+            \southwest
+        }
+        \anchor{w}{
+            \southwest
+            \pgf at y=0cm
+        }
+        \anchor{north}{
+            \northeast
+            \pgf at x=0cm
+        }
+        \anchor{east}{
+            \northeast
+            \pgf at y=0cm
+        }
+        \anchor{south}{
+            \southwest
+            \pgf at x=0cm
+        }
+        \anchor{west}{
+            \southwest
+            \pgf at y=0cm
+        }
+        \anchor{right}{
+            \northeast
+            \pgf at y=0cm
+        }
+        \anchor{above}{
+            \northeast
+            \pgf at x=0cm
+        }
+        \anchor{left}{
+            \southwest
+            \pgf at y=0cm
+        }
+        \anchor{below}{
+            \southwest
+            \pgf at x=0cm
+        }
+        \anchor{a}{
+            \northeast
+            \pgf at y=0cm
+        }
+        \anchor{b}{
+            \southwest
+            \pgf at y=0cm
+        }
+        \savedanchor{\textanchor}{%
+            \pgf at y=\ht\pgfnodeparttextbox
+            \pgf at x=-.5\wd\pgfnodeparttextbox
+        }
+        \anchor{text}{
+            \textanchor
+        }
+        \anchorborder{%
+            \ifpgf at circuit@bipole at inverted
+                \pgf at circ@res at left=-\pgf at x
+                \pgf at circ@res at up=-\pgf at y
+            \else
+                \pgf at circ@res at left=\pgf at x
+                \pgf at circ@res at up=\pgf at y
+            \fi
+            \ifdim\pgf at circ@res at up>0cm
+                \pgfpointborderrectangle{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\northeastborder}
+            \else
+                \southwestborder
+                \pgfpointborderrectangle{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\pgfpoint{-\pgf at x}{-\pgf at y}}
+            \fi
+        }
+
+        #2
+
+        \backgroundpath{
+            \pgfsetcolor{\ctikzvalof{color}}
+
+            \northeast
+            \pgf at circ@res at up = \pgf at y
+            \pgf at circ@res at zero = 0cm
+            \pgf at circ@res at left = -\pgf at x
+            \pgf at circ@res at right = \pgf at x
+            \southwest
+            \pgf at circ@res at down = \pgf at y
+            \pgf at circ@scaled at Rlen=\scaledRlen
+            \pgfstartlinewidth=\pgflinewidth
+            \pgfsetcornersarced{\pgfpointorigin}% do not use rounded corners!
+            #7
+
+            \pgfsetlinewidth{\pgfstartlinewidth}
+        }
+    }
+}% %>>>
+
+%% anchor adjustment macros%<<<
+
+% Extend the border anchor position by the specified factors on the right-top (north east corner)
+% and the left-down (southwest border). Argument must be number (possibly decimal) without sign
+
+\def\pgfcirc at border@extend at full#1#2#3#4{% right, top, left, down
+    \anchorborder{%
+        \ifpgf at circuit@bipole at inverted
+            \pgf at circ@res at left=-\pgf at x
+            \pgf at circ@res at up=-\pgf at y
+        \else
+            \pgf at circ@res at left=\pgf at x
+            \pgf at circ@res at up=\pgf at y
+        \fi
+        \ifdim\pgf at circ@res at up>0cm
+            \northeastborder
+            \pgfpointborderrectangle{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\pgfpoint{#1\pgf at x}{#2\pgf at y}}
+        \else
+            \southwestborder
+            \pgfpointborderrectangle{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\pgfpoint{-#3\pgf at x}{-#4\pgf at y}}
+        \fi
+    }
+}
+
+% Just up and down (very common)
+\def\pgfcirc at border@extend at updown#1#2{\pgfcirc at border@extend at full{1}{#1}{1}{#2}}% %>>>
+
 % text position in some component.%<<<1
 % (added with ieeestd logic ports. Maybe to be extended to other components,
 % like amplifiers)
@@ -237,8 +470,6 @@
 
 % voltage direction options%<<<1
 
-\newif\ifpgf at circ@siunitx
-\newif\ifpgf at circuit@compat
 \newif\ifpgf at circ@oldvoltagedirection % default false
 \newif\ifpgf at circ@explicitvdir
 \newif\ifpgf at circ@fixbatteries
@@ -324,8 +555,6 @@
 \ctikzset{bipole/annotation/unit/.initial=}
 \ctikzset{bipole/annotation/name/.initial=}
 
-\newif\ifpgf at circ@siunitx
-\newif\ifpgf at circ@siunitx at res
 
 \ctikzset{label/align/.is choice}
 \ctikzset{label/align/straight/.code={\ctikzsetvalof{label/align}{straight}}}
@@ -477,1671 +706,6 @@
 \tikzset{cute/.style = {european currents, european voltages, american resistors, cute inductors, american ports}}
 %%>>>
 
-% grounds and power supplies%<<<1
-
-\ctikzset{monopoles/.is family}
-\ctikzset{monopoles/ground/width/.initial=.25}
-\ctikzset{monopoles/ground/connectionthickness/.initial=1}
-\ctikzset{monopoles/ground/thickness/.initial=2}
-\ctikzset{monopoles/rground/thickness/.initial=2}
-\ctikzset{monopoles/tground/thickness/.initial=3}
-\ctikzset{monopoles/vcc/width/.initial=.2}
-\ctikzset{monopoles/vcc/arrow/.initial=legacy}
-\ctikzset{monopoles/vee/arrow/.initial=legacy}
-\ctikzset{monopoles/match/width/.initial=.4}
-\ctikzset{monopoles/chassis/width/.initial=.25}
-\ctikzset{monopoles/alternative chassis/width/.initial=.25}
-\ctikzset{monopoles/equipotentiality/width/.initial=.25}
-\ctikzset{monopoles/antenna/width/.initial=.25}
-\ctikzset{monopoles/antenna/label/xanchor/.initial=.4}
-\ctikzset{monopoles/antenna/label/yanchor/.initial=.75}
-\ctikzset{monopoles/txantenna/label/xanchor/.initial=.4}
-\ctikzset{monopoles/txantenna/label/yanchor/.initial=.75}
-\ctikzset{monopoles/txantenna/width/.initial=.25}
-\ctikzset{monopoles/rxantenna/label/xanchor/.initial=.4}
-\ctikzset{monopoles/rxantenna/label/yanchor/.initial=.75}
-\ctikzset{monopoles/rxantenna/width/.initial=.25}
-\ctikzset{monopoles/bareantenna/width/.initial=.25}
-\ctikzset{monopoles/bareantenna/label/xanchor/.initial=1}
-\ctikzset{monopoles/bareantenna/label/yanchor/.initial=0.5}
-\ctikzset{monopoles/waves/width/.initial=0.5}%
-%>>>
-
-% microstrips %<<<1
-\ctikzset{bipoles/mstline/height/.initial=0.3}
-\ctikzset{bipoles/mstline/width/.initial=1.2}
-\pgfkeys{/tikz/mstlinelen/.add code={}{\ctikzset{bipoles/mstline/width=#1}}}
-\ctikzset{monopoles/msport/width/.initial=.5}
-\ctikzset{monopoles/msrstub/height/.initial=1.0}
-\ctikzset{monopoles/msrstub/width/.initial=0.6}%
-%>>>
-
-% microphone and loudspeaker%<<<1
-\ctikzset{bipoles/loudspeaker/height/.initial=.8}
-\ctikzset{bipoles/loudspeaker/depth/.initial=.3}
-\ctikzset{bipoles/loudspeaker/width/.initial=.8}
-\ctikzset{bipoles/mic/height/.initial=1.2}
-\ctikzset{bipoles/mic/depth/.initial=.1}
-\ctikzset{bipoles/mic/width/.initial=.8}%
-%>>>
-
-% resistors%<<<1
-% Zig Zag resistors
-\ctikzset{resistors/zigs/.initial=3}
-\ctikzset{resistors/width/.code={%
-    \ctikzset{bipoles/resistor/width=#1}%
-    \ctikzset{bipoles/vresistor/width=#1}%
-    \ctikzset{bipoles/potentiometer/width=#1}%
-    \ctikzset{bipoles/resistivesens/width=#1}%
-    \ctikzset{bipoles/photoresistor/width=#1}%
-    \ctikzset{bipoles/thermistor/width=#1}%
-    \ctikzset{bipoles/thermistorntc/width=#1}%
-    \ctikzset{bipoles/thermistorptc/width=#1}%
-    \ctikzset{bipoles/varistor/width=#1}%
-    \ctikzset{bipoles/generic/width=#1}%
-    \ctikzset{bipoles/generic potentiometer/width=#1}%
-    \ctikzset{bipoles/ageneric/width=#1}%
-    \ctikzset{bipoles/tgeneric/width=#1}%
-}}
-\ctikzset{wiper pos/.code={%
-    \ctikzset{bipoles/potentiometer/wiper pos=#1}%
-    \ctikzset{bipoles/generic potentiometer/wiper pos=#1}%
-}}
-% zigzag resistor
-\ctikzset{bipoles/resistor/height/.initial=.3}
-\ctikzset{bipoles/resistor/width/.initial=.8}
-\ctikzset{bipoles/potentiometer/height/.initial=.8}
-\ctikzset{bipoles/potentiometer/height 2/.initial=.3}
-\ctikzset{bipoles/potentiometer/width/.initial=.8}
-\ctikzset{bipoles/potentiometer/wiper pos/.initial=.5}
-\ctikzset{bipoles/vresistor/height/.initial=.6}
-\ctikzset{bipoles/vresistor/width/.initial=.8}
-\ctikzset{bipoles/resistivesens/height/.initial=.6}
-\ctikzset{bipoles/resistivesens/width/.initial=.8}
-% square resistors
-\ctikzset{bipoles/photoresistor/height/.initial=.6}
-\ctikzset{bipoles/photoresistor/height 2/.initial=.3}
-\ctikzset{bipoles/photoresistor/width/.initial=.8}
-\ctikzset{bipoles/thermistor/main/.initial=.7}
-\ctikzset{bipoles/thermistor/height/.initial=.428}%.3/.7
-\ctikzset{bipoles/thermistorntc/width/.initial=.8}
-\ctikzset{bipoles/thermistorntc/main/.initial=.7}
-\ctikzset{bipoles/thermistorntc/height/.initial=.428}%.3/.7
-\ctikzset{bipoles/thermistorntc/height 2/.initial=.75}%.3/.7
-\ctikzset{bipoles/thermistorptc/width/.initial=.8}
-\ctikzset{bipoles/thermistorptc/main/.initial=.7}
-\ctikzset{bipoles/thermistorptc/height/.initial=.428}%.3/.7
-\ctikzset{bipoles/thermistorptc/height 2/.initial=.75}%.3/.7
-\ctikzset{bipoles/thermistor/width/.initial=.8}
-\ctikzset{bipoles/varistor/main/.initial=.7}
-\ctikzset{bipoles/varistor/height/.initial=.428}%.3/.7
-\ctikzset{bipoles/varistor/width/.initial=.8}
-\ctikzset{bipoles/generic/height/.initial=.30}
-\ctikzset{bipoles/generic/width/.initial=.80}
-\ctikzset{bipoles/generic potentiometer/height/.initial=.80}
-\ctikzset{bipoles/generic potentiometer/height 2/.initial=.30}
-\ctikzset{bipoles/generic potentiometer/width/.initial=.80}
-\ctikzset{bipoles/generic potentiometer/wiper pos/.initial=.5}
-\ctikzset{bipoles/ageneric/height/.initial=.30}
-\ctikzset{bipoles/tgeneric/height/.initial=.70}
-\ctikzset{bipoles/tgeneric/width/.initial=.80}
-\ctikzset{bipoles/ageneric/width/.initial=.80}
-\ctikzset{bipoles/memristor/height/.initial=.30}
-\ctikzset{bipoles/memristor/wave height/.initial=.5}
-\ctikzset{bipoles/memristor/width/.initial=.80}
-
-\newif\ifpgf at circuit@europeanresistor
-\ctikzset{resistor/.is choice}
-\ctikzset{resistor/american/.code = \pgf at circuit@europeanresistorfalse }
-\ctikzset{resistor/european/.code = \pgf at circuit@europeanresistortrue }
-\tikzset{american resistors/.style = {\circuitikzbasekey/resistor = american}}
-\tikzset{european resistors/.style = {\circuitikzbasekey/resistor = european}}
-%%>>>
-
-%% Capacitors%<<<1
-\ctikzset{bipoles/capacitor/height/.initial=.6}
-\ctikzset{bipoles/capacitor/width/.initial=.2}
-\ctikzset{bipoles/ecapacitor/height/.initial=.5}
-\ctikzset{bipoles/ecapacitor/width/.initial=.2}
-\ctikzset{bipoles/ecapacitor/font/.initial=\pgf at circ@font at sixbm}
-%%% pcapacitor is deprecated
-\ctikzset{bipoles/pcapacitor/height/.initial=.6}
-\ctikzset{bipoles/pcapacitor/width/.initial=.2}
-\ctikzset{bipoles/pcapacitor/bend width/.initial=1.1}
-\ctikzset{bipoles/ccapacitor/height/.initial=.6}
-\ctikzset{bipoles/ccapacitor/width/.initial=.12}
-\ctikzset{bipoles/ccapacitor/bend width/.initial=1.1}
-\ctikzset{bipoles/vcapacitor/height/.initial=.6}
-\ctikzset{bipoles/vcapacitor/width/.initial=.5}
-\ctikzset{bipoles/vcapacitor/capacitor width/.initial=.4}
-\ctikzset{bipoles/piezoelectric/height/.initial=.7}
-\ctikzset{bipoles/piezoelectric/width/.initial=.5}%
-%>>>
-
-% Inductors%<<<1
-\ctikzset{inductors/coils/.code={%
-    \ctikzset{bipoles/cuteinductor/coils=#1}%
-    \ctikzset{bipoles/cutechoke/coils=#1}%
-    \ctikzset{bipoles/americaninductor/coils=#1}%
-    \ctikzset{bipoles/vcuteinductor/coils=#1}%
-    \ctikzset{bipoles/vamericaninductor/coils=#1}%
-}}
-\ctikzset{inductors/width/.code={%
-    \ctikzset{bipoles/cuteinductor/width=#1}%
-    \ctikzset{bipoles/cutechoke/width=#1}%
-    \ctikzset{bipoles/americaninductor/width=#1}%
-    \ctikzset{bipoles/vcuteinductor/width=#1}%
-    \ctikzset{bipoles/vamericaninductor/width=#1}%
-    \ctikzset{bipoles/fullgeneric/width=#1}%
-    \ctikzset{bipoles/tfullgeneric/width=#1}%
-}}
-\ctikzset{bipoles/cuteinductor/height/.initial=.3}
-\ctikzset{bipoles/cuteinductor/lower coil height/.initial=.15}
-\ctikzset{bipoles/cuteinductor/width/.initial=.6}
-\ctikzset{bipoles/cuteinductor/coils/.initial=5}
-\ctikzset{bipoles/cuteinductor/coil aspect/.initial=.5}%percentage of inductor width, which is covered by lower coil
-%% Cute choke settings
-\ctikzset{bipoles/cutechoke/height/.initial=.3}
-\ctikzset{bipoles/cutechoke/lower coil height/.initial=.15}
-\ctikzset{bipoles/cutechoke/width/.initial=.6}
-\ctikzset{bipoles/cutechoke/coils/.initial=5}
-\ctikzset{bipoles/cutechoke/coil aspect/.initial=.5}%percentage of choke width, which is covered by lower coil
-\ctikzset{bipoles/cutechoke/cstep/.initial=.3}
-\ctikzset{bipoles/cutechoke/cdist/.initial=1.3}
-\ctikzset{bipoles/cutechoke/cthick/.initial=1}
-\newif\ifpgf at circuit@bipole at twolineschoke
-\pgf at circuit@bipole at twolineschokefalse
-\pgfkeys{/tikz/onelinechoke/.add code={}{\pgf at circuit@bipole at twolineschokefalse}}
-\ctikzset{onelinechoke/.add code={}{\pgf at circuit@bipole at twolineschokefalse}}
-\pgfkeys{/tikz/twolineschoke/.add code={}{\pgf at circuit@bipole at twolineschoketrue}}
-\ctikzset{twolineschoke/.add code={}{\pgf at circuit@bipole at twolineschoketrue}}
-%
-\ctikzset{bipoles/americaninductor/height/.initial=.3}
-\ctikzset{bipoles/americaninductor/height 2/.initial=.1}
-\ctikzset{bipoles/americaninductor/width/.initial=.8}
-\ctikzset{bipoles/americaninductor/coils/.initial=4}
-\ctikzset{bipoles/americaninductor/coil height/.initial=.15}
-\ctikzset{bipoles/vcuteinductor/height/.initial=.6}
-\ctikzset{bipoles/vcuteinductor/lower coil height/.initial=.3}
-\ctikzset{bipoles/vcuteinductor/width/.initial=.6}
-\ctikzset{bipoles/vcuteinductor/coils/.initial=5}
-\ctikzset{bipoles/vcuteinductor/coil aspect/.initial=.5}%percentage of inductor width, which is covered by lower coil
-\ctikzset{bipoles/vamericaninductor/height/.initial=.6}
-\ctikzset{bipoles/vamericaninductor/height 2/.initial=.2}
-\ctikzset{bipoles/vamericaninductor/width/.initial=.8}
-\ctikzset{bipoles/vamericaninductor/coils/.initial=4}
-\ctikzset{bipoles/vamericaninductor/coil height/.initial=.15}
-\ctikzset{bipoles/tfullgeneric/height/.initial=.70}
-\ctikzset{bipoles/tfullgeneric/width/.initial=.80}
-\ctikzset{bipoles/fullgeneric/height/.initial=.30}
-\ctikzset{bipoles/fullgeneric/width/.initial=.80}
-\ctikzset{inductor/.is choice}
-\ctikzset{inductor/cute/.code={\ctikzsetvalof{inductor}{cute}}}
-\ctikzset{inductor/european/.code={\ctikzsetvalof{inductor}{european}}}
-\ctikzset{inductor/american/.code={\ctikzsetvalof{inductor}{american}}}
-
-\tikzset{american inductors/.style = {\circuitikzbasekey/inductor = american}}
-\tikzset{european inductors/.style = {\circuitikzbasekey/inductor = european}}
-\tikzset{cute inductors/.style = {\circuitikzbasekey/inductor = cute}}
-\tikzset{american ports/.style = {\circuitikzbasekey/logic ports = american}}
-\tikzset{european ports/.style = {\circuitikzbasekey/logic ports = european}}
-
-%%>>>
-
-% Sources%<<<1
-
-\ctikzset{bipoles/esource/height/.initial=.60}
-\ctikzset{bipoles/esource/width/.initial=.60}
-\ctikzset{bipoles/pvsource/height/.initial=.60}
-\ctikzset{bipoles/pvsource/width/.initial=.60}
-\ctikzset{bipoles/isource/height/.initial=.60}
-\ctikzset{bipoles/isource/width/.initial=.60}
-\ctikzset{bipoles/oosource/height/.initial=.60}
-\ctikzset{bipoles/oosource/width/.initial=.60}
-\ctikzset{bipoles/oosource/circlesize/.initial=.65}%circlesize+circleoffset should be =1
-\ctikzset{bipoles/oosource/circleoffset/.initial=.35}%circlesize+circleoffset should be =1
-\ctikzset{bipoles/dcisource/angle/.initial=80}
-\ctikzset{bipoles/dcisource/height/.initial=.60}
-\ctikzset{bipoles/dcisource/width/.initial=.60}
-\ctikzset{bipoles/dcvsource/height/.initial=.60}
-\ctikzset{bipoles/dcvsource/width/.initial=.60}
-\ctikzset{bipoles/vsourcetri/height/.initial=.60}
-\ctikzset{bipoles/vsourcetri/width/.initial=.60}
-\ctikzset{bipoles/isourceam/height/.initial=.60}
-\ctikzset{bipoles/isourceam/width/.initial=.60}
-\ctikzset{bipoles/vsource/height/.initial=.60}
-\ctikzset{bipoles/vsource/width/.initial=.60}
-\ctikzset{bipoles/vsourceam/height/.initial=.60}
-\ctikzset{bipoles/vsourceam/width/.initial=.60}
-\ctikzset{bipoles/vsourceam/margin/.initial=.7}
-\ctikzset{bipoles/isourcesin/height/.initial=.60}
-\ctikzset{bipoles/isourcesin/width/.initial=.60}
-\ctikzset{bipoles/vsourcesin/height/.initial=.60}
-\ctikzset{bipoles/vsourcesin/width/.initial=.60}
-\ctikzset{bipoles/vsourcesquare/height/.initial=.60}
-\ctikzset{bipoles/vsourcesquare/width/.initial=.60}
-\ctikzset{bipoles/cisource/height/.initial=.7}
-\ctikzset{bipoles/cisource/width/.initial=.7}
-\ctikzset{bipoles/cisourceam/height/.initial=.7}
-\ctikzset{bipoles/cisourceam/width/.initial=.7}
-\ctikzset{bipoles/ecsource/height/.initial=.7}
-\ctikzset{bipoles/ecsource/width/.initial=.7}
-\ctikzset{bipoles/cvsource/height/.initial=.7}
-\ctikzset{bipoles/cvsource/width/.initial=.7}
-\ctikzset{bipoles/cvsourceam/height/.initial=.7}
-\ctikzset{bipoles/cvsourceam/width/.initial=.7}
-\ctikzset{bipoles/cvsourceam/margin/.initial=.7}
-\ctikzset{bipoles/cvsourceam/text scale/.initial=1}
-\ctikzset{bipoles/cisourcesin/width/.initial=.7}
-\ctikzset{bipoles/cvsourcesin/height/.initial=.7}
-\ctikzset{bipoles/cvsourcesin/width/.initial=.7}
-\ctikzset{bipoles/battery/height/.initial=.6}
-\ctikzset{bipoles/battery/width/.initial=.3}
-\ctikzset{bipoles/battery1/height/.initial=.6}
-\ctikzset{bipoles/battery1/width/.initial=.3}
-\ctikzset{bipoles/battery2/height/.initial=.6}
-\ctikzset{bipoles/battery2/width/.initial=.3}
-% noise sources
-\ctikzset{bipoles/noise sources/fillcolor/.initial=gray!50}
-
-%%>>>
-
-% "oo" style transformers and power grid diagrams%<<<1
-% % % ootransformer
-\ctikzset{bipoles/oosourcetrans/height/.initial=.6}
-\ctikzset{bipoles/oosourcetrans/width/.initial=.6}
-\ctikzset{bipoles/oosourcetrans/circlesize/.initial=.6}%circlesize+circleoffset should be =1
-\ctikzset{bipoles/oosourcetrans/circleoffset/.initial=.4}%circlesize+circleoffset should be =1
-\ctikzset{bipoles/oosourcetrans/vectorgroupscale/.initial=1}
-
-% % % oootransformer
-\ctikzset{bipoles/ooosource/height/.initial=.6}
-\ctikzset{bipoles/ooosource/circlesize/.initial=.55}%circlesize+circleoffset should be =1
-\ctikzset{bipoles/ooosource/circleoffset/.initial=.45}%circlesize+circleoffset should be =1
-\ctikzset{bipoles/ooosource/vectorgroupscale/.initial=1}
-
-% % % primary windings
-\newif\ifpgf at circ@prim at delta
-\newif\ifpgf at circ@prim at wye
-\newif\ifpgf at circ@prim at zig
-\pgfkeys{tikz/prim/.is choice}
-\pgfkeys{tikz/prim/delta/.add code={}{\pgf at circ@prim at deltatrue}}
-\pgfkeys{tikz/prim/wye/.add code={}{\pgf at circ@prim at wyetrue}}
-\pgfkeys{tikz/prim/zig/.add code={}{\pgf at circ@prim at zigtrue}}
-
-% % % secondary windings
-\newif\ifpgf at circ@sec at delta
-\newif\ifpgf at circ@sec at wye
-\newif\ifpgf at circ@sec at zig
-\pgfkeys{tikz/sec/.is choice}
-\pgfkeys{tikz/sec/delta/.add code={}{\pgf at circ@sec at deltatrue}}
-\pgfkeys{tikz/sec/wye/.add code={}{\pgf at circ@sec at wyetrue}}
-\pgfkeys{tikz/sec/zig/.add code={}{\pgf at circ@sec at zigtrue}}
-
-% % % tertiary windings (ooosource)
-\newif\ifpgf at circ@tert at delta
-\newif\ifpgf at circ@tert at wye
-\newif\ifpgf at circ@tert at zig
-\pgfkeys{tikz/tert/.is choice}
-\pgfkeys{tikz/tert/delta/.add code={}{\pgf at circ@tert at deltatrue}}
-\pgfkeys{tikz/tert/wye/.add code={}{\pgf at circ@tert at wyetrue}}
-\pgfkeys{tikz/tert/zig/.add code={}{\pgf at circ@tert at zigtrue}}%
-%>>>
-
-% diodes%<<<1
-
-\ctikzset{bipoles/diode/height/.initial=.50}
-\ctikzset{bipoles/diode/width/.initial=.40}
-\ctikzset{bipoles/bidirectionaldiode/height/.initial=1.1}
-\ctikzset{bipoles/bidirectionaldiode/width/.initial=1}
-\ctikzset{bipoles/bidirectionaldiode/diode width left/.initial=.3}
-\ctikzset{bipoles/bidirectionaldiode/diode width right/.initial=.3}
-\ctikzset{bipoles/varcap/height/.initial=.50}
-\ctikzset{bipoles/varcap/width/.initial=.45}
-\ctikzset{tripoles/thyristor/height/.initial=1.10}
-\ctikzset{tripoles/thyristor/height 2/.initial=.5}
-\ctikzset{tripoles/thyristor/width/.initial=1.0}
-\ctikzset{tripoles/thyristor/diode height/.initial=.5}
-\ctikzset{tripoles/thyristor/diode width left/.initial=.4}
-\ctikzset{tripoles/thyristor/diode width right/.initial=.3}
-
-\ctikzset{tripoles/triac/height/.initial=1.1}
-\ctikzset{tripoles/triac/width/.initial=1}
-\ctikzset{tripoles/triac/diode width left/.initial=.3}
-\ctikzset{tripoles/triac/diode width right/.initial=.3}
-%
-% Flipping arrows in LED and photodiodes
-%
-\newif\ifpgf at led@fliparrows
-\newif\ifpgf at pd@fliparrows
-\pgf at led@fliparrowsfalse
-\pgf at pd@fliparrowsfalse
-%
-% by default the arrows start (LED) and go (PD) to the anode.
-%
-\ctikzset{led arrows from anode/.code=\pgf at led@fliparrowsfalse}
-\ctikzset{pd arrows to anode/.code=\pgf at pd@fliparrowsfalse}
-%
-% but they can start form the cathode (LED) or go to it (PD)
-%
-\ctikzset{led arrows from cathode/.code=\pgf at led@fliparrowstrue}
-\ctikzset{pd arrows to cathode/.code=\pgf at pd@fliparrowstrue}
-
-\newif\ifpgf at circuit@strokediode
-\newif\ifpgf at circuit@fulldiode
-\pgf at circuit@strokediodefalse
-\pgf at circuit@fulldiodefalse
-
-\ctikzset{diode/.is choice}
-\ctikzset{diode/empty/.code = \pgf at circuit@fulldiodefalse\pgf at circuit@strokediodefalse}%default
-\ctikzset{diode/full/.code = \pgf at circuit@fulldiodetrue }
-\ctikzset{diode/stroke/.code = \pgf at circuit@strokediodetrue}
-
-\tikzset{full diodes/.style = { \circuitikzbasekey/diode = full}}
-\tikzset{empty diodes/.style = { \circuitikzbasekey/diode = empty}}
-\tikzset{stroke diodes/.style = { \circuitikzbasekey/diode = stroke}}
-
-%%>>>
-
-% switches%<<<1
-
-\ctikzset{bipoles/spst/height/.initial=.35}
-\ctikzset{bipoles/spst/width/.initial=.35}
-\ctikzset{bipoles/spst/depth/.initial=.2}
-\ctikzset{bipoles/nos/height/.initial=.3}
-\ctikzset{bipoles/nos/width/.initial=.35}
-\ctikzset{bipoles/nos/depth/.initial=.2}
-\ctikzset{bipoles/ncs/height/.initial=.35}
-\ctikzset{bipoles/ncs/width/.initial=.35}
-\ctikzset{bipoles/ncs/depth/.initial=.2}
-\ctikzset{bipoles/pushbutton/height/.initial=.5}
-\ctikzset{bipoles/pushbutton/height 2/.initial=.2}
-\ctikzset{bipoles/pushbutton/width/.initial=.50}
-%%% reed switch
-\ctikzset{bipoles/reed/height/.initial=.4}
-\ctikzset{bipoles/reed/width/.initial=.8}% 0.35 in nos
-\ctikzset{bipoles/reed/depth/.initial=.4}
-%% Cute switches
-\ctikzset{bipoles/cuteswitch/shape/.initial={ocirc}}
-\ctikzset{bipoles/cuteswitch/height/.initial=.6}
-\ctikzset{bipoles/cuteswitch/height 2/.initial=.2}
-\ctikzset{bipoles/cuteswitch/width/.initial=.50}
-\ctikzset{bipoles/cuteswitch/thickness/.initial=1}
-
-\ctikzset{tripoles/spdt/width/.initial=.85}
-\ctikzset{tripoles/spdt/height/.initial=.45}
-\ctikzset{tripoles/spdt/margin/.initial=.45}
-
-\ctikzset{tripoles/toggleswitch/height/.initial=.8}
-\ctikzset{tripoles/toggleswitch/height 2/.initial=.0}
-\ctikzset{tripoles/toggleswitch/width/.initial=.80}
-%%>>>
-
-% arresters, fuses, lamps, etc%<<<1
-
-\ctikzset{bipoles/european gas filled surge arrester/height/.initial=.30}
-\ctikzset{bipoles/european gas filled surge arrester/width/.initial=.80}
-\ctikzset{bipoles/european gas filled surge arrester/inside/.initial=.30}
-\ctikzset{bipoles/american gas filled surge arrester/height/.initial=.60}
-\ctikzset{bipoles/american gas filled surge arrester/width/.initial=.60}
-\ctikzset{bipoles/american gas filled surge arrester/inside/.initial=.15}
-\ctikzset{bipoles/american gas filled surge arrester/dot x/.initial=.25}
-\ctikzset{bipoles/american gas filled surge arrester/dot y/.initial=.45}
-\ctikzset{bipoles/american gas filled surge arrester/size/.initial=.1}
-\ctikzset{bipoles/fuse/height/.initial=.20}
-\ctikzset{bipoles/fuse/width/.initial=.50}
-\ctikzset{bipoles/afuse/height/.initial=.20}
-\ctikzset{bipoles/afuse/width/.initial=.50}
-\ctikzset{bipoles/lamp/height/.initial=.60}
-\ctikzset{bipoles/lamp/width/.initial=.60}
-\ctikzset{bipoles/bulb/height/.initial=.8}
-\ctikzset{bipoles/bulb/width/.initial=.8}
-\ctikzset{bipoles/tline/height/.initial=.3}
-\ctikzset{bipoles/tline/width/.initial=.6}
-\ctikzset{bipoles/squid/height/.initial=.60}
-\ctikzset{bipoles/squid/width/.initial=.60}
-\ctikzset{bipoles/barrier/height/.initial=.60}
-\ctikzset{bipoles/barrier/width/.initial=.60}
-\ctikzset{bipoles/openbarrier/gap/.initial=0.5}
-\ctikzset{bipoles/thermocouple/height/.initial=.250}
-\ctikzset{bipoles/thermocouple/height 2/.initial=.60}
-\ctikzset{bipoles/thermocouple/width/.initial=.140}
-\newif\ifpgf at circuit@europeangfsurgearrester
-\ctikzset{gas filled surge arrester choice/.is choice}
-\ctikzset{gas filled surge arrester choice/european/.code= {\pgf at circuit@europeangfsurgearrestertrue}}
-\ctikzset{gas filled surge arrester choice/american/.code= {\pgf at circuit@europeangfsurgearresterfalse}}
-
-\tikzset{american gas filled surge arrester set/.style = {\circuitikzbasekey/gas filled surge arrester choice=american}}
-\tikzset{european gas filled surge arrester set/.style = {\circuitikzbasekey/gas filled surge arrester choice=european}}
-%%>>>
-
-% wires (open, shorts, ...)%<<<1
-
-\ctikzset{bipoles/open/height/.initial=.3} %necessary for curly voltages
-\ctikzset{bipoles/open/width/.initial=.3} %necessary for curly voltages
-\ctikzset{bipoles/open/voltage/straight label distance/.initial=0}
-\ctikzset{bipoles/open/voltage/distance from node/.initial=.2}
-\ctikzset{bipoles/short/height/.initial=.1} %dummy height for voltage positioning
-\ctikzset{bipoles/short/width/.initial=.1} %dummy width for voltage positioning
-% multiwire
-\ctikzset{bipoles/multiwire/height/.initial=0.4}
-\ctikzset{bipoles/multiwire/width/.initial=0.2}
-\ctikzset{bipoles/multiwire/spacing/.initial=0.05}
-% crossing wires
-\ctikzset{bipoles/crossing/size/.initial=.2}
-%%>>>
-
-% Instruments %<<<1
-\ctikzset{bipoles/ammeter/height/.initial=.60}
-\ctikzset{bipoles/ammeter/width/.initial=.60}
-\ctikzset{bipoles/ohmmeter/height/.initial=.60}
-\ctikzset{bipoles/ohmmeter/width/.initial=.60}
-\ctikzset{bipoles/voltmeter/height/.initial=.60}
-\ctikzset{bipoles/voltmeter/width/.initial=.60}
-\ctikzset{bipoles/smeter/height/.initial=.60}
-\ctikzset{bipoles/smeter/width/.initial=.60}
-\ctikzset{bipoles/smeter/voltage/additional shift/.initial=1}
-\ctikzset{bipoles/qmeter/depth/.initial=.40}
-\ctikzset{bipoles/qmeter/height/.initial=.80}
-\ctikzset{bipoles/qmeter/width/.initial=.60}
-% this must be specified for each one
-\ctikzset{bipoles/qvprobe/voltage/additional shift/.initial=.5}
-\ctikzset{bipoles/qiprobe/voltage/additional shift/.initial=.5}
-\ctikzset{bipoles/qpprobe/voltage/additional shift/.initial=.5}
-\ctikzset{bipoles/iloop/width/.initial=.40}
-\ctikzset{bipoles/iloop/height/.initial=.60}
-
-\ctikzset{bipoles/oscope/height/.initial=.60}
-\ctikzset{bipoles/oscope/width/.initial=.60}
-\ctikzset{bipoles/oscope/voltage/additional shift/.initial=1}
-
-
-% option to not rotate the new (Romano's) instruments
-\newif\ifpgf at circuit@straightinstruments\pgf at circuit@straightinstrumentstrue
-\pgfkeys{/tikz/straight instruments/.add code={}{\pgf at circuit@straightinstrumentstrue}}
-\ctikzset{straight instruments/.add code={}{\pgf at circuit@straightinstrumentstrue}}
-\pgfkeys{/tikz/rotated instruments/.add code={}{\pgf at circuit@straightinstrumentsfalse}}
-\ctikzset{rotated instruments/.add code={}{\pgf at circuit@straightinstrumentsfalse}}
-%%>>>
-
-% blocks (twoports and so)%<<<1
-
-\ctikzset{bipoles/twoport/width/.initial=.7}
-\ctikzset{bipoles/twoport/height/.initial=.7}
-\ctikzset{bipoles/twoport/text/.initial=}
-\ctikzset{bipoles/twoportsplit/width/.initial=.7}
-\ctikzset{bipoles/twoport/text in/.initial=}
-\ctikzset{bipoles/twoport/text out/.initial=}
-\ctikzset{text/.style={t=#1}}
-\ctikzset{t/.code={%
-        \ctikzsetvalof{bipoles/twoport/text}{#1}%
-}}
-\ctikzset{text in/.style={t1=#1}}
-\ctikzset{t1/.code={%
-        \ctikzsetvalof{bipoles/twoport/text in}{#1}%
-}}
-\ctikzset{text out/.style={t2=#1}}
-\ctikzset{t2/.code={%
-        \ctikzsetvalof{bipoles/twoport/text out}{#1}%
-}}
-\ctikzset{bipoles/vco/width/.initial=.7}
-\ctikzset{bipoles/bandpass/width/.initial=.7}
-\ctikzset{bipoles/bandstop/width/.initial=.7}
-\ctikzset{bipoles/highpass/width/.initial=.7}
-\ctikzset{bipoles/lowpass/width/.initial=.7}
-\ctikzset{bipoles/allpass/width/.initial=.7}
-\ctikzset{bipoles/adc/width/.initial=.7}
-\ctikzset{bipoles/dac/width/.initial=.7}
-\ctikzset{bipoles/dsp/width/.initial=.7}
-\ctikzset{bipoles/fft/width/.initial=.7}
-\ctikzset{bipoles/amp/width/.initial=.7}
-\ctikzset{bipoles/vamp/width/.initial=.7}
-\ctikzset{bipoles/piattenuator/width/.initial=.7}
-\ctikzset{bipoles/vpiattenuator/width/.initial=.7}
-\ctikzset{bipoles/tattenuator/width/.initial=.7}
-\ctikzset{bipoles/vtattenuator/width/.initial=.7}
-\ctikzset{bipoles/phaseshifter/width/.initial=.7}
-\ctikzset{bipoles/vphaseshifter/width/.initial=.7}
-\ctikzset{bipoles/detector/width/.initial=.7}
-\ctikzset{tripoles/mixer/width/.initial=0.7}
-\ctikzset{tripoles/adder/width/.initial=0.7}
-\ctikzset{tripoles/circulator/width/.initial=.7}
-\ctikzset{tripoles/oscillator/width/.initial=.7}
-
-\ctikzset{tripoles/wilkinson/height/.initial=1.3}
-\ctikzset{tripoles/wilkinson/width/.initial=1.3}
-
-\ctikzset{tripoles/splitter/height/.initial=1.3}
-\ctikzset{tripoles/splitter/width/.initial=1.3}
-
-\ctikzset{tripoles/mzm/height/.initial=1.3}
-\ctikzset{tripoles/mzm/width/.initial=1.3}
-%%>>>
-
-% Transistors %<<<1
-
-\newif\ifpgf at circuit@trans at depletiontype
-\pgf at circuit@trans at depletiontypefalse
-
-\newif\ifpgf at circuit@mos at arrows
-\ctikzset{tripoles/mos style/.is choice}
-\ctikzset{tripoles/mos style/no arrows/.code={\pgf at circuit@mos at arrowsfalse}}
-\ctikzset{tripoles/mos style/arrows/.code={\pgf at circuit@mos at arrowstrue}}
-\pgfkeys{/tikz/arrowmos/.add code={}{\pgf at circuit@mos at arrowstrue}}
-\pgfkeys{/tikz/noarrowmos/.add code={}{\pgf at circuit@mos at arrowsfalse}}
-
-% Fixed label positions
-\newif\ifpgf at circuit@transisors at fixlabels
-\pgf at circuit@transisors at fixlabelstrue
-\pgfkeys{/tikz/center transistors text/.add code={}{\pgf at circuit@transisors at fixlabelstrue}}
-\ctikzset{fix transistors text/.add code={}{\pgf at circuit@transisors at fixlabelstrue}}
-\pgfkeys{/tikz/legacy transistors text/.add code={}{\pgf at circuit@transisors at fixlabelsfalse}}
-\ctikzset{legacy transistors text/.add code={}{\pgf at circuit@transisors at fixlabelsfalse}}
-
-% Option solderdot for fet
-\newif\ifpgf at circuit@fet at solderdot
-\pgfkeys{/tikz/solderdot/.add code={}{\pgf at circuit@fet at solderdottrue}}
-\ctikzset{solderdot/.add code={}{\pgf at circuit@fet at solderdottrue}}
-\pgfkeys{/tikz/nosolderdot/.add code={}{\pgf at circuit@fet at solderdotfalse}}
-\ctikzset{nosolderdot/.add code={}{\pgf at circuit@fet at solderdotfalse}}
-
-% Option bodydiode for fet
-\newif\ifpgf at circuit@fet at bodydiode
-\pgfkeys{/tikz/bodydiode/.add code={}{\pgf at circuit@fet at bodydiodetrue}}
-\ctikzset{bodydiode/.add code={}{\pgf at circuit@fet at bodydiodetrue}}
-\pgfkeys{/tikz/nobodydiode/.add code={}{\pgf at circuit@fet at bodydiodefalse}}
-\ctikzset{nobodydiode/.add code={}{\pgf at circuit@fet at bodydiodefalse}}
-
-% Option draw fet without gate connection
-\newif\ifpgf at circuit@bpt at drawgate
-\pgf at circuit@bpt at drawgatetrue
-\pgfkeys{/tikz/nogate/.add code={}{\pgf at circuit@bpt at drawgatefalse}}
-\ctikzset{nogate/.add code={}{\pgf at circuit@bpt at drawgatefalse}}
-\pgfkeys{/tikz/nobase/.add code={}{\pgf at circuit@bpt at drawgatefalse}}
-\ctikzset{nobase/.add code={}{\pgf at circuit@bpt at drawgatefalse}}
-
-% Option draw bpt with schottky base
-\newif\ifpgf at circuit@bpt at schottky
-\pgf at circuit@bpt at schottkyfalse
-\pgfkeys{/tikz/schottky base/.add code={}{\pgf at circuit@bpt at schottkytrue}}
-\ctikzset{schottky base/.add code={}{\pgf at circuit@bpt at schottkytrue}}
-\pgfkeys{/tikz/no schottky base/.add code={}{\pgf at circuit@bpt at schottkyfalse}}
-\ctikzset{no schottky base/.add code={}{\pgf at circuit@bpt at schottkyfalse}}
-\ctikzset{tripoles/schottky base size/.initial=0.05}
-
-% Option draw bpt without base connection
-\newif\ifpgf at circuit@bpt at drawbase
-\pgf at circuit@bpt at drawbasetrue
-\pgfkeys{/tikz/nobase/.add code={}{\pgf at circuit@bpt at drawbasefalse}}
-\ctikzset{nobase/.add code={}{\pgf at circuit@bpt at drawbasefalse}}
-\pgfkeys{/tikz/nogate/.add code={}{\pgf at circuit@bpt at drawbasefalse}}
-\ctikzset{nogate/.add code={}{\pgf at circuit@bpt at drawbasefalse}}
-
-% Option draw bpt with optical input
-\newif\ifpgf at circuit@bpt at drawphoto
-\pgf at circuit@bpt at drawphotofalse
-\pgfkeys{/tikz/photo/.add code={}{\pgf at circuit@bpt at drawphototrue}}
-\ctikzset{photo/.add code={}{\pgf at circuit@bpt at drawphototrue}}
-\pgfkeys{/tikz/photo/.add code={}{\pgf at circuit@bpt at drawphototrue}}
-\ctikzset{photo/.add code={}{\pgf at circuit@bpt at drawphototrue}}
-
-% Option draw fet without bulk connection -- Added by Burak Kelleci
-\newif\ifpgf at circuit@bpt at drawbulk
-\pgfkeys{/tikz/bulk/.add code={}{\pgf at circuit@bpt at drawbulktrue}}
-\ctikzset{bulk/.add code={}{\pgf at circuit@bpt at drawbulktrue}}
-\pgfkeys{/tikz/nobulk/.add code={}{\pgf at circuit@bpt at drawbulkfalse}}
-\ctikzset{nobulk/.add code={}{\pgf at circuit@bpt at drawbulkfalse}}
-
-% Option draw pmos with empty circle
-\newif\ifpgf at circuit@pmos at emptycircle
-\pgf at circuit@pmos at emptycirclefalse
-\ctikzset{tripoles/pmos style/.is choice}
-\pgfkeys{/tikz/emptycircle/.add code={}{\pgf at circuit@pmos at emptycircletrue}}
-\ctikzset{tripoles/pmos style/emptycircle/.add code={}{\pgf at circuit@pmos at emptycircletrue}}
-% Option draw pmos with no circle
-\newif\ifpgf at circuit@pmos at nocircle
-\pgf at circuit@pmos at nocirclefalse
-\pgfkeys{/tikz/nocircle/.add code={}{\pgf at circuit@pmos at nocircletrue}}
-\ctikzset{tripoles/pmos style/nocircle/.add code={}{\pgf at circuit@pmos at nocircletrue}}
-% back to normal
-\pgfkeys{/tikz/fullcircle/.add code={}{\pgf at circuit@pmos at emptycirclefalse\pgf at circuit@pmos at nocirclefalse}}
-\ctikzset{tripoles/pmos style/fullcircle/.add code={}{\pgf at circuit@pmos at emptycirclefalse\pgf at circuit@pmos at nocirclefalse}}
-% arrows at the end, the correct way
-\newif\ifpgf at circuit@trans at arrowatend
-\pgf at circuit@trans at arrowatendfalse
-\ctikzset{transistors/arrow pos/.is choice}
-\ctikzset{transistors/arrow pos/legacy/.code={\pgf at circuit@trans at arrowatendfalse}}
-\ctikzset{transistors/arrow pos/end/.code={\pgf at circuit@trans at arrowatendtrue}}
-
-\newif\ifpgf at circuit@trans at ntype
-\pgf at circuit@trans at ntypetrue %default true
-%\newif\ifpgf at circuit@trans at ptype
-%\ctikzset{tripoles/nmos/.add code={\pgf at circuit@trans at ntypetrue}}
-\ctikzset{tripoles/nmos/width/.initial=.7}
-\ctikzset{tripoles/nmos/gate height/.initial=.35}
-\ctikzset{tripoles/nmos/base height/.initial=.5}
-\ctikzset{tripoles/nmos/conn height/.initial=0}
-\ctikzset{tripoles/nmos/height/.initial=1.1}
-\ctikzset{tripoles/nmos/base width/.initial=.5}
-\ctikzset{tripoles/nmos/gate width/.initial=.62}
-\ctikzset{tripoles/nmos/arrow pos/.initial=.6}
-\ctikzset{tripoles/nmos/bodydiode scale/.initial=.3}
-\ctikzset{tripoles/nmos/bodydiode distance/.initial=.3}
-\ctikzset{tripoles/nmos/bodydiode conn/.initial=.6}
-\ctikzset{tripoles/nmos/curr direction/.initial=1}
-
-\ctikzset{tripoles/pmos/width/.initial=.7}
-\ctikzset{tripoles/pmos/gate height/.initial=.35}
-\ctikzset{tripoles/pmos/base height/.initial=.5}
-\ctikzset{tripoles/pmos/conn height/.initial=0}
-\ctikzset{tripoles/pmos/height/.initial=1.1}
-\ctikzset{tripoles/pmos/base width/.initial=.5}
-\ctikzset{tripoles/pmos/gate width/.initial=.62}
-\ctikzset{tripoles/pmos/arrow pos/.initial=.4}
-\ctikzset{tripoles/pmos/bodydiode scale/.initial=.3}
-\ctikzset{tripoles/pmos/bodydiode distance/.initial=.3}
-\ctikzset{tripoles/pmos/bodydiode conn/.initial=.6}
-\ctikzset{tripoles/pmos/curr direction/.initial=-1}
-
-\ctikzset{tripoles/nmosd/width/.initial=.7}
-\ctikzset{tripoles/nmosd/gate height/.initial=.35}
-\ctikzset{tripoles/nmosd/base height/.initial=.5}
-\ctikzset{tripoles/nmosd/conn height/.initial=0}
-\ctikzset{tripoles/nmosd/height/.initial=1.1}
-\ctikzset{tripoles/nmosd/base width/.initial=.5}
-\ctikzset{tripoles/nmosd/gate width/.initial=.62}
-\ctikzset{tripoles/nmosd/arrow pos/.initial=.6}
-\ctikzset{tripoles/nmosd/bodydiode scale/.initial=.3}
-\ctikzset{tripoles/nmosd/bodydiode distance/.initial=.3}
-\ctikzset{tripoles/nmosd/bodydiode conn/.initial=.6}
-\ctikzset{tripoles/nmosd/curr direction/.initial=1}
-\ctikzset{tripoles/nmosd/depletion width/.initial=.1}
-\ctikzset{tripoles/nmosd/depletion color/.initial=default}
-
-\ctikzset{tripoles/pmosd/width/.initial=.7}
-\ctikzset{tripoles/pmosd/gate height/.initial=.35}
-\ctikzset{tripoles/pmosd/base height/.initial=.5}
-\ctikzset{tripoles/pmosd/conn height/.initial=0}
-\ctikzset{tripoles/pmosd/height/.initial=1.1}
-\ctikzset{tripoles/pmosd/base width/.initial=.5}
-\ctikzset{tripoles/pmosd/gate width/.initial=.62}
-\ctikzset{tripoles/pmosd/arrow pos/.initial=.4}
-\ctikzset{tripoles/pmosd/bodydiode scale/.initial=.3}
-\ctikzset{tripoles/pmosd/bodydiode distance/.initial=.3}
-\ctikzset{tripoles/pmosd/bodydiode conn/.initial=.6}
-\ctikzset{tripoles/pmosd/curr direction/.initial=-1}
-\ctikzset{tripoles/pmosd/depletion width/.initial=.1}
-\ctikzset{tripoles/pmosd/depletion color/.initial=default}
-\ctikzset{tripoles/hemt/width/.initial=.7}
-\ctikzset{tripoles/hemt/gate height/.initial=.35}
-\ctikzset{tripoles/hemt/base height/.initial=.5}
-\ctikzset{tripoles/hemt/conn height/.initial=0}
-\ctikzset{tripoles/hemt/height/.initial=1.1}
-\ctikzset{tripoles/hemt/base width/.initial=.5}
-\ctikzset{tripoles/hemt/gate width/.initial=.62}
-\ctikzset{tripoles/hemt/bodydiode scale/.initial=.3}
-\ctikzset{tripoles/hemt/bodydiode distance/.initial=.3}
-\ctikzset{tripoles/hemt/bodydiode conn/.initial=.6}
-\ctikzset{tripoles/hemt/curr direction/.initial=1}
-
-\ctikzset{tripoles/nfet/width/.initial=.7}
-\ctikzset{tripoles/nfet/gate height/.initial=.35}
-\ctikzset{tripoles/nfet/base height/.initial=.5}
-\ctikzset{tripoles/nfet/conn height/.initial=0}
-\ctikzset{tripoles/nfet/height/.initial=1.1}
-\ctikzset{tripoles/nfet/base width/.initial=.5}
-\ctikzset{tripoles/nfet/gate width/.initial=.62}
-\ctikzset{tripoles/nfet/bodydiode scale/.initial=.3}
-\ctikzset{tripoles/nfet/bodydiode distance/.initial=.3}
-\ctikzset{tripoles/nfet/bodydiode conn/.initial=.6}
-\ctikzset{tripoles/nfet/curr direction/.initial=1}
-
-\ctikzset{tripoles/pfet/width/.initial=.7}
-\ctikzset{tripoles/pfet/gate height/.initial=.35}
-\ctikzset{tripoles/pfet/base height/.initial=.5}
-\ctikzset{tripoles/pfet/conn height/.initial=0}
-\ctikzset{tripoles/pfet/height/.initial=1.1}
-\ctikzset{tripoles/pfet/base width/.initial=.5}
-\ctikzset{tripoles/pfet/gate width/.initial=.62}
-\ctikzset{tripoles/pfet/bodydiode scale/.initial=.3}
-\ctikzset{tripoles/pfet/bodydiode distance/.initial=.3}
-\ctikzset{tripoles/pfet/bodydiode conn/.initial=.6}
-\ctikzset{tripoles/pfet/curr direction/.initial=-1}
-
-\ctikzset{tripoles/nfetd/width/.initial=.7}
-\ctikzset{tripoles/nfetd/gate height/.initial=.35}
-\ctikzset{tripoles/nfetd/base height/.initial=.5}
-\ctikzset{tripoles/nfetd/conn height/.initial=0}
-\ctikzset{tripoles/nfetd/height/.initial=1.1}
-\ctikzset{tripoles/nfetd/base width/.initial=.5}
-\ctikzset{tripoles/nfetd/gate width/.initial=.62}
-\ctikzset{tripoles/nfetd/bodydiode scale/.initial=.3}
-\ctikzset{tripoles/nfetd/bodydiode distance/.initial=.3}
-\ctikzset{tripoles/nfetd/bodydiode conn/.initial=.6}
-\ctikzset{tripoles/nfetd/curr direction/.initial=1}
-
-\ctikzset{tripoles/pfetd/width/.initial=.7}
-\ctikzset{tripoles/pfetd/gate height/.initial=.35}
-\ctikzset{tripoles/pfetd/base height/.initial=.5}
-\ctikzset{tripoles/pfetd/conn height/.initial=0}
-\ctikzset{tripoles/pfetd/height/.initial=1.1}
-\ctikzset{tripoles/pfetd/base width/.initial=.5}
-\ctikzset{tripoles/pfetd/gate width/.initial=.62}
-\ctikzset{tripoles/pfetd/bodydiode scale/.initial=.3}
-\ctikzset{tripoles/pfetd/bodydiode distance/.initial=.3}
-\ctikzset{tripoles/pfetd/bodydiode conn/.initial=.6}
-\ctikzset{tripoles/pfetd/curr direction/.initial=-1}
-
-\ctikzset{tripoles/nigfete/width/.initial=.7}
-\ctikzset{tripoles/nigfete/gate height/.initial=.35}
-\ctikzset{tripoles/nigfete/base height/.initial=.5}
-\ctikzset{tripoles/nigfete/conn height/.initial=.35}
-\ctikzset{tripoles/nigfete/height/.initial=1.1}
-\ctikzset{tripoles/nigfete/base width/.initial=.5}
-\ctikzset{tripoles/nigfete/gate width/.initial=.62}
-\ctikzset{tripoles/nigfete/bodydiode scale/.initial=.3}
-\ctikzset{tripoles/nigfete/bodydiode distance/.initial=.3}
-\ctikzset{tripoles/nigfete/bodydiode conn/.initial=.6}
-\ctikzset{tripoles/nigfete/curr direction/.initial=1}
-
-\ctikzset{tripoles/nigfetd/width/.initial=.7}
-\ctikzset{tripoles/nigfetd/gate height/.initial=.35}
-\ctikzset{tripoles/nigfetd/base height/.initial=.5}
-\ctikzset{tripoles/nigfetd/conn height/.initial=.35}
-\ctikzset{tripoles/nigfetd/height/.initial=1.1}
-\ctikzset{tripoles/nigfetd/base width/.initial=.5}
-\ctikzset{tripoles/nigfetd/gate width/.initial=.62}
-\ctikzset{tripoles/nigfetd/bodydiode scale/.initial=.3}
-\ctikzset{tripoles/nigfetd/bodydiode distance/.initial=.3}
-\ctikzset{tripoles/nigfetd/bodydiode conn/.initial=.6}
-\ctikzset{tripoles/nigfetd/curr direction/.initial=1}
-
-\ctikzset{tripoles/nigfetebulk/width/.initial=.7}
-\ctikzset{tripoles/nigfetebulk/gate height/.initial=.35}
-\ctikzset{tripoles/nigfetebulk/base height/.initial=.5}
-\ctikzset{tripoles/nigfetebulk/conn height/.initial=.35}
-\ctikzset{tripoles/nigfetebulk/height/.initial=1.1}
-\ctikzset{tripoles/nigfetebulk/base width/.initial=.5}
-\ctikzset{tripoles/nigfetebulk/gate width/.initial=.62}
-\ctikzset{tripoles/nigfetebulk/bodydiode scale/.initial=.3}
-\ctikzset{tripoles/nigfetebulk/bodydiode distance/.initial=.3}
-\ctikzset{tripoles/nigfetebulk/bodydiode conn/.initial=.6}
-\ctikzset{tripoles/nigfetebulk/curr direction/.initial=1}
-
-\ctikzset{tripoles/pigfete/width/.initial=.7}
-\ctikzset{tripoles/pigfete/gate height/.initial=.35}
-\ctikzset{tripoles/pigfete/base height/.initial=.5}
-\ctikzset{tripoles/pigfete/conn height/.initial=.35}
-\ctikzset{tripoles/pigfete/height/.initial=1.1}
-\ctikzset{tripoles/pigfete/base width/.initial=.5}
-\ctikzset{tripoles/pigfete/gate width/.initial=.62}
-\ctikzset{tripoles/pigfete/bodydiode scale/.initial=.3}
-\ctikzset{tripoles/pigfete/bodydiode distance/.initial=.3}
-\ctikzset{tripoles/pigfete/bodydiode conn/.initial=.6}
-\ctikzset{tripoles/pigfete/curr direction/.initial=-1}
-
-\ctikzset{tripoles/pigfetd/width/.initial=.7}
-\ctikzset{tripoles/pigfetd/gate height/.initial=.35}
-\ctikzset{tripoles/pigfetd/base height/.initial=.5}
-\ctikzset{tripoles/pigfetd/conn height/.initial=.35}
-\ctikzset{tripoles/pigfetd/height/.initial=1.1}
-\ctikzset{tripoles/pigfetd/base width/.initial=.5}
-\ctikzset{tripoles/pigfetd/gate width/.initial=.62}
-\ctikzset{tripoles/pigfetd/bodydiode scale/.initial=.3}
-\ctikzset{tripoles/pigfetd/bodydiode distance/.initial=.3}
-\ctikzset{tripoles/pigfetd/bodydiode conn/.initial=.6}
-\ctikzset{tripoles/pigfetd/curr direction/.initial=-1}
-
-\ctikzset{tripoles/pigfetebulk/width/.initial=.7}
-\ctikzset{tripoles/pigfetebulk/gate height/.initial=.35}
-\ctikzset{tripoles/pigfetebulk/conn height/.initial=.35}
-\ctikzset{tripoles/pigfetebulk/base height/.initial=.5}
-\ctikzset{tripoles/pigfetebulk/height/.initial=1.1}
-\ctikzset{tripoles/pigfetebulk/base width/.initial=.5}
-\ctikzset{tripoles/pigfetebulk/gate width/.initial=.62}
-\ctikzset{tripoles/pigfetebulk/bodydiode scale/.initial=.3}
-\ctikzset{tripoles/pigfetebulk/bodydiode distance/.initial=.3}
-\ctikzset{tripoles/pigfetebulk/bodydiode conn/.initial=.6}
-\ctikzset{tripoles/pigfetebulk/curr direction/.initial=-1}
-
-\ctikzset{tripoles/npn/width/.initial=.6}
-\ctikzset{tripoles/npn/base height/.initial=.45}
-\ctikzset{tripoles/npn/base height 2/.initial=.15}
-\ctikzset{tripoles/npn/base height/.initial=.4}
-\ctikzset{tripoles/npn/conn height/.initial=0}
-\ctikzset{tripoles/npn/height/.initial=1.1}
-\ctikzset{tripoles/npn/base width/.initial=.5}
-\ctikzset{tripoles/npn/arrow pos/.initial=.5}
-\ctikzset{tripoles/npn/bodydiode scale/.initial=.3}
-\ctikzset{tripoles/npn/bodydiode distance/.initial=.3}
-\ctikzset{tripoles/npn/bodydiode conn/.initial=.6}
-\ctikzset{tripoles/npn/curr direction/.initial=1}
-
-\ctikzset{tripoles/pnp/width/.initial=.6}
-\ctikzset{tripoles/pnp/base height/.initial=.45}
-\ctikzset{tripoles/pnp/base height 2/.initial=.15}
-\ctikzset{tripoles/pnp/base height/.initial=.4}
-\ctikzset{tripoles/pnp/conn height/.initial=0}
-\ctikzset{tripoles/pnp/height/.initial=1.1}
-\ctikzset{tripoles/pnp/base width/.initial=.5}
-\ctikzset{tripoles/pnp/arrow pos/.initial=.5}
-\ctikzset{tripoles/pnp/bodydiode scale/.initial=.3}
-\ctikzset{tripoles/pnp/bodydiode distance/.initial=.3}
-\ctikzset{tripoles/pnp/bodydiode conn/.initial=.6}
-\ctikzset{tripoles/pnp/curr direction/.initial=-1}
-
-\ctikzset{tripoles/pigbt/width/.initial=.6}
-\ctikzset{tripoles/pigbt/gate height/.initial=.45}
-\ctikzset{tripoles/pigbt/gate height 2/.initial=.15}
-\ctikzset{tripoles/pigbt/base height/.initial=.4}
-\ctikzset{tripoles/pigbt/outer base height/.initial=.4}
-\ctikzset{tripoles/pigbt/outer base thickness/.initial=1}
-\ctikzset{tripoles/pigbt/conn height/.initial=0}
-\ctikzset{tripoles/pigbt/height/.initial=1.1}
-\ctikzset{tripoles/pigbt/gate width/.initial=.62}
-\ctikzset{tripoles/pigbt/base width/.initial=.5}
-\ctikzset{tripoles/pigbt/bodydiode scale/.initial=.3}
-\ctikzset{tripoles/pigbt/bodydiode distance/.initial=.3}
-\ctikzset{tripoles/pigbt/bodydiode conn/.initial=.6}
-\ctikzset{tripoles/pigbt/curr direction/.initial=-1}
-
-\ctikzset{tripoles/nigbt/width/.initial=.6}
-\ctikzset{tripoles/nigbt/gate height/.initial=.45}
-\ctikzset{tripoles/nigbt/gate height 2/.initial=.15}
-\ctikzset{tripoles/nigbt/base height/.initial=.4}
-\ctikzset{tripoles/nigbt/outer base height/.initial=.4}
-\ctikzset{tripoles/nigbt/outer base thickness/.initial=1}
-\ctikzset{tripoles/nigbt/conn height/.initial=0}
-\ctikzset{tripoles/nigbt/height/.initial=1.1}
-\ctikzset{tripoles/nigbt/gate width/.initial=.62}
-\ctikzset{tripoles/nigbt/base width/.initial=.5}
-\ctikzset{tripoles/nigbt/bodydiode scale/.initial=.3}
-\ctikzset{tripoles/nigbt/bodydiode distance/.initial=.3}
-\ctikzset{tripoles/nigbt/bodydiode conn/.initial=.6}
-\ctikzset{tripoles/nigbt/curr direction/.initial=1}
-
-\ctikzset{tripoles/Lpigbt/width/.initial=.6}
-\ctikzset{tripoles/Lpigbt/gate height/.initial=.45}
-\ctikzset{tripoles/Lpigbt/gate height 2/.initial=.15}
-\ctikzset{tripoles/Lpigbt/base height/.initial=.4}
-\ctikzset{tripoles/Lpigbt/outer base height/.initial=.4}
-\ctikzset{tripoles/Lpigbt/outer base thickness/.initial=1}
-\ctikzset{tripoles/Lpigbt/conn height/.initial=.4}
-\ctikzset{tripoles/Lpigbt/height/.initial=1.1}
-\ctikzset{tripoles/Lpigbt/gate width/.initial=.62}
-\ctikzset{tripoles/Lpigbt/base width/.initial=.5}
-\ctikzset{tripoles/Lpigbt/bodydiode scale/.initial=.3}
-\ctikzset{tripoles/Lpigbt/bodydiode distance/.initial=.3}
-\ctikzset{tripoles/Lpigbt/bodydiode conn/.initial=.6}
-\ctikzset{tripoles/Lpigbt/curr direction/.initial=-1}
-
-\ctikzset{tripoles/Lnigbt/width/.initial=.6}
-\ctikzset{tripoles/Lnigbt/gate height/.initial=.45}
-\ctikzset{tripoles/Lnigbt/gate height 2/.initial=.15}
-\ctikzset{tripoles/Lnigbt/base height/.initial=.4}
-\ctikzset{tripoles/Lnigbt/outer base height/.initial=.4}
-\ctikzset{tripoles/Lnigbt/outer base thickness/.initial=1}
-\ctikzset{tripoles/Lnigbt/conn height/.initial=.4}
-\ctikzset{tripoles/Lnigbt/height/.initial=1.1}
-\ctikzset{tripoles/Lnigbt/gate width/.initial=.62}
-\ctikzset{tripoles/Lnigbt/base width/.initial=.5}
-\ctikzset{tripoles/Lnigbt/bodydiode scale/.initial=.3}
-\ctikzset{tripoles/Lnigbt/bodydiode distance/.initial=.3}
-\ctikzset{tripoles/Lnigbt/bodydiode conn/.initial=.6}
-\ctikzset{tripoles/Lnigbt/curr direction/.initial=1}
-
-\ctikzset{tripoles/igbt/outer base height/.code={
-    \ctikzset{tripoles/nigbt/outer base height/.initial=#1}
-    \ctikzset{tripoles/pigbt/outer base height/.initial=#1}
-    \ctikzset{tripoles/Lnigbt/outer base height/.initial=#1}
-    \ctikzset{tripoles/Lpigbt/outer base height/.initial=#1}
-    \ctikzset{tripoles/Lnigbt/conn height/.initial=#1}
-    \ctikzset{tripoles/Lpigbt/conn height/.initial=#1}
-}}
-\ctikzset{tripoles/igbt/outer base thickness/.code={
-    \ctikzset{tripoles/nigbt/outer base thickness=#1}
-    \ctikzset{tripoles/pigbt/outer base thickness=#1}
-    \ctikzset{tripoles/Lnigbt/outer base thickness=#1}
-    \ctikzset{tripoles/Lpigbt/outer base thickness=#1}
-}}
-
-\ctikzset{tripoles/njfet/width/.initial=.7}
-\ctikzset{tripoles/njfet/gate height/.initial=.5}
-\ctikzset{tripoles/njfet/gate height 2/.initial=.35}
-\ctikzset{tripoles/njfet/gate width/.initial=.5}
-\ctikzset{tripoles/njfet/conn height/.initial=.35}
-\ctikzset{tripoles/njfet/height/.initial=1.1}
-\ctikzset{tripoles/njfet/bodydiode scale/.initial=.3}
-\ctikzset{tripoles/njfet/bodydiode distance/.initial=.3}
-\ctikzset{tripoles/njfet/bodydiode conn/.initial=.6}
-\ctikzset{tripoles/njfet/curr direction/.initial=1}
-
-\ctikzset{tripoles/pjfet/width/.initial=.7}
-\ctikzset{tripoles/pjfet/gate height/.initial=.5}
-\ctikzset{tripoles/pjfet/gate height 2/.initial=.35}
-\ctikzset{tripoles/pjfet/gate width/.initial=.5}
-\ctikzset{tripoles/pjfet/conn height/.initial=.35}
-\ctikzset{tripoles/pjfet/height/.initial=1.1}
-\ctikzset{tripoles/pjfet/bodydiode scale/.initial=.3}
-\ctikzset{tripoles/pjfet/bodydiode distance/.initial=.3}
-\ctikzset{tripoles/pjfet/bodydiode conn/.initial=.6}
-\ctikzset{tripoles/pjfet/curr direction/.initial=-1}
-
-\ctikzset{tripoles/isfet/width/.initial=1}
-\ctikzset{tripoles/isfet/gate height/.initial=.35}
-\ctikzset{tripoles/isfet/base height/.initial=.5}
-\ctikzset{tripoles/isfet/height/.initial=1.1}
-\ctikzset{tripoles/isfet/base width/.initial=.3}
-\ctikzset{tripoles/isfet/gate width/.initial=.5}
-\ctikzset{tripoles/isfet/conn height/.initial=0}
-\ctikzset{tripoles/isfet/wave width/.initial=.16}
-\ctikzset{tripoles/isfet/wave amp/.initial=.06}
-\ctikzset{tripoles/isfet/waves y sep/.initial=.22}
-\ctikzset{tripoles/isfet/waves x sep/.initial=.8}
-\ctikzset{tripoles/isfet/bodydiode scale/.initial=.3}
-\ctikzset{tripoles/isfet/bodydiode distance/.initial=.3}
-\ctikzset{tripoles/isfet/bodydiode conn/.initial=.6}
-\ctikzset{tripoles/isfet/curr direction/.initial=1}
-%
-% multi-emitter and multi-collector BJTs by Romano Giannetti
-%
-\ctikzset{tripoles/bjt/emitters/.initial=1}
-\ctikzset{tripoles/bjt/collectors/.initial=1}
-\pgfkeys{/tikz/emitters/.add code={}{\ctikzset{tripoles/bjt/emitters=#1}}}
-\pgfkeys{/tikz/collectors/.add code={}{\ctikzset{tripoles/bjt/collectors=#1}}}
-\ctikzset{tripoles/bjt/pins width/.initial=0.3}
-\pgfkeys{/tikz/bjt pins width/.add code={}{\ctikzset{tripoles/bjt/pins width=#1}}}
-\ctikzset{tripoles/bjt/multi height/.initial=.5}
-\pgfkeys{/tikz/bjt multi height/.add code={}{\ctikzset{tripoles/bjt/multi height/.initial=#1}}}
-%
-\ctikzset{tripoles/bjt/width/.initial=.3}
-\ctikzset{tripoles/bjt/base height 2/.initial=.4}
-\ctikzset{tripoles/bjt/base height/.initial=1.1}
-\ctikzset{tripoles/bjt/height/.initial=.4}
-\ctikzset{tripoles/bjt/base width/.initial=1}
-\ctikzset{tripoles/bjt/arrow pos/.initial=.5}
-% do NOT touch these two!
-\ctikzset{tripoles/bjt/npn/curr direction/.initial=1}
-\ctikzset{tripoles/bjt/pnp/curr direction/.initial=-1}
-
-%% transistors stop here
-%%>>>
-
-% Electronic tubes: diodetube, triode, tetrode and pentode%<<<1
-\ctikzset{tubes/width/.initial=1}                    % relative width
-\ctikzset{tubes/height/.initial=1.4}                 % relative height
-\ctikzset{tubes/tube radius/.initial=0.40}           % radius of tube circle
-\ctikzset{tubes/anode distance/.initial=0.40}        % distance from center
-\ctikzset{tubes/anode width/.initial=0.40}           % width of an anode/plate
-\ctikzset{tubes/grid protrusion/.initial=0.25}       % distance from center
-\ctikzset{tubes/grid dashes/.initial=5}              % number of grid dashes
-\ctikzset{tubes/grid separation/.initial=0.2}        % separation between grids
-\ctikzset{tubes/grid shift/.initial=0.0}             % y shift grids from center
-\ctikzset{tubes/cathode distance/.initial=0.40}      % distance from grid
-\ctikzset{tubes/cathode width/.initial=0.40}         % width of an cathode
-\ctikzset{tubes/cathode corners/.initial=0.06}       % corners of the cathode wire
-\ctikzset{tubes/cathode right extend/.initial=0.075} % extension at the right side
-\ctikzset{tubes/filament distance/.initial=0.1}      % distance from cathode
-\ctikzset{tubes/filament angle/.initial=15}          % Angle from centerpoint
-
-\newif\ifpgf at circuit@tubes at filament\pgf at circuit@tubes at filamentfalse
-\pgfkeys{/tikz/filament/.add code={}{\pgf at circuit@tubes at filamenttrue}}
-\ctikzset{tubes/filament/.add code={}{\pgf at circuit@tubes at filamenttrue}}
-\newif\ifpgf at circuit@tubes at nocathode\pgf at circuit@tubes at nocathodefalse
-\pgfkeys{/tikz/nocathode/.add code={}{\pgf at circuit@tubes at nocathodetrue}}
-\ctikzset{tubes/nocathode/.add code={}{\pgf at circuit@tubes at nocathodetrue}}
-\newif\ifpgf at circuit@tubes at fullcathode\pgf at circuit@tubes at fullcathodefalse
-\pgfkeys{/tikz/fullcathode/.add code={}{\pgf at circuit@tubes at fullcathodetrue}}
-\ctikzset{tubes/fullcathode/.add code={}{\pgf at circuit@tubes at fullcathodetrue}}%
-%>>>
-
-%% Logic ports%<<<1
-%% beware that the third option is in IEEE ports in pgfcircmultipoles.tex
-
-% switches for logic gates
-%
-\pgfkeys{/tikz/number inputs/.initial=0}
-\pgfkeys{/tikz/number inputs/.default=0}
-
-\newif\ifpgf at circuit@europeanlogicport
-\ctikzset{logic ports/.is choice}
-\ctikzset{logic ports/european/.code= {\pgf at circuit@europeanlogicporttrue
-    \tikzset{and port/.style={shape=european and port}}%
-    \tikzset{or port/.style={shape=european or port}}%
-    \tikzset{xor port/.style={shape=european xor port}}%
-    \tikzset{buffer port/.style={shape=european buffer port}}%
-    \tikzset{not port/.style={shape=european not port}}%
-    \tikzset{nand port/.style={shape=european nand port}}%
-    \tikzset{nor port/.style={shape=european nor port}}%
-    \tikzset{xnor port/.style={shape=european xnor port}}%
-    % there is no Schmitt ports in european style (yet)
-    \tikzset{schmitt port/.style={shape=schmitt}}%
-    \tikzset{invschmitt port/.style={shape=invschmitt}}%
-}}
-\ctikzset{logic ports/american/.code= {\pgf at circuit@europeanlogicportfalse
-    \tikzset{and port/.style={shape=american and port}}%
-    \tikzset{or port/.style={shape=american or port}}%
-    \tikzset{xor port/.style={shape=american xor port}}%
-    \tikzset{buffer port/.style={shape=american buffer port}}%
-    \tikzset{not port/.style={shape=american not port}}%
-    \tikzset{nand port/.style={shape=american nand port}}%
-    \tikzset{nor port/.style={shape=american nor port}}%
-    \tikzset{xnor port/.style={shape=american xnor port}}%
-    \tikzset{schmitt port/.style={shape=schmitt}}%
-    \tikzset{invschmitt port/.style={shape=invschmitt}}%
-}}
-
-\ctikzset{logic ports origin/.is choice}
-\ctikzset{logic ports origin/legacy/.code={
-    \ctikzset{tripoles/american and port/origin/.initial=0.8}%
-    \ctikzset{tripoles/american nand port/origin/.initial=0.8}%
-    \ctikzset{tripoles/american nor port/origin/.initial=0.8}%
-    \ctikzset{tripoles/american or port/origin/.initial=0.8}%
-    \ctikzset{tripoles/american xor port/origin/.initial=0.8}%
-    \ctikzset{tripoles/american xnor port/origin/.initial=0.8}%
-    \ctikzset{tripoles/european and port/origin/.initial=0.8}%
-    \ctikzset{tripoles/european nand port/origin/.initial=0.8}%
-    \ctikzset{tripoles/european or port/origin/.initial=0.8}%
-    \ctikzset{tripoles/european nor port/origin/.initial=0.8}%
-    \ctikzset{tripoles/european xor port/origin/.initial=0.8}%
-    \ctikzset{tripoles/european xnor port/origin/.initial=0.8}%
-    \ctikzset{tripoles/european buffer port/origin/.initial=0.8}%
-    \ctikzset{tripoles/european not port/origin/.initial=0.8}%
-    }%
-}
-\ctikzset{logic ports origin/center/.code={%
-    \ctikzset{tripoles/american and port/origin/.initial=0}%
-    \ctikzset{tripoles/american nand port/origin/.initial=0}%
-    \ctikzset{tripoles/american nor port/origin/.initial=0}%
-    \ctikzset{tripoles/american or port/origin/.initial=0}%
-    \ctikzset{tripoles/american xor port/origin/.initial=0}%
-    \ctikzset{tripoles/american xnor port/origin/.initial=0}%
-    \ctikzset{tripoles/european and port/origin/.initial=0}%
-    \ctikzset{tripoles/european nand port/origin/.initial=0}%
-    \ctikzset{tripoles/european or port/origin/.initial=0}%
-    \ctikzset{tripoles/european nor port/origin/.initial=0}%
-    \ctikzset{tripoles/european xor port/origin/.initial=0}%
-    \ctikzset{tripoles/european xnor port/origin/.initial=0}%
-    \ctikzset{tripoles/european buffer port/origin/.initial=0}%
-    \ctikzset{tripoles/european not port/origin/.initial=0}%
-    }%
-}
-
-\newif\ifpgfcirc at roundy@or at shapes\pgfcirc at roundy@or at shapesfalse
-\ctikzset{american or shape/.is choice}
-\ctikzset{american or shape/roundy/.code={\pgfcirc at roundy@or at shapestrue}}
-\ctikzset{american or shape/pointy/.code={\pgfcirc at roundy@or at shapesfalse}}
-
-\newif\ifpgfcirc at draw@input at leads\pgfcirc at draw@input at leadstrue
-\ctikzset{logic ports draw input leads/.is choice}
-\ctikzset{logic ports draw input leads/true/.code={\pgfcirc at draw@input at leadstrue}}
-\ctikzset{logic ports draw input leads/false/.code={\pgfcirc at draw@input at leadsfalse}}
-\tikzset{input leads/.code={\pgfcirc at draw@input at leadstrue}}
-\tikzset{no input leads/.code={\pgfcirc at draw@input at leadsfalse}}
-
-\newif\ifpgfcirc at draw@output at leads\pgfcirc at draw@output at leadstrue
-\ctikzset{logic ports draw output leads/.is choice}
-\ctikzset{logic ports draw output leads/true/.code={\pgfcirc at draw@output at leadstrue}}
-\ctikzset{logic ports draw output leads/false/.code={\pgfcirc at draw@output at leadsfalse}}
-\tikzset{output leads/.code={\pgfcirc at draw@output at leadstrue}}
-\tikzset{no output leads/.code={\pgfcirc at draw@output at leadsfalse}}
-
-\ctikzset{logic ports draw leads/.is choice}
-\ctikzset{logic ports draw leads/true/.code={\pgfcirc at draw@output at leadstrue\pgfcirc at draw@input at leadstrue}}
-\ctikzset{logic ports draw leads/false/.code={\pgfcirc at draw@output at leadsfalse\pgfcirc at draw@input at leadsfalse}}
-\tikzset{all leads/.code={\pgfcirc at draw@output at leadstrue\pgfcirc at draw@input at leadstrue}}
-\tikzset{no leads/.code={\pgfcirc at draw@output at leadsfalse\pgfcirc at draw@input at leadsfalse}}
-
-% adding a different style of xnor port
-% see https://github.com/circuitikz/circuitikz/issues/467
-\ctikzset{european xnor style/.is choice}
-\ctikzset{european xnor style/default/.code={%
-    \pgfcircdeclareeurologicport{xnor}{$=1$}{\pgf at circ@res at count}{not}}%
-}
-\ctikzset{european xnor style/direct/.code={%
-    \pgfcircdeclareeurologicport{xnor}{$=$}{\pgf at circ@res at count}{}}%
-}
-
-
-% old, legacy keys that should be killed over
-\ctikzset{bipoles/buffer/height/.initial=1}
-\ctikzset{bipoles/buffer/width/.initial=1}
-\ctikzset{bipoles/not port/width/.initial=1}
-\ctikzset{bipoles/not port/height/.initial=.8}
-\ctikzset{bipoles/not port/circle width/.initial=.15}
-
-\ctikzset{tripoles/american and port/width/.initial=1.1}
-\ctikzset{tripoles/american and port/height/.initial=.8}
-\ctikzset{tripoles/american and port/port width/.initial=.7}
-\ctikzset{tripoles/american and port/input height/.initial=.5}
-\ctikzset{tripoles/american nand port/width/.initial=1.1}
-\ctikzset{tripoles/american nand port/height/.initial=.8}
-\ctikzset{tripoles/american nand port/port width/.initial=.7}
-\ctikzset{tripoles/american nand port/circle width/.initial=.15}
-\ctikzset{tripoles/american nand port/input height/.initial=.5}
-\ctikzset{tripoles/american or port/width/.initial=1.1}
-\ctikzset{tripoles/american or port/height/.initial=.8}
-\ctikzset{tripoles/american or port/port width/.initial=.7}
-\ctikzset{tripoles/american or port/input height/.initial=.5}
-\ctikzset{tripoles/american or port/input skip/.initial=.25}
-\ctikzset{tripoles/american or port/aaa/.initial=.6}
-\ctikzset{tripoles/american or port/bbb/.initial=.4}
-\ctikzset{tripoles/american or port/ccc/.initial=.5}
-\ctikzset{tripoles/american or port/ddd/.initial=.0}
-\ctikzset{tripoles/american nor port/width/.initial=1.1}
-\ctikzset{tripoles/american nor port/height/.initial=.8}
-\ctikzset{tripoles/american nor port/port width/.initial=.7}
-\ctikzset{tripoles/american nor port/input height/.initial=.5}
-\ctikzset{tripoles/american nor port/input skip/.initial=.25}
-\ctikzset{tripoles/american nor port/circle width/.initial=.15}
-\ctikzset{tripoles/american nor port/aaa/.initial=.6}
-\ctikzset{tripoles/american nor port/bbb/.initial=.4}
-\ctikzset{tripoles/american nor port/ccc/.initial=.5}
-\ctikzset{tripoles/american nor port/ddd/.initial=.0}
-\ctikzset{tripoles/american xor port/width/.initial=1.1}
-\ctikzset{tripoles/american xor port/height/.initial=.8}
-\ctikzset{tripoles/american xor port/port width/.initial=.7}
-\ctikzset{tripoles/american xor port/input height/.initial=.5}
-\ctikzset{tripoles/american xor port/input skip/.initial=.15}
-\ctikzset{tripoles/american xor port/distance/.initial=.1}
-\ctikzset{tripoles/american xnor port/width/.initial=1.1}
-\ctikzset{tripoles/american xnor port/height/.initial=.8}
-\ctikzset{tripoles/american xnor port/port width/.initial=.7}
-\ctikzset{tripoles/american xnor port/input height/.initial=.5}
-\ctikzset{tripoles/american xnor port/input skip/.initial=.15}
-\ctikzset{tripoles/american xnor port/distance/.initial=.1}
-\ctikzset{tripoles/american xnor port/circle width/.initial=.15}
-\ctikzset{tripoles/american and port/origin/.initial=0.8}
-\ctikzset{tripoles/american and port/inputs/.initial=2}
-% variable number of inputs
-\ctikzset{tripoles/american nand port/origin/.initial=0.8}
-\ctikzset{tripoles/american nand port/inputs/.initial=2}
-\ctikzset{tripoles/american nor port/origin/.initial=0.8}
-\ctikzset{tripoles/american nor port/inputs/.initial=2}
-\ctikzset{tripoles/american nor port/angle/.initial=70}
-\ctikzset{tripoles/american nor port/inner/.initial=0.3}
-\ctikzset{tripoles/american or port/origin/.initial=0.8}
-\ctikzset{tripoles/american or port/inputs/.initial=2}
-\ctikzset{tripoles/american or port/angle/.initial=70}
-\ctikzset{tripoles/american or port/inner/.initial=0.3}
-\ctikzset{tripoles/american xor port/origin/.initial=0.8}
-\ctikzset{tripoles/american xor port/inputs/.initial=2}
-\ctikzset{tripoles/american xor port/angle/.initial=70}
-\ctikzset{tripoles/american xor port/inner/.initial=0.3}
-\ctikzset{tripoles/american xnor port/origin/.initial=0.8}
-\ctikzset{tripoles/american xnor port/inputs/.initial=2}
-\ctikzset{tripoles/american xnor port/angle/.initial=70}
-\ctikzset{tripoles/american xnor port/inner/.initial=0.3}
-
-\ctikzset{tripoles/european and port/width/.initial=1.4}
-\ctikzset{tripoles/european and port/height/.initial=.65}
-\ctikzset{tripoles/european and port/reserved/.initial=.6}
-\ctikzset{tripoles/european and port/input height/.initial=.6}
-\ctikzset{tripoles/european or port/width/.initial=1.4}
-\ctikzset{tripoles/european or port/height/.initial=.65}
-\ctikzset{tripoles/european or port/reserved/.initial=.6}
-\ctikzset{tripoles/european or port/input height/.initial=.6}
-\ctikzset{tripoles/european xor port/width/.initial=1.4}
-\ctikzset{tripoles/european xor port/height/.initial=.65}
-\ctikzset{tripoles/european xor port/reserved/.initial=.6}
-\ctikzset{tripoles/european xor port/input height/.initial=.6}
-\ctikzset{tripoles/european nand port/width/.initial=1.4}
-\ctikzset{tripoles/european nand port/not height/.initial=.3}
-\ctikzset{tripoles/european nand port/not width/.initial=.8}
-\ctikzset{tripoles/european nand port/height/.initial=.65}
-\ctikzset{tripoles/european nand port/reserved/.initial=.6}
-\ctikzset{tripoles/european nand port/input height/.initial=.6}
-\ctikzset{tripoles/european buffer port/width/.initial=1.4}
-\ctikzset{tripoles/european buffer port/not height/.initial=.3}
-\ctikzset{tripoles/european buffer port/not width/.initial=.8}
-\ctikzset{tripoles/european buffer port/height/.initial=.65}
-\ctikzset{tripoles/european buffer port/reserved/.initial=.6}
-\ctikzset{tripoles/european buffer port/input height/.initial=0}
-\ctikzset{tripoles/european not port/width/.initial=1.4}
-\ctikzset{tripoles/european not port/not height/.initial=.3}
-\ctikzset{tripoles/european not port/not width/.initial=.8}
-\ctikzset{tripoles/european not port/height/.initial=.65}
-\ctikzset{tripoles/european not port/reserved/.initial=.6}
-\ctikzset{tripoles/european not port/input height/.initial=0}
-\ctikzset{tripoles/european xnor port/width/.initial=1.4}
-\ctikzset{tripoles/european xnor port/not height/.initial=.3}
-\ctikzset{tripoles/european xnor port/not width/.initial=.8}
-\ctikzset{tripoles/european xnor port/height/.initial=.65}
-\ctikzset{tripoles/european xnor port/reserved/.initial=.6}
-\ctikzset{tripoles/european xnor port/input height/.initial=.6}
-\ctikzset{tripoles/european nor port/width/.initial=1.4}
-\ctikzset{tripoles/european nor port/not height/.initial=.3}
-\ctikzset{tripoles/european nor port/not width/.initial=.8}
-\ctikzset{tripoles/european nor port/height/.initial=.65}
-\ctikzset{tripoles/european nor port/reserved/.initial=.6}
-\ctikzset{tripoles/european nor port/input height/.initial=.6}
-% variable number of inputs
-\ctikzset{tripoles/european and port/origin/.initial=0.8}
-\ctikzset{tripoles/european and port/inputs/.initial=2}
-\ctikzset{tripoles/european nand port/origin/.initial=0.8}
-\ctikzset{tripoles/european nand port/inputs/.initial=2}
-\ctikzset{tripoles/european or port/origin/.initial=0.8}
-\ctikzset{tripoles/european or port/inputs/.initial=2}
-\ctikzset{tripoles/european nor port/origin/.initial=0.8}
-\ctikzset{tripoles/european nor port/inputs/.initial=2}
-\ctikzset{tripoles/european xor port/origin/.initial=0.8}
-\ctikzset{tripoles/european xor port/inputs/.initial=2}
-\ctikzset{tripoles/european xnor port/origin/.initial=0.8}
-\ctikzset{tripoles/european xnor port/inputs/.initial=2}
-\ctikzset{tripoles/european buffer port/origin/.initial=0.8}
-\ctikzset{tripoles/european buffer port/inputs/.initial=1}%
-\ctikzset{tripoles/european not port/origin/.initial=0.8}
-\ctikzset{tripoles/european not port/inputs/.initial=1}%
-%%% parameters that are not used anymore after multi-input
-%%% gates --- left for compatibility of source code.
-\ctikzset{tripoles/american xor port/aaa/.initial=.6}
-\ctikzset{tripoles/american xor port/bbb/.initial=.4}
-\ctikzset{tripoles/american xor port/ccc/.initial=.5}
-\ctikzset{tripoles/american xor port/ddd/.initial=.0}
-\ctikzset{tripoles/american xnor port/aaa/.initial=.6}
-\ctikzset{tripoles/american xnor port/bbb/.initial=.4}
-\ctikzset{tripoles/american xnor port/ccc/.initial=.5}
-\ctikzset{tripoles/american xnor port/ddd/.initial=.0}
-%%>>>
-
-% flip flops and muxdemxes%<<<1
-
-%% flip-flop specific keys (most others are the same as chips)
-
-\ctikzset{multipoles/flipflop/font/.initial=\pgf at circ@font at small}
-\ctikzset{multipoles/flipflop/fontud/.initial=\pgf at circ@font at tiny}
-\ctikzset{multipoles/flipflop/width/.initial=1.2}
-\ctikzset{multipoles/flipflop/pin spacing/.initial=0.6}
-\ctikzset{multipoles/flipflop/clock wedge size/.initial=0.2}
-
-%% muxdemuxes keys
-
-\ctikzset{multipoles/muxdemux/base len/.initial=0.4}
-\ctikzset{multipoles/muxdemux/Lh/.initial=8.0}
-\ctikzset{multipoles/muxdemux/Rh/.initial=6.0}
-\ctikzset{multipoles/muxdemux/w/.initial=3.0}
-\ctikzset{multipoles/muxdemux/inset w/.initial=0.0}
-\ctikzset{multipoles/muxdemux/inset Lh/.initial=0.0}
-\ctikzset{multipoles/muxdemux/inset Rh/.initial=0.0}
-\ctikzset{multipoles/muxdemux/NL/.initial=8}
-\ctikzset{multipoles/muxdemux/NR/.initial=1}
-\ctikzset{multipoles/muxdemux/NB/.initial=3}
-\ctikzset{multipoles/muxdemux/NT/.initial=0}
-\ctikzset{multipoles/muxdemux/square pins/.initial=0}%
-%>>>
-
-% Amplifiers%<<<1
-%
-% switches for op amps
-% changing input polarity
-%
-\newif\ifpgf at circuit@oa at iplusup\pgf at circuit@oa at iplusupfalse
-\pgfkeys{/tikz/noinv input up/.add code={}{\pgf at circuit@oa at iplusuptrue}}
-\ctikzset{noinv input up/.add code={}{\pgf at circuit@oa at iplusuptrue}}
-\pgfkeys{/tikz/noinv input down/.add code={}{\pgf at circuit@oa at iplusupfalse}}
-\ctikzset{noinv input down/.add code={}{\pgf at circuit@oa at iplusupfalse}}
-%
-% changing output polarity (for fully diff objects)
-%
-\newif\ifpgf at circuit@oa at oplusup\pgf at circuit@oa at oplusuptrue
-\pgfkeys{/tikz/noinv output up/.add code={}{\pgf at circuit@oa at oplusuptrue}}
-\ctikzset{noinv output up/.add code={}{\pgf at circuit@oa at oplusuptrue}}
-\pgfkeys{/tikz/noinv output down/.add code={}{\pgf at circuit@oa at oplusupfalse}}
-\ctikzset{noinv output down/.add code={}{\pgf at circuit@oa at oplusupfalse}}
-
-% Operational amplifier
-\ctikzset{tripoles/op amp/width/.initial=1.7}              % Total width
-\ctikzset{tripoles/op amp/port width/.initial=.7}          % Terminals length
-\ctikzset{tripoles/op amp/height/.initial=1.4}             % Total height
-\ctikzset{tripoles/op amp/input height/.initial=.5}        % Input port vertical separation
-\ctikzset{tripoles/op amp/up pos/.initial=.45}             % Top and bottom anchor position
-\ctikzset{tripoles/op amp/font/.initial=\pgf at circ@font at tenbm}  % Absolute font size needed!
-
-% Fully differential operational amplifier
-\ctikzset{tripoles/fd op amp/width/.initial=1.7}           % Total width
-\ctikzset{tripoles/fd op amp/port width/.initial=.7}       % Terminals length
-\ctikzset{tripoles/fd op amp/height/.initial=1.4}          % Total height
-\ctikzset{tripoles/fd op amp/input height/.initial=.5}     % Input port vertical separation
-\ctikzset{tripoles/fd op amp/output height/.initial=.5}    % Output port vertical separation
-\ctikzset{tripoles/fd op amp/up pos/.initial=.45}          % Top and bottom anchor position
-\ctikzset{tripoles/fd op amp/font/.initial=\pgf at circ@font at tenbm}  % Absolute font size needed!
-
-\ctikzset{tripoles/en amp/width/.initial=1.7}
-\ctikzset{tripoles/en amp/port width/.initial=.7}
-\ctikzset{tripoles/en amp/height/.initial=1.6}
-\ctikzset{tripoles/en amp/input height/.initial=.3}
-\ctikzset{tripoles/en amp/up pos/.initial=.45}
-\ctikzset{tripoles/en amp/font/.initial=\pgf at circ@font at tenbm}   % Absolute font size needed!
-\ctikzset{tripoles/en amp/font2/.initial=\pgf at circ@font at twelve}  % Absolute font size needed!
-\ctikzset{tripoles/en amp/text/.initial={$\mathstrut{\triangleright}\,{\infty}$}}
-\tikzset{
-    en amp text/.code = {%
-        \ctikzsetvalof{tripoles/en amp/text}{#1}%
-    },
-    en amp text A/.code = {%
-        \ctikzsetvalof{tripoles/en amp/text}{$\mathstrut{\triangleright}\,\mathrm{A}$}%
-    },
-}
-
-% Transconductance amplifier
-\ctikzset{tripoles/gm amp/width/.initial=1.7}              % Total width
-\ctikzset{tripoles/gm amp/port width/.initial=.7}          % Terminals length
-\ctikzset{tripoles/gm amp/height/.initial=1.4}             % Left side of the trapezoid
-\ctikzset{tripoles/gm amp/height 2/.initial=0.5}           % Right side of the trapezoid
-\ctikzset{tripoles/gm amp/input height/.initial=.5}        % Input port vertical separation
-\ctikzset{tripoles/gm amp/up pos/.initial=.45}             % Top and bottom anchor position
-\ctikzset{tripoles/gm amp/font/.initial=\pgf at circ@font at tenbm}  % Absolute font size needed!
-
-% Instrumentation amplifier
-\ctikzset{tripoles/inst amp/width/.initial=1.7}            % Total width
-\ctikzset{tripoles/inst amp/port width/.initial=.7}        % Terminals length
-\ctikzset{tripoles/inst amp/height/.initial=1.4}           % Left side of the trapezoid
-\ctikzset{tripoles/inst amp/height 2/.initial=0.6}         % Right side of the trapezoid
-\ctikzset{tripoles/inst amp/input height/.initial=.5}      % Input ports vertical separation
-\ctikzset{tripoles/inst amp/up pos/.initial=.4}            % Top and bottom anchor position
-\ctikzset{tripoles/inst amp/refv pos/.initial=.7}          % Top and bottom voltage reference position
-\ctikzset{tripoles/inst amp/font/.initial=\pgf at circ@font at tenbm}  % Absolute font size needed!
-
-% Instrumentation amplifier with differential output
-\ctikzset{tripoles/fd inst amp/width/.initial=1.7}         % Total width
-\ctikzset{tripoles/fd inst amp/port width/.initial=.7}     % Terminals length
-\ctikzset{tripoles/fd inst amp/height/.initial=1.4}        % Left side of the trapezoid
-\ctikzset{tripoles/fd inst amp/height 2/.initial=0.6}      % Right side of the trapezoid
-\ctikzset{tripoles/fd inst amp/input height/.initial=.5}   % Input ports vertical separation
-\ctikzset{tripoles/fd inst amp/output height/.initial=.5}  % Output ports vertical separation
-\ctikzset{tripoles/fd inst amp/up pos/.initial=.4}         % Top and bottom anchor position
-\ctikzset{tripoles/fd inst amp/refv pos/.initial=.7}       % Top and bottom voltage reference position
-\ctikzset{tripoles/fd inst amp/font/.initial=\pgf at circ@font at tenbm}  % Absolute font size needed!
-
-% Instrumentation amplifier with gain resistor terminals
-\ctikzset{tripoles/inst amp ra/width/.initial=2.4}         % Total width
-\ctikzset{tripoles/inst amp ra/port width/.initial=.7}     % Terminals length
-\ctikzset{tripoles/inst amp ra/height/.initial=2.9}        % Left side of the trapezoid
-\ctikzset{tripoles/inst amp ra/height 2/.initial=0.4}      % Right side of the trapezoid
-\ctikzset{tripoles/inst amp ra/input height/.initial=.7}   % Input ports vertical separation
-\ctikzset{tripoles/inst amp ra/up pos/.initial=.4}         % Top and bottom anchor position
-\ctikzset{tripoles/inst amp ra/refv pos/.initial=.7}       % Top and bottom voltage reference position
-\ctikzset{tripoles/inst amp ra/ra pos/.initial=.6}         % Gain resistor terminals vertical separation
-\ctikzset{tripoles/inst amp ra/font/.initial=\pgf at circ@font at tenbm}  % Absolute font size needed!
-
-% Plain amplifier
-\ctikzset{tripoles/plain amp/width/.initial=1.7}           % Total width
-\ctikzset{tripoles/plain amp/port width/.initial=.7}       % Terminals length
-\ctikzset{tripoles/plain amp/height/.initial=1.4}          % Total height
-\ctikzset{tripoles/plain amp/input height/.initial=.5}     % Input ports vertical separation
-\ctikzset{tripoles/plain amp/up pos/.initial=.45}          % Top and bottom anchor position
-
-% changing fonts and symbols of amplifiers
-\ctikzset{amplifiers/symbol font/.code={%
-        \ctikzset{tripoles/inst amp ra/font=#1}%
-        \ctikzset{tripoles/fd inst amp/font=#1}%
-        \ctikzset{tripoles/inst amp/font=#1}%
-        \ctikzset{tripoles/gm amp/font=#1}%
-        \ctikzset{tripoles/en amp/font=#1}%
-        \ctikzset{tripoles/fd op amp/font=#1}%
-        \ctikzset{tripoles/op amp/font=#1}%
-}}
-\ctikzset{amplifiers/plus/.initial={$+$}}
-\ctikzset{amplifiers/minus/.initial={$-$}}
-\tikzset{amp symbol font/.code={%
-        \ctikzset{amplifiers/symbol font={#1}}%
-    }
-}
-\tikzset{amp plus/.code={\ctikzsetvalof{amplifiers/plus}{#1}}}
-\tikzset{amp minus/.code={\ctikzsetvalof{amplifiers/minus}{#1}}}
-\def\pgf at circ@ampli at plus{\ctikzvalof{amplifiers/plus}}
-\def\pgf at circ@ampli at minus{\ctikzvalof{amplifiers/minus}}
-%%>>>
-
-% Transformers%<<<1
-
-\ctikzset{quadpoles/transformer/inner/.initial=0.4}
-\ctikzset{quadpoles/transformer/width/.initial=1.5}
-\ctikzset{quadpoles/transformer/width1/.initial=.4}
-\ctikzset{quadpoles/transformer/height/.initial=1.5}
-\ctikzset{quadpoles/transformer/height1/.initial=.8}
-\ctikzset{quadpoles/transformer core/inner/.initial=0.4}
-\ctikzset{quadpoles/transformer core/width/.initial=1.5}
-\ctikzset{quadpoles/transformer core/height/.initial=1.5}
-\ctikzset{quadpoles/transformer core/core height/.initial=.5}
-\ctikzset{quadpoles/transformer core/core width/.initial=.05}
-\ctikzset{quadpoles/gyrator/inner/.initial=0.4}
-\ctikzset{quadpoles/gyrator/width/.initial=1.5}
-\ctikzset{quadpoles/gyrator/height/.initial=1.5}
-\ctikzset{quadpoles/fourport/width/.initial=1.3}
-\ctikzset{quadpoles/fourport/height/.initial=1.3}
-\ctikzset{quadpoles/coupler/width/.initial=1.3}
-\ctikzset{quadpoles/coupler/height/.initial=1.3}
-\ctikzset{quadpoles/coupler2/width/.initial=1.3}
-\ctikzset{quadpoles/coupler2/height/.initial=1.3}
-
-\ctikzset{/tikz/circuitikz/tripoles/magnetron/width/.initial=1}
-
-\ctikzset{quadpoles style/.is choice}
-\ctikzset{quadpoles style/inward/.code={% default value
-        \ctikzset{quadpoles/transformer/inner=0.4}%
-        \ctikzset{quadpoles/transformer/width=1.5}%
-        \ctikzset{quadpoles/transformer core/inner=0.4}%
-        \ctikzset{quadpoles/transformer core/width=1.5}%
-        \ctikzset{quadpoles/gyrator/inner=0.4}%
-        \ctikzset{quadpoles/gyrator/width=1.5}%
-    }%
-}
-\ctikzset{quadpoles style/inline/.code={% now horizontal baffle
-        \ctikzset{quadpoles/transformer/inner=1}%
-        \ctikzset{quadpoles/transformer/width=0.6}%
-        \ctikzset{quadpoles/transformer core/inner=1}%
-        \ctikzset{quadpoles/transformer core/width=0.6}%
-        \ctikzset{quadpoles/gyrator/inner=1} % FIXME
-        \ctikzset{quadpoles/gyrator/width=0.6}%
-    }%
-}
-%%>>>
-
-% seven segment displays by RGtti%<<<1
-
-\newif\ifpgf at circ@sevenseg at dot
-\newif\ifpgf at circ@sevenseg at box
-\def\pgf at circ@sevenseg at dotstate{empty}
-\ctikzset{seven seg/.is family}
-\ctikzset{seven seg/dot/.is choice}
-% none means no dot, not space for it. Empty means no dot, but space
-\ctikzset{seven seg/dot/none/.code={\pgf at circ@sevenseg at dotfalse}}
-\ctikzset{seven seg/dot/empty/.code={\pgf at circ@sevenseg at dottrue\def\pgf at circ@sevenseg at dotstate{empty}}}
-\ctikzset{seven seg/dot/off/.code={\pgf at circ@sevenseg at dottrue\def\pgf at circ@sevenseg at dotstate{off}}}
-\ctikzset{seven seg/dot/on/.code={\pgf at circ@sevenseg at dottrue\def\pgf at circ@sevenseg at dotstate{on}}}
-%
-\ctikzset{seven seg/width/.initial=0.4}% relative to \pgf at circ@Rlen
-\ctikzset{seven seg/thickness/.initial=4pt}% segment thickness
-\ctikzset{seven seg/segment sep/.initial=0.2pt}% gap between segments
-\ctikzset{seven seg/box sep/.initial=1pt}% external box gap
-\ctikzset{seven seg/color on/.initial=red}% color for segment "on"
-\ctikzset{seven seg/color off/.initial=gray!20!white} % ...and "off"
-\ctikzset{seven seg/box/.is choice}
-\ctikzset{seven seg/box/off/.code={\pgf at circ@sevenseg at boxfalse}}
-\ctikzset{seven seg/box/on/.code={\pgf at circ@sevenseg at boxtrue}}
-
-\ctikzset{seven seg/bits/.initial=0000000}
-
-\ctikzset{seven seg/value/.code={%
-    \edef\@@tmp{#1}%
-    \edef\@@n{0} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1111110}\fi
-    \edef\@@n{1} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0110000}\fi
-    \edef\@@n{2} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1101101}\fi
-    \edef\@@n{3} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1111001}\fi
-    \edef\@@n{4} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0110011}\fi
-    \edef\@@n{5} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1011011}\fi
-    \edef\@@n{6} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1011111}\fi
-    \edef\@@n{7} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1110000}\fi
-    \edef\@@n{8} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1111111}\fi
-    \edef\@@n{9} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1111011}\fi
-    \edef\@@n{10}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1110111}\fi
-    \edef\@@n{11}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0011111}\fi
-    \edef\@@n{12}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001110}\fi
-    \edef\@@n{13}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0111101}\fi
-    \edef\@@n{14}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001111}\fi
-    \edef\@@n{15}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1000111}\fi
-    \edef\@@n{A} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1110111}\fi
-    \edef\@@n{B} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0011111}\fi
-    \edef\@@n{C} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001110}\fi
-    \edef\@@n{D} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0111101}\fi
-    \edef\@@n{E} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001111}\fi
-    \edef\@@n{F} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1000111}\fi
-    \edef\@@n{a} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1110111}\fi
-    \edef\@@n{b} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0011111}\fi
-    \edef\@@n{c} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001110}\fi
-    \edef\@@n{d} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0111101}\fi
-    \edef\@@n{e} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001111}\fi
-    \edef\@@n{f} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1000111}\fi
-    \edef\@@n{-} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0000001}\fi
-}}
-
-\tikzset{%
-    seven segment val/.style args={#1dot#2box#3}{%
-        shape=bare7seg,
-        /tikz/circuitikz/seven seg/value=#1,
-        /tikz/circuitikz/seven seg/dot=#2,
-        /tikz/circuitikz/seven seg/box=#3,
-    },
-    seven segment bits/.style args={#1dot#2box#3}{%
-        shape=bare7seg,
-        /tikz/circuitikz/seven seg/bits=#1,
-        /tikz/circuitikz/seven seg/dot=#2,
-        /tikz/circuitikz/seven seg/box=#3,
-    },
-}
-%%>>>
-
-% Options for twoports and blocks%<<<1
-
-% Option ">" for twoports
-\newif\ifpgf at circuit@inputarrow
-\ctikzset{>/.add code={}{\pgf at circuit@inputarrowtrue}}
-\ctikzset{inputarrow/.is choice}
-\ctikzset{inputarrow/true/.code={\pgf at circuit@inputarrowtrue}}
-\ctikzset{inputarrow/false/.code={\pgf at circuit@inputarrowfalse}}
-
-% Option "boxed" for nodes and twoports
-\newif\ifpgf at circuit@boxed
-\pgfkeys{/tikz/boxed/.add code={}{\pgf at circuit@boxedtrue}}
-\ctikzset{boxed/.add code={}{\pgf at circuit@boxedtrue}}
-\pgfkeys{/tikz/box/.add code={}{\pgf at circuit@boxedtrue}}
-\ctikzset{box/.add code={}{\pgf at circuit@boxedtrue}}
-
-% Option "dashed" for nodes and twoports
-\newif\ifpgf at circuit@dashed
-\pgfkeys{/tikz/dashed/.add code={}{\pgf at circuit@dashedtrue}}
-\ctikzset{dashed/.add code={}{\pgf at circuit@dashedtrue}}%
-%>>>
-
-% Chips and Rotary switches (multipoles) %<<<1
-%
-\ctikzset{multipoles/thickness/.initial=2}
-\ctikzset{multipoles/font/.initial=\pgf at circ@font at tiny}
-% DIP (dual in line package) chips
-\ctikzset{multipoles/dipchip/width/.initial=1.2}
-\ctikzset{multipoles/dipchip/num pins/.initial=8}
-\ctikzset{multipoles/dipchip/pin spacing/.initial=0.4}
-\pgfkeys{/tikz/num pins/.add code={}{\ctikzset{multipoles/dipchip/num pins=#1}}}
-% QFP (quad flat package) chips
-\ctikzset{multipoles/qfpchip/num pins/.initial=8}
-\ctikzset{multipoles/qfpchip/pin spacing/.initial=0.4}
-\pgfkeys{/tikz/num pins/.add code={}{\ctikzset{multipoles/qfpchip/num pins=#1}}}
-% chip numbers
-\newif\ifpgf at circuit@chip at shownumbers\pgf at circuit@chip at shownumberstrue
-\pgfkeys{/tikz/show numbers/.add code={}{\pgf at circuit@chip at shownumberstrue}}
-\ctikzset{show numbers/.add code={}{\pgf at circuit@chip at shownumberstrue}}
-\pgfkeys{/tikz/hide numbers/.add code={}{\pgf at circuit@chip at shownumbersfalse}}
-\ctikzset{hide numbers/.add code={}{\pgf at circuit@chip at shownumbersfalse}}
-\newif\ifpgf at circuit@chip at straightnumbers\pgf at circuit@chip at straightnumberstrue
-\pgfkeys{/tikz/straight numbers/.add code={}{\pgf at circuit@chip at straightnumberstrue}}
-\ctikzset{straight numbers/.add code={}{\pgf at circuit@chip at straightnumberstrue}}
-\pgfkeys{/tikz/rotated numbers/.add code={}{\pgf at circuit@chip at straightnumbersfalse}}
-\ctikzset{rotated numbers/.add code={}{\pgf at circuit@chip at straightnumbersfalse}}
-% external chip pins
-\ctikzset{multipoles/external pins thickness/.initial=1}
-\ctikzset{multipoles/external pins width/.initial=0.2}
-\ctikzset{multipoles/external pad fraction/.initial=0}
-\pgfkeys{/tikz/external pins width/.add code={}{\ctikzset{multipoles/external pins width=#1}}}
-\pgfkeys{/tikz/external pad fraction/.add code={}{\ctikzset{multipoles/external pad fraction=#1}}}
-% topmarks
-\newif\ifpgf at circuit@chip at topmark\pgf at circuit@chip at topmarktrue
-\pgfkeys{/tikz/topmark/.add code={}{\pgf at circuit@chip at topmarktrue}}
-\ctikzset{topmark/.add code={}{\pgf at circuit@chip at topmarktrue}}
-\pgfkeys{/tikz/no topmark/.add code={}{\pgf at circuit@chip at topmarkfalse}}
-\ctikzset{no topmark/.add code={}{\pgf at circuit@chip at topmarkfalse}}
-
-% rotary switch by Romano
-\ctikzset{multipoles/rotary/thickness/.initial=1}
-\ctikzset{multipoles/rotary/shape/.initial=ocirc}
-\ctikzset{multipoles/rotary/channels/.initial=5}
-\ctikzset{multipoles/rotary/angle/.initial=60}
-\ctikzset{multipoles/rotary/wiper/.initial=20}
-\ctikzset{multipoles/rotary/arrow/.is choice}
-\newif\ifpgf at circ@rotaryarrow\pgf at circ@rotaryarrowfalse
-\newif\ifpgf at circ@rotaryarrow at cw\pgf at circ@rotaryarrow at cwfalse
-\newif\ifpgf at circ@rotaryarrow at ccw\pgf at circ@rotaryarrow at ccwfalse
-\ctikzset{multipoles/rotary/arrow/none/.code={\pgf at circ@rotaryarrowfalse\pgf at circ@rotaryarrow at cwfalse\pgf at circ@rotaryarrow at ccwfalse}}
-\ctikzset{multipoles/rotary/arrow/both/.code={\pgf at circ@rotaryarrowtrue\pgf at circ@rotaryarrow at cwtrue\pgf at circ@rotaryarrow at ccwtrue}}
-\ctikzset{multipoles/rotary/arrow/cw/.code={\pgf at circ@rotaryarrowtrue\pgf at circ@rotaryarrow at cwtrue\pgf at circ@rotaryarrow at ccwfalse}}
-\ctikzset{multipoles/rotary/arrow/ccw/.code={\pgf at circ@rotaryarrowtrue\pgf at circ@rotaryarrow at cwfalse\pgf at circ@rotaryarrow at ccwtrue}}
-
-\tikzset{%
-    rotary switch/.style args={#1in#2wiper#3}{%
-        shape=rotaryswitch,
-        /tikz/circuitikz/multipoles/rotary/channels=#1,
-        /tikz/circuitikz/multipoles/rotary/angle=#2,
-        /tikz/circuitikz/multipoles/rotary/wiper=#3,
-    },
-    rotary switch -/.style args={#1in#2wiper#3}{
-        rotary switch=#1 in #2 wiper #3,
-        /tikz/circuitikz/multipoles/rotary/arrow=none,
-    },
-    rotary switch <-/.style args={#1in#2wiper#3}{
-        rotary switch=#1 in #2 wiper #3,
-        /tikz/circuitikz/multipoles/rotary/arrow=ccw,
-    },
-    rotary switch ->/.style args={#1in#2wiper#3}{
-        rotary switch=#1 in #2 wiper #3,
-        /tikz/circuitikz/multipoles/rotary/arrow=cw,
-    },
-    rotary switch <->/.style args={#1in#2wiper#3}{
-        rotary switch=#1 in #2 wiper #3,
-        /tikz/circuitikz/multipoles/rotary/arrow=both,
-    },
-    % Notice that these should be the same as the initial values of the keys
-    rotary switch/.default={5 in 60 wiper 20},
-    rotary switch -/.default={5 in 60 wiper 20},
-    rotary switch <-/.default={5 in 60 wiper 20},
-    rotary switch ->/.default={5 in 60 wiper 20},
-    rotary switch <->/.default={5 in 60 wiper 20},
-}
-%%>>>
-
-% %Mechanical section%<<<1
-\ctikzset{/tikz/circuitikz/tripoles/elmech/height/.initial=.8}
-\ctikzset{/tikz/circuitikz/tripoles/elmech/width/.initial=.6}
-\ctikzset{bipoles/spring/height/.initial=.5}
-\ctikzset{bipoles/spring/width/.initial=.5}
-\ctikzset{bipoles/inerter/height/.initial=.7}
-\ctikzset{bipoles/inerter/width/.initial=.175}
-\ctikzset{bipoles/mass/height/.initial=.55}
-\ctikzset{bipoles/mass/box height/.initial=.4}
-\ctikzset{bipoles/mass/width/.initial=.5}
-
-\ctikzset{bipoles/damper/height/.initial=.35}
-\ctikzset{bipoles/damper/length/.initial=.3}
-\ctikzset{bipoles/damper/width/.initial=.4}
-%%>>>
-
-% powerelectronic blocks%<<<1
-\ctikzset{bipoles/sacdc/width/.initial=.7}
-\ctikzset{bipoles/sdcac/width/.initial=.7}
-\ctikzset{bipoles/tacdc/width/.initial=.7}
-\ctikzset{bipoles/tdcac/width/.initial=.7}
-\ctikzset{quadpoles/gridnode/width/.initial=.7} %not sure if quadpole?
-%>>>
-
 % voltage and current options%<<<1
 %
 \ctikzset{current arrow scale/.initial=16}
@@ -2260,60 +824,5 @@
 \tikzset{raised voltages/.style = {\circuitikzbasekey/voltage = raised}}
 %%>>>
 
-% special cases for voltage positions%<<<1
-% the KIND is the node name without SHAPE
-% See the definition above for meaning
-% if bipoles/KIND/voltage/straight label distance is not defined, it uses the height
-% if bipoles/KIND/voltage/additional shift is not defined, it is 0 (extra distance)
-%
-\ctikzset{bipoles/generic/voltage/distance from node/.initial=0.4}
-\ctikzset{bipoles/generic/voltage/bump b/.initial=2}
-%
-\ctikzset{bipoles/ageneric/voltage/distance from node/.initial=.4}
-\ctikzset{bipoles/ageneric/voltage/bump b/.initial=2}
-%
-\ctikzset{bipoles/fullgeneric/voltage/distance from node/.initial=.4}
-\ctikzset{bipoles/fullgeneric/voltage/bump b/.initial=2}
-%
-\ctikzset{bipoles/memristor/voltage/distance from node/.initial=.4}
-\ctikzset{bipoles/memristor/voltage/bump b/.initial=2}
-%
-\ctikzset{bipoles/tline/voltage/bump b/.initial=2.4}
-%
-\ctikzset{bipoles/varistor/voltage/bump b/.initial=2.4}
-\ctikzset{bipoles/varistor/voltage/american label distance/.initial=1.8}
-%
-\ctikzset{bipoles/photoresistor/voltage/bump b/.initial=1.6}
-%
-\ctikzset{bipoles/thermistor/voltage/bump b/.initial=2.4}
-\ctikzset{bipoles/thermistor/voltage/european label distance/.initial=0.8}
-\ctikzset{bipoles/thermistorntc/voltage/bump b/.initial=1.6}
-\ctikzset{bipoles/thermistorntc/voltage/european label distance/.initial=0.8}
-\ctikzset{bipoles/thermistorptc/voltage/bump b/.initial=1.6}
-\ctikzset{bipoles/thermistorptc/voltage/european label distance/.initial=0.8}
-%
-\ctikzset{bipoles/ccapacitor/voltage/bump b/.initial=2.2}
-%
-\ctikzset{bipoles/emptyzzdiode/voltage/bump b/.initial=2.5}
-\ctikzset{bipoles/emptyzzdiode/voltage/european label distance/.initial=1.0}
-\ctikzset{bipoles/fullzzdiode/voltage/bump b/.initial=2.5}
-\ctikzset{bipoles/fullzzdiode/voltage/european label distance/.initial=1.0}
-\ctikzset{bipoles/emptythyristor/voltage/bump b/.initial=2.0}
-\ctikzset{bipoles/emptythyristor/voltage/european label distance/.initial=1.2}
-\ctikzset{bipoles/fullthyristor/voltage/bump b/.initial=2.0}
-\ctikzset{bipoles/fullthyristor/voltage/european label distance/.initial=1.2}
-\ctikzset{bipoles/emptytriac/voltage/bump b/.initial=1.8}
-\ctikzset{bipoles/emptytriac/voltage/european label distance/.initial=0.8}
-\ctikzset{bipoles/fulltriac/voltage/bump b/.initial=1.8}
-\ctikzset{bipoles/fulltriac/voltage/european label distance/.initial=0.8}
-%
-\ctikzset{bipoles/short/voltage/american label distance/.initial=2.8}
-\ctikzset{bipoles/open/voltage/distance from node/.initial=0.3}
-%
-\ctikzset{bipoles/battery/voltage/bump a/.initial=1.4}
-\ctikzset{bipoles/vsourceAM/voltage/american label distance/.initial=1.2}
-\ctikzset{bipoles/cvsourceAM/voltage/american label distance/.initial=1.2}
-%%>>>
-
 \endinput
 % vim: set fdm=marker fmr=%<<<,%>>>:

Modified: trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircbipoles.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircbipoles.tex	2021-01-19 22:57:40 UTC (rev 57468)
+++ trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircbipoles.tex	2021-01-19 22:58:18 UTC (rev 57469)
@@ -1,7 +1,7 @@
-% Copyright 2018-2020 by Romano Giannetti
-% Copyright 2015-2020 by Stefan Lindner
-% Copyright 2013-2020 by Stefan Erhardt
-% Copyright 2007-2020 by Massimo Redaelli
+% Copyright 2018-2021 by Romano Giannetti
+% Copyright 2015-2021 by Stefan Lindner
+% Copyright 2013-2021 by Stefan Erhardt
+% Copyright 2007-2021 by Massimo Redaelli
 %
 % This file may be distributed and/or modified
 %
@@ -9,239 +9,104 @@
 % 2. under the GNU Public License.
 %
 % See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Standard bipole shapes declarations
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-%% Generic macro for defining a bipole shape
-% #1 - additional anchors
-% #2 - lower y-size of the bipole (from the center).
-% #3 - #shape is the name of the shape
-% #4 - upper y-size of the bipole (from the center)
-% #5 - width of the bipole
-% #6 - macros drawing the bipole
-%
-\long\def\pgfcircdeclarebipole{%
-    \pgfcircdeclarebipolescaled{default}}
+%%%%%%%%%%%%%%%%%%%%%%%%
+% Resistive components: generics, resistors, wires
+%%%%%%%%%%%%%%%%%%%%%%%%
 
-%% Generic macro for defining a bipole shape
-% #1 - scale factor
-% #2 - additional anchors
-% #3 - lower y-size of the bipole (from the center).
-% #4 - #shape is the name of the shape
-% #5 - upper y-size of the bipole (from the center)
-% #6 - width of the bipole
-% #7 - macros drawing the bipole
-%
-\long\def\pgfcircdeclarebipolescaled#1#2#3#4#5#6#7{
-    \pgfdeclareshape{#4shape}{
-        \savedmacro{\ctikzclass}{\edef\ctikzclass{#1}}
-        \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
-        \savedanchor{\northeast}{
-            \pgf at circ@scaled at Rlen=\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen
-            \pgf at y=#5\pgf at circ@scaled at Rlen
-            \pgf at y=.5\pgf at y
-            \pgf at x=#6\pgf at circ@scaled at Rlen
-            \pgf at x=.5\pgf at x
-        }
-        \savedanchor{\northeastborder}{
-            \pgf at circ@scaled at Rlen=\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen
-            \pgf at y=#5\pgf at circ@scaled at Rlen
-            \pgf at y=.5\pgf at y
-            \pgf at y=\ctikzvalof{bipoles/border margin}\pgf at y
-            \pgf at x=#6\pgf at circ@scaled at Rlen
-            \pgf at x=.5\pgf at x
-            \pgf at x=\ctikzvalof{bipoles/border margin}\pgf at x
-        }
-        \savedanchor{\southwestborder}{
-            \pgf at circ@scaled at Rlen=\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen
-            \pgf at y=-#3\pgf at circ@scaled at Rlen
-            \pgf at y=.5\pgf at y
-            \pgf at y=\ctikzvalof{bipoles/border margin}\pgf at y
-            \pgf at x=-#6\pgf at circ@scaled at Rlen
-            \pgf at x=.5\pgf at x
-            \pgf at x=\ctikzvalof{bipoles/border margin}\pgf at x
-        }
-        \savedanchor{\southwest}{
-            \pgf at circ@scaled at Rlen=\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen
-            \pgf at y=-#3\pgf at circ@scaled at Rlen
-            \pgf at y=.5\pgf at y
-            \pgf at x=-#6\pgf at circ@scaled at Rlen
-            \pgf at x=.5\pgf at x
-        }
-        \savedanchor{\centerpoint}{
-            \pgf at circ@scaled at Rlen=\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen
-            \pgf at circ@res at down=-#3\pgf at circ@scaled at Rlen
-            \pgf at circ@res at up=#5\pgf at circ@scaled at Rlen
-            \pgfpointorigin
-            \pgf at y=\pgf at circ@res at up
-            \advance\pgf at y by\pgf at circ@res at down
-            \pgf at y=.5\pgf at y
-        }
-        \anchor{center}{\pgfpointorigin}
-        \anchor{n}{
-            \northeast
-            \pgf at x=0cm
-        }
-        \anchor{north east}{
-            \northeast
-        }
-        \anchor{north west}{
-            \northeast
-            \pgf at x=-\pgf at x
-        }
-        \anchor{ne}{
-            \northeast
-        }
-        \anchor{nw}{
-            \northeast
-            \pgf at x=-\pgf at x
-        }
-        \anchor{e}{
-            \northeast
-            \pgf at y=0cm
-        }
-        \anchor{s}{
-            \southwest
-            \pgf at x=0cm
-        }
-        \anchor{south east}{
-            \southwest
-            \pgf at x=-\pgf at x
-        }
-        \anchor{south west}{
-            \southwest
-        }
-        \anchor{se}{
-            \southwest
-            \pgf at x=-\pgf at x
-        }
-        \anchor{sw}{
-            \southwest
-        }
-        \anchor{w}{
-            \southwest
-            \pgf at y=0cm
-        }
-        \anchor{north}{
-            \northeast
-            \pgf at x=0cm
-        }
-        \anchor{east}{
-            \northeast
-            \pgf at y=0cm
-        }
-        \anchor{south}{
-            \southwest
-            \pgf at x=0cm
-        }
-        \anchor{west}{
-            \southwest
-            \pgf at y=0cm
-        }
-        \anchor{right}{
-            \northeast
-            \pgf at y=0cm
-        }
-        \anchor{above}{
-            \northeast
-            \pgf at x=0cm
-        }
-        \anchor{left}{
-            \southwest
-            \pgf at y=0cm
-        }
-        \anchor{below}{
-            \southwest
-            \pgf at x=0cm
-        }
-        \anchor{a}{
-            \northeast
-            \pgf at y=0cm
-        }
-        \anchor{b}{
-            \southwest
-            \pgf at y=0cm
-        }
-        \savedanchor{\textanchor}{%
-            \pgf at y=\ht\pgfnodeparttextbox
-            \pgf at x=-.5\wd\pgfnodeparttextbox
-        }
-        \anchor{text}{
-            \textanchor
-        }
-        \anchorborder{%
-            \ifpgf at circuit@bipole at inverted
-                \pgf at circ@res at left=-\pgf at x
-                \pgf at circ@res at up=-\pgf at y
-            \else
-                \pgf at circ@res at left=\pgf at x
-                \pgf at circ@res at up=\pgf at y
-            \fi
-            \ifdim\pgf at circ@res at up>0cm
-                \pgfpointborderrectangle{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\northeastborder}
-            \else
-                \southwestborder
-                \pgfpointborderrectangle{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\pgfpoint{-\pgf at x}{-\pgf at y}}
-            \fi
-        }
+%% Definitions for resistive components %<<<
 
-        #2
+% Zig Zag resistors
+\ctikzset{resistors/zigs/.initial=3}
+\ctikzset{resistors/width/.code={%
+    \ctikzset{bipoles/resistor/width=#1}%
+    \ctikzset{bipoles/vresistor/width=#1}%
+    \ctikzset{bipoles/potentiometer/width=#1}%
+    \ctikzset{bipoles/resistivesens/width=#1}%
+    \ctikzset{bipoles/photoresistor/width=#1}%
+    \ctikzset{bipoles/thermistor/width=#1}%
+    \ctikzset{bipoles/thermistorntc/width=#1}%
+    \ctikzset{bipoles/thermistorptc/width=#1}%
+    \ctikzset{bipoles/varistor/width=#1}%
+    \ctikzset{bipoles/generic/width=#1}%
+    \ctikzset{bipoles/generic potentiometer/width=#1}%
+    \ctikzset{bipoles/ageneric/width=#1}%
+    \ctikzset{bipoles/tgeneric/width=#1}%
+}}
+\ctikzset{wiper pos/.code={%
+    \ctikzset{bipoles/potentiometer/wiper pos=#1}%
+    \ctikzset{bipoles/generic potentiometer/wiper pos=#1}%
+}}
+% zigzag resistor
+\ctikzset{bipoles/resistor/height/.initial=.3}
+\ctikzset{bipoles/resistor/width/.initial=.8}
+\ctikzset{bipoles/potentiometer/height/.initial=.8}
+\ctikzset{bipoles/potentiometer/height 2/.initial=.3}
+\ctikzset{bipoles/potentiometer/width/.initial=.8}
+\ctikzset{bipoles/potentiometer/wiper pos/.initial=.5}
+\ctikzset{bipoles/vresistor/height/.initial=.6}
+\ctikzset{bipoles/vresistor/width/.initial=.8}
+\ctikzset{bipoles/resistivesens/height/.initial=.6}
+\ctikzset{bipoles/resistivesens/width/.initial=.8}
+% square resistors
+\ctikzset{bipoles/photoresistor/height/.initial=.6}
+\ctikzset{bipoles/photoresistor/height 2/.initial=.3}
+\ctikzset{bipoles/photoresistor/width/.initial=.8}
+\ctikzset{bipoles/thermistor/main/.initial=.7}
+\ctikzset{bipoles/thermistor/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorntc/width/.initial=.8}
+\ctikzset{bipoles/thermistorntc/main/.initial=.7}
+\ctikzset{bipoles/thermistorntc/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorntc/height 2/.initial=.75}%.3/.7
+\ctikzset{bipoles/thermistorptc/width/.initial=.8}
+\ctikzset{bipoles/thermistorptc/main/.initial=.7}
+\ctikzset{bipoles/thermistorptc/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorptc/height 2/.initial=.75}%.3/.7
+\ctikzset{bipoles/thermistor/width/.initial=.8}
+\ctikzset{bipoles/varistor/main/.initial=.7}
+\ctikzset{bipoles/varistor/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/varistor/width/.initial=.8}
+\ctikzset{bipoles/generic/height/.initial=.30}
+\ctikzset{bipoles/generic/width/.initial=.80}
+\ctikzset{bipoles/generic potentiometer/height/.initial=.80}
+\ctikzset{bipoles/generic potentiometer/height 2/.initial=.30}
+\ctikzset{bipoles/generic potentiometer/width/.initial=.80}
+\ctikzset{bipoles/generic potentiometer/wiper pos/.initial=.5}
+\ctikzset{bipoles/ageneric/height/.initial=.30}
+\ctikzset{bipoles/tgeneric/height/.initial=.70}
+\ctikzset{bipoles/tgeneric/width/.initial=.80}
+\ctikzset{bipoles/ageneric/width/.initial=.80}
+\ctikzset{bipoles/memristor/height/.initial=.30}
+\ctikzset{bipoles/memristor/wave height/.initial=.5}
+\ctikzset{bipoles/memristor/width/.initial=.80}
 
-        \backgroundpath{
-            \pgfsetcolor{\ctikzvalof{color}}
+\newif\ifpgf at circuit@europeanresistor
+\ctikzset{resistor/.is choice}
+\ctikzset{resistor/american/.code = \pgf at circuit@europeanresistorfalse }
+\ctikzset{resistor/european/.code = \pgf at circuit@europeanresistortrue }
+\tikzset{american resistors/.style = {\circuitikzbasekey/resistor = american}}
+\tikzset{european resistors/.style = {\circuitikzbasekey/resistor = european}}%
 
-            \northeast
-            \pgf at circ@res at up = \pgf at y
-            \pgf at circ@res at zero = 0cm
-            \pgf at circ@res at left = -\pgf at x
-            \pgf at circ@res at right = \pgf at x
-            \southwest
-            \pgf at circ@res at down = \pgf at y
-            \pgf at circ@scaled at Rlen=\scaledRlen
-            \pgfstartlinewidth=\pgflinewidth
-            \pgfsetcornersarced{\pgfpointorigin}% do not use rounded corners!
-            #7
+% wires (open, shorts, ...)
 
-            \pgfsetlinewidth{\pgfstartlinewidth}
-        }
-    }
-}
+\ctikzset{bipoles/open/height/.initial=.3} %necessary for curly voltages
+\ctikzset{bipoles/open/width/.initial=.3} %necessary for curly voltages
+\ctikzset{bipoles/open/voltage/straight label distance/.initial=0}
+\ctikzset{bipoles/open/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/short/height/.initial=.1} %dummy height for voltage positioning
+\ctikzset{bipoles/short/width/.initial=.1} %dummy width for voltage positioning
+% multiwire
+\ctikzset{bipoles/multiwire/height/.initial=0.4}
+\ctikzset{bipoles/multiwire/width/.initial=0.2}
+\ctikzset{bipoles/multiwire/spacing/.initial=0.05}
+% crossing wires
+\ctikzset{bipoles/crossing/size/.initial=.2}
+%%>>>
 
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% anchor adjustment macros
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Extend the border anchor position by the specified factors on the right-top (north east corner)
-% and the left-down (southwest border). Argument must be number (possibly decimal) without sign
-
-\def\pgfcirc at border@extend at full#1#2#3#4{% right, top, left, down
-    \anchorborder{%
-        \ifpgf at circuit@bipole at inverted
-            \pgf at circ@res at left=-\pgf at x
-            \pgf at circ@res at up=-\pgf at y
-        \else
-            \pgf at circ@res at left=\pgf at x
-            \pgf at circ@res at up=\pgf at y
-        \fi
-        \ifdim\pgf at circ@res at up>0cm
-            \northeastborder
-            \pgfpointborderrectangle{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\pgfpoint{#1\pgf at x}{#2\pgf at y}}
-        \else
-            \southwestborder
-            \pgfpointborderrectangle{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\pgfpoint{-#3\pgf at x}{-#4\pgf at y}}
-        \fi
-    }
-}
-
-% Just up and down (very common)
-\def\pgfcirc at border@extend at updown#1#2{\pgfcirc at border@extend at full{1}{#1}{1}{#2}}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Standard bipole shapes declarations
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%
-% Resistive components
-%%%%%%%%%%%%%%%%%%%%%%%%
-
+%% Shapes for generic, resistives and wires components %<<<
 %% Short circuit
 
 %%% NOTICE that the short is really NOT drawn; we trust the fact that its
@@ -336,9 +201,29 @@
     \pgfusepath{draw}
 }
 
+%%%%%%%%%%%%%%%%
+%% Crossing
+%%%%%%%%%%%%%%%%
+
+%% crossing bipole (but see also nodes)
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/crossing/size}}
+{crossing}
+{\ctikzvalof{bipoles/crossing/size}}
+{\ctikzvalof{bipoles/crossing/size}}{
+    \pgfscope
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+        \pgfpathlineto{\pgfpoint{0.4\pgf at circ@res at left}{\pgf at circ@res at zero}}
+        \pgfpatharc{0}{-180}{0.4*\pgf at circ@res at left}
+        \pgfsetbeveljoin
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at zero}}
+        \pgfusepath{draw}
+    \endpgfscope
+}
 %
 %
-%% Generic bipole - used as resistor by some (bleah)
+%% Generic bipole - used as resistor by some
 \pgfcircdeclarebipolescaled{resistors}
 {}
 {\ctikzvalof{bipoles/generic/height}}
@@ -555,6 +440,30 @@
     \pgfusepath{draw}
 }
 
+%% Varistor
+\pgfcircdeclarebipolescaled{resistors}
+{
+    \pgfcirc at border@extend at updown{1}{1.4}
+}
+{\ctikzvalof{bipoles/varistor/height}}
+{varistor}
+{\ctikzvalof{bipoles/varistor/height}}
+{\ctikzvalof{bipoles/varistor/width}}
+{
+    \pgfscope
+        \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\ctikzvalof{bipoles/varistor/main}\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{-\ctikzvalof{bipoles/varistor/main}\pgf at circ@res at up}}
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgf at circ@draworfill
+    \endpgfscope
+
+    \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at left}{-\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{.4\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfusepath{draw}
+
+    \pgftext[top,x=.65\pgf at circ@res at left,y=1.2\pgf at circ@res at down]{{\pgf at circ@font at tiny\textsf{U}}}
+}
+
 %% Generic tunable
 \pgfcircdeclarebipolescaled{resistors}
 {
@@ -715,12 +624,92 @@
         \pgfpathlineto{\pgfpoint{-.9\pgf at circ@res at other}{\pgf at circ@res at down}}
         \pgfusepath{draw}
     \endpgfscope
-}
+}% %>>>
 
+%% Paths for resistive components: generic, resistors and wires% %<<<
+
+%% GENERICS
+\def\pgf at circ@empty at path#1{}
+\pgfcirc at activate@bipole at simple{l}{generic}
+\pgfcirc at activate@bipole at simple{l}{ageneric}
+\pgfcirc at activate@bipole at simple{l}{tgeneric}
+\pgfcirc at activate@bipole at simple{l}{xgeneric}
+\pgfcirc at activate@bipole at simple{l}{fullgeneric}
+\pgfcirc at activate@bipole at simple{l}{tfullgeneric}
+\pgfcirc at activate@bipole at simple{l}{short}
+\pgfcirc at activate@bipole at simple{l}{open}
+
+%% wires and crossings
+
+\pgfcirc at activate@bipole at simple{l}{crossing}
+\pgfcirc at style@to at style{crossing}{xing}
+\pgfcirc at activate@bipole at simple{l}{multiwire}
+\pgfcirc at activate@bipole at simple{l}{bmultiwire}
+\pgfcirc at activate@bipole at simple{l}{tmultiwire}
+
+% automatically switching path --- to be defined manually
+\def\pgf at circ@resistor at path#1{\ifpgf at circuit@europeanresistor\pgf at circ@bipole at path{generic}{#1}\else\pgf at circ@bipole at path{resistor}{#1}\fi}
+\pgfcirc at path@to at style{l}{resistor}{resistor}{}
+\pgfcirc at node@to at style{l}{resistor}{american resistor}{}
+\pgfcirc at node@to at style{l}{generic}{european resistor}{}
+\pgfcirc at style@to at style{resistor}{R}
+
+\def\pgf at circ@vresistor at path#1{\ifpgf at circuit@europeanresistor\pgf at circ@bipole at path{tgeneric}{#1}\else\pgf at circ@bipole at path{vresistor}{#1}\fi}
+\pgfcirc at path@to at style{l}{vresistor}{variable resistor}{}
+\pgfcirc at node@to at style{l}{vresistor}{variable american resistor}{}
+\pgfcirc at node@to at style{l}{tgeneric}{variable european resistor}{}
+\pgfcirc at style@to at style{variable resistor}{vR}
+
+\def\pgf at circ@resistivesens at path#1{\ifpgf at circuit@europeanresistor\pgf at circ@bipole at path{thermistor}{#1}\else\pgf at circ@bipole at path{resistivesens}{#1}\fi}
+\pgfcirc at path@to at style{l}{resistivesens}{resistive sensor}{}
+\pgfcirc at node@to at style{l}{resistivesens}{american resistive sensor}{}
+\pgfcirc at node@to at style{l}{thermistor}{european resistive sensor}{}
+\pgfcirc at style@to at style{resistive sensor}{sR}
+
+\def\pgf at circ@potentiometer at path#1{\ifpgf at circuit@europeanresistor\pgf at circ@bipole at path{genericpotentiometer}{#1}\else\pgf at circ@bipole at path{potentiometer}{#1}\fi}
+\pgfcirc at path@to at style{l}{potentiometer}{potentiometer}{}
+\pgfcirc at node@to at style{l}{potentiometer}{american potentiometer}{}
+\pgfcirc at node@to at style{l}{genericpotentiometer}{european potentiometer}{}
+\pgfcirc at style@to at style{potentiometer}{pR}
+
+\pgfcirc at activate@bipole at simple{l}{thermistor}
+\pgfcirc at style@to at style{thermistor}{thR}
+\pgfcirc at activate@bipole{l}{thermistorptc}{thermistorptc}{thermistor ptc}
+\pgfcirc at style@to at style{thermistor ptc}{thRp}
+\pgfcirc at activate@bipole{l}{thermistorntc}{thermistorntc}{thermistor ntc}
+\pgfcirc at style@to at style{thermistor ntc}{thRn}
+\pgfcirc at activate@bipole at simple{l}{photoresistor}
+\pgfcirc at style@to at style{photoresistor}{phR}
+\pgfcirc at activate@bipole at simple{l}{varistor}
+\pgfcirc at activate@bipole at simple{l}{memristor}
+\pgfcirc at style@to at style{memristor}{Mr}%
+% %>>>
+
 %%%%%%%%%%%%%%
 %% Capacitors
 %%%%%%%%%%%%%
 
+%% Definitions for Capacitors%<<<1
+\ctikzset{bipoles/capacitor/height/.initial=.6}
+\ctikzset{bipoles/capacitor/width/.initial=.2}
+\ctikzset{bipoles/ecapacitor/height/.initial=.5}
+\ctikzset{bipoles/ecapacitor/width/.initial=.2}
+\ctikzset{bipoles/ecapacitor/font/.initial=\pgf at circ@font at sixbm}
+%%% pcapacitor is deprecated
+\ctikzset{bipoles/pcapacitor/height/.initial=.6}
+\ctikzset{bipoles/pcapacitor/width/.initial=.2}
+\ctikzset{bipoles/pcapacitor/bend width/.initial=1.1}
+\ctikzset{bipoles/ccapacitor/height/.initial=.6}
+\ctikzset{bipoles/ccapacitor/width/.initial=.12}
+\ctikzset{bipoles/ccapacitor/bend width/.initial=1.1}
+\ctikzset{bipoles/vcapacitor/height/.initial=.6}
+\ctikzset{bipoles/vcapacitor/width/.initial=.5}
+\ctikzset{bipoles/vcapacitor/capacitor width/.initial=.4}
+\ctikzset{bipoles/piezoelectric/height/.initial=.7}
+\ctikzset{bipoles/piezoelectric/width/.initial=.5}%
+%>>>
+
+%% Shapes for capacitors%<<<
 %% Plain Capacitor
 \pgfcircdeclarebipolescaled{capacitors}
 {}
@@ -914,11 +903,103 @@
         \pgf at circ@draworfill
     \endpgfscope
 }
+% %>>>
 
+%% Paths for capacitors%<<<
+\pgfcirc at activate@bipole at simple{l}{capacitor}
+\pgfcirc at style@to at style{capacitor}{C}
+\pgfcirc at activate@bipole at simple{l}{ecapacitor}
+\pgfcirc at style@to at style{ecapacitor}{eC}
+\pgfcirc at style@to at style{ecapacitor}{elko}
+\pgfcirc at activate@bipole{l}{polarcapacitor}{polarcapacitor}{polar capacitor}
+%% polar capacitor is deprecated, use curved capacitor instead
+\pgfcirc at style@to at style{polar capacitor}{pC}
+\pgfcirc at activate@bipole{l}{ccapacitor}{ccapacitor}{curved capacitor}
+\pgfcirc at style@to at style{curved capacitor}{cC}
+\pgfcirc at activate@bipole{l}{vcapacitor}{vcapacitor}{variable capacitor}
+\pgfcirc at style@to at style{variable capacitor}{vC}
+\pgfcirc at activate@bipole at simple{l}{piezoelectric}
+\pgfcirc at style@to at style{piezoelectric}{PZ}
+\pgfcirc at activate@bipole{l}{capacitivesens}{capacitivesens}{capacitive sensor}
+\pgfcirc at style@to at style{capacitive sensor}{sC}
+% %>>>
+
 %%%%%%%%%%%%%%%
 %% Inductors
 %%%%%%%%%%%%%%%
 
+% Definitions of Inductors%<<<1
+
+\ctikzset{inductors/coils/.code={%
+    \ctikzset{bipoles/cuteinductor/coils=#1}%
+    \ctikzset{bipoles/cutechoke/coils=#1}%
+    \ctikzset{bipoles/americaninductor/coils=#1}%
+    \ctikzset{bipoles/vcuteinductor/coils=#1}%
+    \ctikzset{bipoles/vamericaninductor/coils=#1}%
+}}
+\ctikzset{inductors/width/.code={%
+    \ctikzset{bipoles/cuteinductor/width=#1}%
+    \ctikzset{bipoles/cutechoke/width=#1}%
+    \ctikzset{bipoles/americaninductor/width=#1}%
+    \ctikzset{bipoles/vcuteinductor/width=#1}%
+    \ctikzset{bipoles/vamericaninductor/width=#1}%
+    \ctikzset{bipoles/fullgeneric/width=#1}%
+    \ctikzset{bipoles/tfullgeneric/width=#1}%
+}}
+\ctikzset{bipoles/cuteinductor/height/.initial=.3}
+\ctikzset{bipoles/cuteinductor/lower coil height/.initial=.15}
+\ctikzset{bipoles/cuteinductor/width/.initial=.6}
+\ctikzset{bipoles/cuteinductor/coils/.initial=5}
+\ctikzset{bipoles/cuteinductor/coil aspect/.initial=.5}%percentage of inductor width, which is covered by lower coil
+%% Cute choke settings
+\ctikzset{bipoles/cutechoke/height/.initial=.3}
+\ctikzset{bipoles/cutechoke/lower coil height/.initial=.15}
+\ctikzset{bipoles/cutechoke/width/.initial=.6}
+\ctikzset{bipoles/cutechoke/coils/.initial=5}
+\ctikzset{bipoles/cutechoke/coil aspect/.initial=.5}%percentage of choke width, which is covered by lower coil
+\ctikzset{bipoles/cutechoke/cstep/.initial=.3}
+\ctikzset{bipoles/cutechoke/cdist/.initial=1.3}
+\ctikzset{bipoles/cutechoke/cthick/.initial=1}
+\newif\ifpgf at circuit@bipole at twolineschoke
+\pgf at circuit@bipole at twolineschokefalse
+\pgfkeys{/tikz/onelinechoke/.add code={}{\pgf at circuit@bipole at twolineschokefalse}}
+\ctikzset{onelinechoke/.add code={}{\pgf at circuit@bipole at twolineschokefalse}}
+\pgfkeys{/tikz/twolineschoke/.add code={}{\pgf at circuit@bipole at twolineschoketrue}}
+\ctikzset{twolineschoke/.add code={}{\pgf at circuit@bipole at twolineschoketrue}}
+%
+\ctikzset{bipoles/americaninductor/height/.initial=.3}
+\ctikzset{bipoles/americaninductor/height 2/.initial=.1}
+\ctikzset{bipoles/americaninductor/width/.initial=.8}
+\ctikzset{bipoles/americaninductor/coils/.initial=4}
+\ctikzset{bipoles/americaninductor/coil height/.initial=.15}
+\ctikzset{bipoles/vcuteinductor/height/.initial=.6}
+\ctikzset{bipoles/vcuteinductor/lower coil height/.initial=.3}
+\ctikzset{bipoles/vcuteinductor/width/.initial=.6}
+\ctikzset{bipoles/vcuteinductor/coils/.initial=5}
+\ctikzset{bipoles/vcuteinductor/coil aspect/.initial=.5}%percentage of inductor width, which is covered by lower coil
+\ctikzset{bipoles/vamericaninductor/height/.initial=.6}
+\ctikzset{bipoles/vamericaninductor/height 2/.initial=.2}
+\ctikzset{bipoles/vamericaninductor/width/.initial=.8}
+\ctikzset{bipoles/vamericaninductor/coils/.initial=4}
+\ctikzset{bipoles/vamericaninductor/coil height/.initial=.15}
+\ctikzset{bipoles/tfullgeneric/height/.initial=.70}
+\ctikzset{bipoles/tfullgeneric/width/.initial=.80}
+\ctikzset{bipoles/fullgeneric/height/.initial=.30}
+\ctikzset{bipoles/fullgeneric/width/.initial=.80}
+\ctikzset{inductor/.is choice}
+\ctikzset{inductor/cute/.code={\ctikzsetvalof{inductor}{cute}}}
+\ctikzset{inductor/european/.code={\ctikzsetvalof{inductor}{european}}}
+\ctikzset{inductor/american/.code={\ctikzsetvalof{inductor}{american}}}
+
+\tikzset{american inductors/.style = {\circuitikzbasekey/inductor = american}}
+\tikzset{european inductors/.style = {\circuitikzbasekey/inductor = european}}
+\tikzset{cute inductors/.style = {\circuitikzbasekey/inductor = cute}}
+\tikzset{american ports/.style = {\circuitikzbasekey/logic ports = american}}
+\tikzset{european ports/.style = {\circuitikzbasekey/logic ports = european}}
+
+%%>>>
+
+%% Shapes for inductors%<<<
 %% cute inductor
 \pgfcircdeclarebipolescaled{inductors}
 {
@@ -1303,11 +1384,183 @@
         \pgfusepath{draw}
     \endpgfscope
 }
+% %>>>
 
+%% Paths for Inductors%<<<
+%% these are complex because of the three-way set
+%% should be simplified
+\def\pgf at circ@inductor at path#1{%
+    \pgfextra{
+        \edef\pgf at circ@temp{\ctikzvalof{inductor}}%
+        \def\pgf at temp{european}%
+    }
+    \ifx\pgf at temp\pgf at circ@temp%
+        \pgf at circ@europeaninductor at path{#1}%
+    \else%
+        \pgfextra{	\def\pgf at temp{cute} }%
+        \ifx\pgf at temp\pgf at circ@temp%
+            \pgf at circ@cuteinductor at path{#1}%
+        \else%
+            \pgf at circ@americaninductor at path{#1}%
+        \fi%
+    \fi%
+}
+\pgfcirc at path@to at style{l}{inductor}{inductor}{}
+\pgfcirc at style@to at style{inductor}{L}
+\pgfcirc at activate@bipole{l}{europeaninductor}{fullgeneric}{european inductor}
+\pgfcirc at activate@bipole{l}{americaninductor}{americaninductor}{american inductor}
+\pgfcirc at activate@bipole{l}{cuteinductor}{cuteinductor}{cute inductor}
+
+\def\pgf at circ@vinductor at path#1{
+    \pgfextra{
+        \edef\pgf at circ@temp{\ctikzvalof{inductor}}%
+        \def\pgf at temp{european}%
+    }
+    \ifx\pgf at temp\pgf at circ@temp%
+        \pgf at circ@veuropeaninductor at path{#1}%
+    \else%
+        \pgfextra{	\def\pgf at temp{cute} }%
+        \ifx\pgf at temp\pgf at circ@temp%
+            \pgf at circ@vcuteinductor at path{#1}%
+        \else%
+            \pgf at circ@vamericaninductor at path{#1}%
+        \fi%
+    \fi%
+}
+\pgfcirc at path@to at style{l}{vinductor}{variable inductor}{}
+\pgfcirc at style@to at style{variable inductor}{vL}
+\pgfcirc at activate@bipole{l}{veuropeaninductor}{tfullgeneric}{variable european inductor}
+\pgfcirc at activate@bipole{l}{vamericaninductor}{vamericaninductor}{variable american inductor}
+\pgfcirc at activate@bipole{l}{vcuteinductor}{vcuteinductor}{variable cute inductor}
+
+\def\pgf at circ@inductivesens at path#1{%
+    \pgfextra{
+        \edef\pgf at circ@temp{\ctikzvalof{inductor}}%
+        \def\pgf at temp{european}%
+    }
+    \ifx\pgf at temp\pgf at circ@temp%
+        \pgf at circ@europeaninductivesens at path{#1}%
+    \else%
+        \pgfextra{	\def\pgf at temp{cute} }%
+        \ifx\pgf at temp\pgf at circ@temp%
+            \pgf at circ@cuteinductivesens at path{#1}%
+        \else%
+            \pgf at circ@americaninductivesens at path{#1}%
+        \fi%
+    \fi%
+}
+\pgfcirc at path@to at style{l}{inductivesens}{inductive sensor}{}
+\pgfcirc at style@to at style{inductive sensor}{sL}
+\pgfcirc at activate@bipole{l}{europeaninductivesens}{sfullgeneric}{european inductive sensor}
+\pgfcirc at activate@bipole{l}{americaninductivesens}{samericaninductor}{american inductive sensor}
+\pgfcirc at activate@bipole{l}{cuteinductivesens}{scuteinductor}{cute inductive sensor}
+
+\pgfcirc at activate@bipole{l}{cutechoke}{cutechoke}{cute choke}
+% %>>>
+
 %%%%%%%%%%%
-%% Battery
+%% Sources (batteries, independent, dependents and so on
 %%%%%%%%%%%
 
+% Definitions for Sources%<<<1
+
+\ctikzset{bipoles/esource/height/.initial=.60}
+\ctikzset{bipoles/esource/width/.initial=.60}
+\ctikzset{bipoles/pvsource/height/.initial=.60}
+\ctikzset{bipoles/pvsource/width/.initial=.60}
+\ctikzset{bipoles/isource/height/.initial=.60}
+\ctikzset{bipoles/isource/width/.initial=.60}
+\ctikzset{bipoles/oosource/height/.initial=.60}
+\ctikzset{bipoles/oosource/width/.initial=.60}
+\ctikzset{bipoles/oosource/circlesize/.initial=.65}%circlesize+circleoffset should be =1
+\ctikzset{bipoles/oosource/circleoffset/.initial=.35}%circlesize+circleoffset should be =1
+\ctikzset{bipoles/dcisource/angle/.initial=80}
+\ctikzset{bipoles/dcisource/height/.initial=.60}
+\ctikzset{bipoles/dcisource/width/.initial=.60}
+\ctikzset{bipoles/dcvsource/height/.initial=.60}
+\ctikzset{bipoles/dcvsource/width/.initial=.60}
+\ctikzset{bipoles/vsourcetri/height/.initial=.60}
+\ctikzset{bipoles/vsourcetri/width/.initial=.60}
+\ctikzset{bipoles/isourceam/height/.initial=.60}
+\ctikzset{bipoles/isourceam/width/.initial=.60}
+\ctikzset{bipoles/vsource/height/.initial=.60}
+\ctikzset{bipoles/vsource/width/.initial=.60}
+\ctikzset{bipoles/vsourceam/height/.initial=.60}
+\ctikzset{bipoles/vsourceam/width/.initial=.60}
+\ctikzset{bipoles/vsourceam/margin/.initial=.7}
+\ctikzset{bipoles/isourcesin/height/.initial=.60}
+\ctikzset{bipoles/isourcesin/width/.initial=.60}
+\ctikzset{bipoles/vsourcesin/height/.initial=.60}
+\ctikzset{bipoles/vsourcesin/width/.initial=.60}
+\ctikzset{bipoles/vsourcesquare/height/.initial=.60}
+\ctikzset{bipoles/vsourcesquare/width/.initial=.60}
+\ctikzset{bipoles/cisource/height/.initial=.7}
+\ctikzset{bipoles/cisource/width/.initial=.7}
+\ctikzset{bipoles/cisourceam/height/.initial=.7}
+\ctikzset{bipoles/cisourceam/width/.initial=.7}
+\ctikzset{bipoles/ecsource/height/.initial=.7}
+\ctikzset{bipoles/ecsource/width/.initial=.7}
+\ctikzset{bipoles/cvsource/height/.initial=.7}
+\ctikzset{bipoles/cvsource/width/.initial=.7}
+\ctikzset{bipoles/cvsourceam/height/.initial=.7}
+\ctikzset{bipoles/cvsourceam/width/.initial=.7}
+\ctikzset{bipoles/cvsourceam/margin/.initial=.7}
+\ctikzset{bipoles/cvsourceam/text scale/.initial=1}
+\ctikzset{bipoles/cisourcesin/width/.initial=.7}
+\ctikzset{bipoles/cvsourcesin/height/.initial=.7}
+\ctikzset{bipoles/cvsourcesin/width/.initial=.7}
+\ctikzset{bipoles/battery/height/.initial=.6}
+\ctikzset{bipoles/battery/width/.initial=.3}
+\ctikzset{bipoles/battery1/height/.initial=.6}
+\ctikzset{bipoles/battery1/width/.initial=.3}
+\ctikzset{bipoles/battery2/height/.initial=.6}
+\ctikzset{bipoles/battery2/width/.initial=.3}
+% noise sources
+\ctikzset{bipoles/noise sources/fillcolor/.initial=gray!50}
+
+% % % ootransformer
+\ctikzset{bipoles/oosourcetrans/height/.initial=.6}
+\ctikzset{bipoles/oosourcetrans/width/.initial=.6}
+\ctikzset{bipoles/oosourcetrans/circlesize/.initial=.6}%circlesize+circleoffset should be =1
+\ctikzset{bipoles/oosourcetrans/circleoffset/.initial=.4}%circlesize+circleoffset should be =1
+\ctikzset{bipoles/oosourcetrans/vectorgroupscale/.initial=1}
+
+% % % oootransformer
+\ctikzset{bipoles/ooosource/height/.initial=.6}
+\ctikzset{bipoles/ooosource/circlesize/.initial=.55}%circlesize+circleoffset should be =1
+\ctikzset{bipoles/ooosource/circleoffset/.initial=.45}%circlesize+circleoffset should be =1
+\ctikzset{bipoles/ooosource/vectorgroupscale/.initial=1}
+
+% % % primary windings
+\newif\ifpgf at circ@prim at delta
+\newif\ifpgf at circ@prim at wye
+\newif\ifpgf at circ@prim at zig
+\pgfkeys{tikz/prim/.is choice}
+\pgfkeys{tikz/prim/delta/.add code={}{\pgf at circ@prim at deltatrue}}
+\pgfkeys{tikz/prim/wye/.add code={}{\pgf at circ@prim at wyetrue}}
+\pgfkeys{tikz/prim/zig/.add code={}{\pgf at circ@prim at zigtrue}}
+
+% % % secondary windings
+\newif\ifpgf at circ@sec at delta
+\newif\ifpgf at circ@sec at wye
+\newif\ifpgf at circ@sec at zig
+\pgfkeys{tikz/sec/.is choice}
+\pgfkeys{tikz/sec/delta/.add code={}{\pgf at circ@sec at deltatrue}}
+\pgfkeys{tikz/sec/wye/.add code={}{\pgf at circ@sec at wyetrue}}
+\pgfkeys{tikz/sec/zig/.add code={}{\pgf at circ@sec at zigtrue}}
+
+% % % tertiary windings (ooosource)
+\newif\ifpgf at circ@tert at delta
+\newif\ifpgf at circ@tert at wye
+\newif\ifpgf at circ@tert at zig
+\pgfkeys{tikz/tert/.is choice}
+\pgfkeys{tikz/tert/delta/.add code={}{\pgf at circ@tert at deltatrue}}
+\pgfkeys{tikz/tert/wye/.add code={}{\pgf at circ@tert at wyetrue}}
+\pgfkeys{tikz/tert/zig/.add code={}{\pgf at circ@tert at zigtrue}}%
+%%>>>
+
+%% Nodes definitions for sources%<<<
+
 %% Battery
 \pgfcircdeclarebipolescaled{batteries}
 {}
@@ -2414,11 +2667,246 @@
     \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{.6\pgf at circ@res at down}}
     \pgfsetroundcap\pgfusepath{draw}
 }
+% %>>>
 
+%% Paths definitions for Sources%<<<
+
+%% Batteries
+
+\pgfcirc at activate@bipole at simple@opt{v}{battery}{\circuitikzbasekey/bipole/is voltage=true,
+    \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true}
+\pgfcirc at activate@bipole at opt{v}{batteryone}{battery1}{battery1}{\circuitikzbasekey/bipole/is voltage=true,
+    \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true}
+\pgfcirc at activate@bipole at opt{v}{batterytwo}{battery2}{battery2}{\circuitikzbasekey/bipole/is voltage=true,
+    \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true}
+%% Sources: voltage
+
+\pgfcirc at activate@bipole at opt{v}{vsource}{vsource}{european voltage source}{%
+    \circuitikzbasekey/bipole/is voltage=true,
+    \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true}
+\pgfcirc at activate@bipole at opt{v}{vsourceam}{vsourceAM}{american voltage source}{%
+    \circuitikzbasekey/bipole/is voltage=true,
+    \circuitikzbasekey/bipole/is voltageoutsideofsymbol=false}
+\pgfcirc at style@to at style{\ifpgf at circuit@europeanvoltage european \else american \fi voltage source}{voltage source}
+\pgfcirc at style@to at style{voltage source}{vsource}
+\pgfcirc at style@to at style{voltage source}{V}
+
+\pgfcirc at activate@bipole at opt{v}{cvsource}{cvsource}{european controlled voltage source}{%
+    \circuitikzbasekey/bipole/is voltage=true,
+    \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true}
+\pgfcirc at activate@bipole at opt{v}{cvsourceam}{cvsourceAM}{american controlled voltage source}{%
+    \circuitikzbasekey/bipole/is voltage=true,
+    \circuitikzbasekey/bipole/is voltageoutsideofsymbol=false}
+\pgfcirc at style@to at style{\ifpgf at circuit@europeanvoltage european \else american \fi controlled voltage source}{controlled voltage source}
+\pgfcirc at style@to at style{controlled voltage source}{cvsource}
+\pgfcirc at style@to at style{controlled voltage source}{controlled vsource}
+\pgfcirc at style@to at style{controlled voltage source}{cV}
+
+\pgfcirc at activate@bipole at simple@opt{v}{esource}{%
+    \circuitikzbasekey/bipole/is voltage=true,
+    \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true}
+
+\pgfcirc at activate@bipole at opt{v}{ecsource}{ecsource}{empty controlled source}{%
+    \circuitikzbasekey/bipole/is voltage=true,
+    \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true}
+\pgfcirc at style@to at style{empty controlled source}{ecsource}
+
+\pgfcirc at activate@bipole at opt{v}{vsourcesin}{vsourcesin}{sinusoidal voltage source}{%
+    \circuitikzbasekey/bipole/is voltage=true,
+    \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true}
+\pgfcirc at style@to at style{sinusoidal voltage source}{vsourcesin}
+\pgfcirc at style@to at style{sinusoidal voltage source}{sV}
+
+\pgfcirc at activate@bipole at opt{v}{cvsourcesin}{cvsourcesin}{controlled sinusoidal voltage source}{%
+    \circuitikzbasekey/bipole/is voltage=true,
+    \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true}
+\pgfcirc at style@to at style{controlled sinusoidal voltage source}{cvsourcesin}
+\pgfcirc at style@to at style{controlled sinusoidal voltage source}{controlled vsourcesin}
+\pgfcirc at style@to at style{controlled sinusoidal voltage source}{csV}
+
+\pgfcirc at activate@bipole at opt{v}{vsourcesquare}{vsourcesquare}{square voltage source}{%
+    \circuitikzbasekey/bipole/is voltage=true,
+    \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true}
+\pgfcirc at style@to at style{square voltage source}{vsourcesquare}
+\pgfcirc at style@to at style{square voltage source}{sqV}
+
+\pgfcirc at activate@bipole at opt{v}{vsourcetri}{vsourcetri}{triangle voltage source}{%
+    \circuitikzbasekey/bipole/is voltage=true,
+    \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true}
+\pgfcirc at style@to at style{triangle voltage source}{vsourcetri}
+\pgfcirc at style@to at style{triangle voltage source}{tV}
+
+\pgfcirc at activate@bipole at simple@opt{v}{pvsource}{%
+    \circuitikzbasekey/bipole/is voltage=true,
+    \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true}
+
+\pgfcirc at activate@bipole at simple@opt{v}{dcvsource}{%
+    \circuitikzbasekey/bipole/is voltage=true,
+    \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true}
+
+\pgfcirc at activate@bipole at opt{v}{oosource}{oosource}{voosource}{%
+    \circuitikzbasekey/bipole/is voltage=true,
+    \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true}
+
+\pgfcirc at activate@bipole at simple@opt{v}{ooosource}{%
+    \circuitikzbasekey/bipole/is voltage=true,
+    \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true}
+
+\pgfcirc at activate@bipole at simple@opt{v}{oosourcetrans}{%
+    \circuitikzbasekey/bipole/is voltage=true,
+    \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true}
+
+\pgfcirc at activate@bipole at opt{v}{vsourceC}{vsourceC}{cute european voltage source}{%
+    \circuitikzbasekey/bipole/is voltage=true,
+    \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true}
+\pgfcirc at style@to at style{cute european voltage source}{vsourceC}
+\pgfcirc at style@to at style{cute european voltage source}{ceV}
+
+\pgfcirc at activate@bipole at opt{v}{cvsourceC}{cvsourceC}{cute european controlled voltage source}{%
+    \circuitikzbasekey/bipole/is voltage=true,
+    \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true}
+\pgfcirc at style@to at style{cute european controlled voltage source}{cvsourceC}
+\pgfcirc at style@to at style{cute european controlled voltage source}{cceV}
+
+\pgfcirc at activate@bipole at opt{v}{vsourceN}{vsourceN}{noise voltage source}{%
+    \circuitikzbasekey/bipole/is voltage=true,
+    \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true}
+\pgfcirc at style@to at style{noise voltage source}{vsourceN}
+\pgfcirc at style@to at style{noise voltage source}{nV}
+
+%% Sources: current
+
+\pgfcirc at activate@bipole at opt{i}{isource}{isource}{european current source}{%
+    \circuitikzbasekey/bipole/is current=true}
+\pgfcirc at activate@bipole at opt{i}{isourceam}{isourceAM}{american current source}{%
+    \circuitikzbasekey/bipole/is current=true}
+\pgfcirc at style@to at style{\ifpgf at circuit@europeancurrent european \else american \fi current source}{current source}
+\pgfcirc at style@to at style{current source}{isource}
+\pgfcirc at style@to at style{current source}{I}
+
+\pgfcirc at activate@bipole at opt{i}{cisource}{cisource}{european controlled current source}{%
+    \circuitikzbasekey/bipole/is current=true}
+\pgfcirc at activate@bipole at opt{i}{cisourceam}{cisourceAM}{american controlled current source}{%
+    \circuitikzbasekey/bipole/is current=true}
+\pgfcirc at style@to at style{\ifpgf at circuit@europeanvoltage european \else american \fi controlled current source}{controlled current source}
+\pgfcirc at style@to at style{controlled current source}{cisource}
+\pgfcirc at style@to at style{controlled current source}{controlled isource}
+\pgfcirc at style@to at style{controlled current source}{cI}
+
+\pgfcirc at activate@bipole at opt{i}{isourcesin}{isourcesin}{sinusoidal current source}{%
+    \circuitikzbasekey/bipole/is current=true}
+\pgfcirc at style@to at style{sinusoidal current source}{isourcesin}
+\pgfcirc at style@to at style{sinusoidal current source}{sI}
+
+\pgfcirc at activate@bipole at opt{i}{cisourcesin}{cisourcesin}{controlled sinusoidal current source}{%
+    \circuitikzbasekey/bipole/is current=true}
+\pgfcirc at style@to at style{controlled sinusoidal current source}{cisourcesin}
+\pgfcirc at style@to at style{controlled sinusoidal current source}{controlled isourcesin}
+\pgfcirc at style@to at style{controlled sinusoidal current source}{csI}
+
+\pgfcirc at activate@bipole at simple@opt{i}{dcisource}{%
+    \circuitikzbasekey/bipole/is current=true}
+
+\pgfcirc at activate@bipole at opt{i}{oosource}{oosource}{ioosource}{%
+    \circuitikzbasekey/bipole/is current=true}
+
+\pgfcirc at activate@bipole at opt{i}{isourceC}{isourceC}{cute european current source}{%
+    \circuitikzbasekey/bipole/is current=true}
+\pgfcirc at style@to at style{cute european current source}{isourceC}
+\pgfcirc at style@to at style{cute european current source}{ceI}
+
+\pgfcirc at activate@bipole at opt{i}{cisourceC}{cisourceC}{cute european controlled current source}{%
+    \circuitikzbasekey/bipole/is current=true}
+\pgfcirc at style@to at style{cute european controlled current source}{cisourceC}
+\pgfcirc at style@to at style{cute european controlled current source}{cceI}
+
+\pgfcirc at activate@bipole at opt{i}{isourceN}{isourceN}{noise current source}{%
+    \circuitikzbasekey/bipole/is current=true}
+\pgfcirc at style@to at style{noise current source}{isourceN}
+\pgfcirc at style@to at style{noise current source}{nI}
+
+% build alias with voltage and current directions (legacy)
+
+\def\pgf at temp#1{
+    \pgfcirc at style@to at style@label{voltage source}{V#1}{v#1}
+    \pgfcirc at style@to at style@label{controlled voltage source}{cV#1}{v#1}
+    \pgfcirc at style@to at style@label{sinusoidal voltage source}{sV#1}{v#1}
+    \pgfcirc at style@to at style@label{controlled sinusoidal voltage source}{csV#1}{v#1}
+}
+\pgf at temp{_>} \pgf at temp{_<} \pgf at temp{^>} \pgf at temp{^<}
+\pgf at temp{>} \pgf at temp{<} \pgf at temp{^} \pgf at temp{_}
+\def\pgf at temp#1{
+    \pgfcirc at style@to at style@label{current source}{I#1}{i#1}
+    \pgfcirc at style@to at style@label{controlled current source}{cI#1}{i#1}
+    \pgfcirc at style@to at style@label{sinusoidal current source}{sI#1}{i#1}
+    \pgfcirc at style@to at style@label{controlled sinusoidal current source}{csI#1}{i#1}
+}
+\pgf at temp{_>} \pgf at temp{_<} \pgf at temp{^>} \pgf at temp{^<}
+\pgf at temp{>_} \pgf at temp{<_} \pgf at temp{>^} \pgf at temp{<^}
+\pgf at temp{>} \pgf at temp{<} \pgf at temp{^} \pgf at temp{_}
+% %>>>
+
 %%%%%%%%%%%%%%
 %% Diodes
 %%%%%%%%%%%%%%
 
+% Definitions for diodes%<<<1
+
+\ctikzset{bipoles/diode/height/.initial=.50}
+\ctikzset{bipoles/diode/width/.initial=.40}
+\ctikzset{bipoles/bidirectionaldiode/height/.initial=1.1}
+\ctikzset{bipoles/bidirectionaldiode/width/.initial=1}
+\ctikzset{bipoles/bidirectionaldiode/diode width left/.initial=.3}
+\ctikzset{bipoles/bidirectionaldiode/diode width right/.initial=.3}
+\ctikzset{bipoles/varcap/height/.initial=.50}
+\ctikzset{bipoles/varcap/width/.initial=.45}
+\ctikzset{tripoles/thyristor/height/.initial=1.10}
+\ctikzset{tripoles/thyristor/height 2/.initial=.5}
+\ctikzset{tripoles/thyristor/width/.initial=1.0}
+\ctikzset{tripoles/thyristor/diode height/.initial=.5}
+\ctikzset{tripoles/thyristor/diode width left/.initial=.4}
+\ctikzset{tripoles/thyristor/diode width right/.initial=.3}
+
+\ctikzset{tripoles/triac/height/.initial=1.1}
+\ctikzset{tripoles/triac/width/.initial=1}
+\ctikzset{tripoles/triac/diode width left/.initial=.3}
+\ctikzset{tripoles/triac/diode width right/.initial=.3}
+%
+% Flipping arrows in LED and photodiodes
+%
+\newif\ifpgf at led@fliparrows
+\newif\ifpgf at pd@fliparrows
+\pgf at led@fliparrowsfalse
+\pgf at pd@fliparrowsfalse
+%
+% by default the arrows start (LED) and go (PD) to the anode.
+%
+\ctikzset{led arrows from anode/.code=\pgf at led@fliparrowsfalse}
+\ctikzset{pd arrows to anode/.code=\pgf at pd@fliparrowsfalse}
+%
+% but they can start form the cathode (LED) or go to it (PD)
+%
+\ctikzset{led arrows from cathode/.code=\pgf at led@fliparrowstrue}
+\ctikzset{pd arrows to cathode/.code=\pgf at pd@fliparrowstrue}
+
+\newif\ifpgf at circuit@strokediode
+\newif\ifpgf at circuit@fulldiode
+\pgf at circuit@strokediodefalse
+\pgf at circuit@fulldiodefalse
+
+\ctikzset{diode/.is choice}
+\ctikzset{diode/empty/.code = \pgf at circuit@fulldiodefalse\pgf at circuit@strokediodefalse}%default
+\ctikzset{diode/full/.code = \pgf at circuit@fulldiodetrue }
+\ctikzset{diode/stroke/.code = \pgf at circuit@strokediodetrue}
+
+\tikzset{full diodes/.style = { \circuitikzbasekey/diode = full}}
+\tikzset{empty diodes/.style = { \circuitikzbasekey/diode = empty}}
+\tikzset{stroke diodes/.style = { \circuitikzbasekey/diode = stroke}}
+
+%%>>>
+
+%% Node components for diodes %<<<1
+
 %% Black generic diode
 \pgfcircdeclarebipolescaled{diodes}
 {}
@@ -3152,12 +3640,126 @@
     \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0pt}}
 
     \pgfusepath{draw}
+}% %>>>
+
+%% Paths definitions for Diodes%<<<
+
+\def\pgfcirc at tmp@generatediodes#1#2{
+    \pgfcirc at activate@bipole{l}{#1diode}{#1diode}{#1 diode}
+    \pgfcirc at style@to at style{#1 diode}{D#2}
+    \pgfcirc at activate@bipole{l}{#1zdiode}{#1zdiode}{#1 Zener diode}
+    \pgfcirc at style@to at style{#1 Zener diode}{zD#2}
+    \pgfcirc at activate@bipole{l}{#1zzdiode}{#1zzdiode}{#1 ZZener diode}
+    \pgfcirc at style@to at style{#1 ZZener diode}{zzD#2}
+    \pgfcirc at activate@bipole{l}{#1sdiode}{#1sdiode}{#1 Schottky diode}
+    \pgfcirc at style@to at style{#1 Schottky diode}{sD#2}
+    \pgfcirc at activate@bipole{l}{#1tdiode}{#1tdiode}{#1 tunnel diode}
+    \pgfcirc at style@to at style{#1 tunnel diode}{tD#2}
+    \pgfcirc at activate@bipole{l}{#1lediode}{#1lediode}{#1 led}
+    \pgfcirc at style@to at style{#1 led}{leD#2}
+    \pgfcirc at activate@bipole{l}{#1pdiode}{#1pdiode}{#1 photodiode}
+    \pgfcirc at style@to at style{#1 photodiode}{pD#2}
+    \pgfcirc at activate@bipole{l}{#1varcap}{#1varcap}{#1 varcap}
+    \pgfcirc at style@to at style{#1 varcap}{VC#2}
+    \pgfcirc at activate@bipole{l}{#1bidirectionaldiode}{#1bidirectionaldiode}{#1 bidirectionaldiode}
+    \pgfcirc at style@to at style{#1 bidirectionaldiode}{biD#2}
+    \pgfcirc at activate@bipole{l}{#1thyristor}{#1thyristor}{#1 thyristor}
+    \pgfcirc at style@to at style{#1 thyristor}{Ty#2}
+    \pgfcirc at activate@bipole{l}{#1triac}{#1triac}{#1 triac}
+    \pgfcirc at style@to at style{#1 triac}{Tr#2}
 }
+\pgfcirc at tmp@generatediodes{full}{*}
+\pgfcirc at tmp@generatediodes{empty}{o}
+\def\pgfcirc at tmp@generatestrokeddiodes#1#2{
+    \pgfcirc at node@to at style{l}{emptydiode}{#1 diode}{\circuitikzbasekey/bipole/is strokedsymbol=true}
+    \pgfcirc at style@to at style{#1 diode}{D#2}
+    \pgfcirc at node@to at style{l}{emptyzdiode}{#1 Zener diode}{\circuitikzbasekey/bipole/is strokedsymbol=true}
+    \pgfcirc at style@to at style{#1 Zener diode}{zD#2}
+    \pgfcirc at node@to at style{l}{emptyzzdiode}{#1 ZZener diode}{\circuitikzbasekey/bipole/is strokedsymbol=true}
+    \pgfcirc at style@to at style{#1 ZZener diode}{zzD#2}
+    \pgfcirc at node@to at style{l}{emptysdiode}{#1 Schottky diode}{\circuitikzbasekey/bipole/is strokedsymbol=true}
+    \pgfcirc at style@to at style{#1 Schottky diode}{sD#2}
+    \pgfcirc at node@to at style{l}{emptytdiode}{#1 tunnel diode}{\circuitikzbasekey/bipole/is strokedsymbol=true}
+    \pgfcirc at style@to at style{#1 tunnel diode}{tD#2}
+    \pgfcirc at node@to at style{l}{emptylediode}{#1 led}{\circuitikzbasekey/bipole/is strokedsymbol=true}
+    \pgfcirc at style@to at style{#1 led}{leD#2}
+    \pgfcirc at node@to at style{l}{emptypdiode}{#1 photodiode}{\circuitikzbasekey/bipole/is strokedsymbol=true}
+    \pgfcirc at style@to at style{#1 photodiode}{pD#2}
+    \pgfcirc at node@to at style{l}{emptyvarcap}{#1 varcap}{\circuitikzbasekey/bipole/is strokedsymbol=true}
+    \pgfcirc at style@to at style{#1 varcap}{VC#2}
+    \pgfcirc at node@to at style{l}{emptybidirectionaldiode}{#1 bidirectionaldiode}{\circuitikzbasekey/bipole/is strokedsymbol=true}
+    \pgfcirc at style@to at style{#1 bidirectionaldiode}{biD#2}
+    \pgfcirc at node@to at style{l}{emptythyristor}{#1 thyristor}{\circuitikzbasekey/bipole/is strokedsymbol=true}
+    \pgfcirc at style@to at style{#1 thyristor}{Ty#2}
+    \pgfcirc at node@to at style{l}{emptytriac}{#1 triac}{\circuitikzbasekey/bipole/is strokedsymbol=true}
+    \pgfcirc at style@to at style{#1 triac}{Tr#2}
+}
+\pgfcirc at tmp@generatestrokeddiodes{stroke}{-}
+\def\pgfcircdiodestylemacro{\ifpgf at circuit@strokediode stroke \else\ifpgf at circuit@fulldiode full \else empty \fi\fi}
+% these are auto-switching styles
+\pgfcirc at style@to at style{\pgfcircdiodestylemacro diode}{diode}
+\pgfcirc at style@to at style{diode}{D}
+\pgfcirc at style@to at style{\pgfcircdiodestylemacro Zener diode}{Zener diode}
+\pgfcirc at style@to at style{Zener diode}{zD}
+\pgfcirc at style@to at style{\pgfcircdiodestylemacro ZZener diode}{ZZener diode}
+\pgfcirc at style@to at style{ZZener diode}{zzD}
+\pgfcirc at style@to at style{\pgfcircdiodestylemacro Schottky diode}{Schottky diode}
+\pgfcirc at style@to at style{Schottky diode}{sD}
+\pgfcirc at style@to at style{\pgfcircdiodestylemacro tunnel diode}{tunnel diode}
+\pgfcirc at style@to at style{tunnel diode}{tD}
+\pgfcirc at style@to at style{\pgfcircdiodestylemacro led}{led}
+\pgfcirc at style@to at style{led}{leD}
+\pgfcirc at style@to at style{\pgfcircdiodestylemacro photodiode}{photodiode}
+\pgfcirc at style@to at style{photodiode}{pD}
+\pgfcirc at style@to at style{\pgfcircdiodestylemacro varcap}{varcap}
+\pgfcirc at style@to at style{varcap}{VC}
+\pgfcirc at style@to at style{\pgfcircdiodestylemacro bidirectionaldiode}{bidirectionaldiode}
+\pgfcirc at style@to at style{bidirectionaldiode}{biD}
+\pgfcirc at style@to at style{\pgfcircdiodestylemacro thyristor}{thyristor}
+\pgfcirc at style@to at style{thyristor}{Ty}
+\pgfcirc at style@to at style{\pgfcircdiodestylemacro triac}{triac}
+\pgfcirc at style@to at style{triac}{Tr}
+% %>>>
 
 %%%%%%%%%%%%%
-%% switches
+%% switches and buttons
 %%%%%%%%%%%%%
 
+%% Definitions for switches%<<<1
+
+\ctikzset{bipoles/spst/height/.initial=.35}
+\ctikzset{bipoles/spst/width/.initial=.35}
+\ctikzset{bipoles/spst/depth/.initial=.2}
+\ctikzset{bipoles/nos/height/.initial=.3}
+\ctikzset{bipoles/nos/width/.initial=.35}
+\ctikzset{bipoles/nos/depth/.initial=.2}
+\ctikzset{bipoles/ncs/height/.initial=.35}
+\ctikzset{bipoles/ncs/width/.initial=.35}
+\ctikzset{bipoles/ncs/depth/.initial=.2}
+\ctikzset{bipoles/pushbutton/height/.initial=.5}
+\ctikzset{bipoles/pushbutton/height 2/.initial=.2}
+\ctikzset{bipoles/pushbutton/width/.initial=.50}
+%%% reed switch
+\ctikzset{bipoles/reed/height/.initial=.4}
+\ctikzset{bipoles/reed/width/.initial=.8}% 0.35 in nos
+\ctikzset{bipoles/reed/depth/.initial=.4}
+%% Cute switches
+\ctikzset{bipoles/cuteswitch/shape/.initial={ocirc}}
+\ctikzset{bipoles/cuteswitch/height/.initial=.6}
+\ctikzset{bipoles/cuteswitch/height 2/.initial=.2}
+\ctikzset{bipoles/cuteswitch/width/.initial=.50}
+\ctikzset{bipoles/cuteswitch/thickness/.initial=1}
+
+\ctikzset{tripoles/spdt/width/.initial=.85}
+\ctikzset{tripoles/spdt/height/.initial=.45}
+\ctikzset{tripoles/spdt/margin/.initial=.45}
+
+\ctikzset{tripoles/toggleswitch/height/.initial=.8}
+\ctikzset{tripoles/toggleswitch/height 2/.initial=.0}
+\ctikzset{tripoles/toggleswitch/width/.initial=.80}
+%%>>>
+
+%% Shapes Node for bipoles switches and similar things%<<<
 %% (Closing) SPST
 \pgfcircdeclarebipolescaled{switches}
 {}
@@ -3473,10 +4075,392 @@
     \pgfusepath{draw}
     }
 
+\pgfcircdeclarebipole{
+	\anchor{out 1}{
+		\northeast
+		\pgf at y=0cm
+	}
+	\anchor{out 2}{
+		\northeast
+		\pgf at y=.8\pgf at y
+	}
+}
+{\ctikzvalof{tripoles/toggleswitch/height 2}}
+{toggleswitch}
+{\ctikzvalof{tripoles/toggleswitch/height}}
+{\ctikzvalof{tripoles/toggleswitch/width}}
+{
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+    \pgfpathlineto{\pgfpoint{.3\pgf at circ@res at left}{0pt}}
+    \pgfusepath{draw}
+    \pgfscope
+        \pgfpathmoveto{\pgfpoint{.3\pgf at circ@res at left}{0pt}}
+        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+        \pgfpathlineto{\pgfpoint{.7\pgf at circ@res at right}{.5\pgf at circ@res at up}}
+        \pgfusepath{draw}
+    \endpgfscope
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+    \pgfpathlineto{\pgfpoint{.5\pgf at circ@res at right}{0}}
+
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{.8\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{.5\pgf at circ@res at right}{.8\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{.5\pgf at circ@res at right}{.15\pgf at circ@res at up}}
+    \pgfusepath{draw}
+
+
+    \pgfpathmoveto{\pgfpoint{.2\pgf at circ@res at left}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{.2\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfusepath{draw}
+
+    \pgfsetdash{{.08\pgf at circ@res at up}{.04\pgf at circ@res at up}{.7\pgf at circ@res at up}{.04\pgf at circ@res at up}{.8\pgf at circ@res at up}}{0cm}
+    \pgfpathmoveto{\pgfpoint{0}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{0}{.8\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{.2\pgf at circ@res at left}{.6\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{0}{.4\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{0}{.2\pgf at circ@res at up}}
+    \pgfusepath{draw}
+    \pgfsetdash{}{0cm}
+}
+
+% %>>>
+
+%% Shape nodes for switches (non-bipoles)%<<<
+
+%%%%%%%%%%%%%
+%% switches
+%%%%%%%%%%%%%
+
+% Legacy spdt
+\pgfdeclareshape{spdt}{
+    \savedmacro{\ctikzclass}{\edef\ctikzclass{switches}}
+    \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+    \savedanchor\northwest{%
+        \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+        \pgf at y=\ctikzvalof{tripoles/spdt/height}\pgf at circ@scaled at Rlen
+        \pgf at y=.5\pgf at y
+        \pgf at x=-\ctikzvalof{tripoles/spdt/width}\pgf at circ@scaled at Rlen
+        \pgf at x=.5\pgf at x
+    }
+    \anchor{left}{%
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{in}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{out 1}{
+        \northwest
+        \pgf at x=-\pgf at x
+    }
+    \anchor{out 2}{
+        \northwest
+        \pgf at x=-\pgf at x
+        \pgf at y=-\pgf at y
+    }
+    \anchor{center}{
+        \pgf at y=0pt
+        \pgf at x=0pt
+    }
+    \anchor{east}{
+        \northwest
+        \pgf at y=0pt
+        \pgf at x=-\pgf at x
+    }
+    \anchor{west}{
+        \northwest
+        \pgf at y=0pt
+    }
+    \anchor{south}{
+        \northwest
+        \pgf at x=0pt
+        \pgf at y=-\pgf at y
+    }
+    \anchor{north}{
+        \northwest
+        \pgf at x=0pt
+    }
+    \anchor{south west}{
+        \northwest
+        \pgf at y=-\pgf at y
+    }
+    \anchor{north east}{
+        \northwest
+        \pgf at x=-\pgf at x
+    }
+    \anchor{north west}{
+        \northwest
+    }
+    \anchor{south east}{
+        \northwest
+        \pgf at x=-\pgf at x
+        \pgf at y=-\pgf at y
+    }
+    \backgroundpath{
+        \pgfsetcolor{\ctikzvalof{color}}
+
+        \northwest
+        \pgf at circ@res at up = \pgf at y
+        \pgf at circ@res at down = -\pgf at y
+        \pgf at circ@res at right = -\pgf at x
+        \pgf at circ@res at left = \pgf at x
+        \pgf at circ@res at other = \ctikzvalof{tripoles/spdt/margin}\pgf at circ@res at left
+
+
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+        \pgfpathlineto{\pgfpoint{-\pgf at circ@res at other}{\pgf at circ@res at up}}
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+        \pgfpathlineto{\pgfpoint{-\pgf at circ@res at other}{\pgf at circ@res at down}}
+
+        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+        \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{0pt}}
+
+        \pgfusepath{draw}
+
+        \pgfscope
+            \pgftransformshift{\pgfpoint{-\pgf at circ@res at other}{\pgf at circ@res at up}}
+            \pgfnode{ocirc}{center}{}{spdt1}{\pgfusepath{stroke}}
+        \endpgfscope
+        \pgfscope
+            \pgftransformshift{\pgfpoint{-\pgf at circ@res at other}{\pgf at circ@res at down}}
+            \pgfnode{ocirc}{center}{}{}{\pgfusepath{stroke}}
+        \endpgfscope
+        \pgfscope
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at other}{0pt}}
+            \pgfnode{ocirc}{center}{}{spdt2}{\pgfusepath{stroke}}
+        \endpgfscope
+
+        \pgfscope
+            \pgfpathmoveto{\pgfpointshapeborder{spdt2}{\pgfpointorigin}}
+            \pgfpathlineto{
+                \pgfpointadd{\pgfpointshapeborder{spdt1}{\pgfpoint{-\pgf at circ@res at other}{-100pt}}}
+                {\pgfpoint{-.05\pgf at circ@res at up}{-.05\pgf at circ@res at up}}
+            }
+            \pgf at circ@setlinewidth{tripoles}{\pgflinewidth}
+            \pgfusepath{draw}
+        \endpgfscope
+    }
+}
+
+
+% cute switch "node" shapes, matching with cute "to" shapes
+% #1 -> name
+% #2 -> barposition
+% #3 -> arrowcode
+\long\def\pgfcircdeclarecutespdt#1#2#3{
+    \pgfdeclareshape{#1}
+    {
+        \savedmacro{\ctikzclass}{\edef\ctikzclass{switches}}
+        \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+        \savedanchor\northwest{%
+            \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            \pgf at y=\ctikzvalof{bipoles/cuteswitch/height}\pgf at circ@scaled at Rlen
+            \pgf at y=.5\pgf at y
+            \pgf at x=-\ctikzvalof{tripoles/spdt/width}\pgf at circ@scaled at Rlen
+            \pgf at x=.25\pgf at x
+        }
+        \savedanchor\midlever{
+            % these values are calculated when we create the definition of the shape.
+            \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            \pgf at y=\ctikzvalof{bipoles/cuteswitch/height}\pgf at circ@scaled at Rlen
+            \pgf at circ@res at temp=\ctikzvalof{nodes width}\pgf at circ@scaled at Rlen
+            \pgf at circ@res at temp=\ctikzvalof{bipoles/cuteswitch/thickness}\pgf at circ@res at temp
+            \pgf at circ@res at down = -.5\pgf at y
+            \pgf at circ@res at up = .5\pgf at y
+            \pgfextracty{\pgf at circ@res at other}{#2}
+            \pgf at x=0pt
+            \pgf at y=.5\pgf at circ@res at other
+        }
+        % radius of the connector
+        % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+        \saveddimen{\radius}{\pgfmathsetlength\pgf at x{\pgf at circ@Rlen*\ctikzvalof{nodes width}}}
+        % shapename
+        \savedmacro{\thisshape}{\def\thisshape{\tikz at fig@name}}
+        % shape type
+        \savedmacro{\cshape}{\def\cshape{\ctikzvalof{bipoles/cuteswitch/shape}}}
+        % mid of the lever, to stack switches
+        \anchor{mid}{\midlever}
+        % center anchors
+        \anchor{cin}{ \northwest \pgf at y=0pt}
+        \anchor{cout 1}{ \northwest \pgf at x=-\pgf at x }
+        \anchor{cout 2}{ \northwest \pgf at x=-\pgf at x \pgf at y=-\pgf at y }
+        % horizontal angles
+        \anchor{in}{ \northwest \pgf at y=0pt\advance\pgf at x by -\radius}
+        \anchor{out 1}{ \northwest \pgf at x=-\pgf at x \advance\pgf at x by \radius}
+        \anchor{out 2}{ \northwest \pgf at x=-\pgf at x \advance\pgf at x by \radius \pgf at y=-\pgf at y }
+
+        \anchor{center}{ \pgf at y=0pt \pgf at x=0pt }
+        \anchor{east}{ \northwest \pgf at y=0pt \pgf at x=-\pgf at x  }
+        \anchor{west}{ \northwest \pgf at y=0pt }
+        \anchor{south}{ \northwest \pgf at x=0pt \pgf at y=-\pgf at y }
+        \anchor{north}{ \northwest \pgf at x=0pt }
+        \anchor{south west}{ \northwest \pgf at y=-\pgf at y }
+        \anchor{north east}{ \northwest \pgf at x=-\pgf at x }
+        \anchor{north west}{ \northwest }
+        \anchor{south east}{ \northwest \pgf at x=-\pgf at x \pgf at y=-\pgf at y }
+
+        \backgroundpath{
+            \pgfsetcolor{\ctikzvalof{color}}
+            \northwest
+            \pgf at circ@res at up = \pgf at y
+            \pgf at circ@res at down = -\pgf at y
+            \pgf at circ@res at right = -\pgf at x
+            \pgf at circ@res at left = \pgf at x
+
+            \pgfscope
+            % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+            \pgf at circ@res at temp=\radius\relax
+            \pgf at circ@res at temp=\ctikzvalof{bipoles/cuteswitch/thickness}\pgf at circ@res at temp
+            \pgfsetlinewidth{2\pgf at circ@res at temp}
+            \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfpathlineto{#2}
+            \pgfsetroundcap\pgfusepath{draw}
+            \endpgfscope
+            \pgfscope % arrow
+            #3
+            \endpgfscope
+            % terminals
+            \pgfscope
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+            \pgfnode{\cshape}{center}{}{\thisshape-out 1}{\pgfusepath{stroke}}
+            \endpgfscope
+            \pgfscope
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+            \pgfnode{\cshape}{center}{}{\thisshape-out 2}{\pgfusepath{stroke}}
+            \endpgfscope
+            \pgfscope
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{\cshape}{center}{}{\thisshape-in}{\pgfusepath{stroke}}
+            \endpgfscope
+
+        }
+    }
+}
+
+\pgfcircdeclarecutespdt{cute spdt up}
+{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up-1.5\pgf at circ@res at temp}}
+{}
+
+\pgfcircdeclarecutespdt{cute spdt mid}
+{\pgfpoint{\pgf at circ@res at right}{0pt}}
+{}
+
+\pgfcircdeclarecutespdt{cute spdt down}
+{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down+1.5\pgf at circ@res at temp}}
+{}
+
+\pgfcircdeclarecutespdt{cute spdt up arrow}
+{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up-1.5\pgf at circ@res at temp}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgflinewidth}
+    \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}} % in node
+    \pgfpathmoveto{\pgfpointpolar{70}{1.5\pgf at circ@res at right}}
+    \pgfpatharc{70}{-50}{1.5\pgf at circ@res at right}
+    \pgfsetarrowsend{latexslim}
+    \pgfusepath{draw}
+}
+
+\pgfcircdeclarecutespdt{cute spdt mid arrow}
+{\pgfpoint{\pgf at circ@res at right}{0pt}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgflinewidth}
+    \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}} % in node
+    \pgfsetarrowsstart{latexslim}
+    \pgfpathmoveto{\pgfpointpolar{-60}{1.5\pgf at circ@res at right}}
+    \pgfpatharc{-60}{60}{1.5\pgf at circ@res at right}
+    \pgfsetarrowsend{latexslim}
+    \pgfusepath{draw}
+}
+
+\pgfcircdeclarecutespdt{cute spdt down arrow}
+{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down+1.5\pgf at circ@res at temp}}
+{
+    \pgf at circ@setlinewidth{bipoles}{\pgflinewidth}
+    \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}} % in node
+    \pgfpathmoveto{\pgfpointpolar{-50}{1.5\pgf at circ@res at right}}
+    \pgfpatharc{-50}{70}{1.5\pgf at circ@res at right}
+    \pgfsetarrowsend{latexslim}
+    \pgfusepath{draw}
+}
+% %>>>
+
+%% Paths Switches and buttons%<<<
+
+\pgfcirc at activate@bipole{l}{cspst}{cspst}{closing switch}
+\pgfcirc at style@to at style{closing switch}{switch}
+\pgfcirc at style@to at style{closing switch}{cspst}
+\pgfcirc at style@to at style{switch}{spst}
+\pgfcirc at activate@bipole{l}{ospst}{ospst}{opening switch}
+\pgfcirc at style@to at style{opening switch}{ospst}
+
+\pgfcirc at activate@bipole at simple{l}{nos}
+\pgfcirc at style@to at style{nos}{normal open switch}
+\pgfcirc at activate@bipole at simple{l}{ncs}
+\pgfcirc at style@to at style{ncs}{normal closed switch}
+
+\pgfcirc at activate@bipole{l}{pushbutton}{pushbutton}{push button}
+\pgfcirc at style@to at style{push button}{nopb}
+\pgfcirc at style@to at style{push button}{normally open push button}
+\pgfcirc at activate@bipole{l}{ncpushbutton}{ncpushbutton}{ncpb}
+\pgfcirc at style@to at style{ncpb}{normally closed push button}
+\pgfcirc at activate@bipole{l}{pushbuttonc}{pushbuttonc}{nopbc}
+\pgfcirc at style@to at style{nopbc}{normally open push button closed}
+\pgfcirc at activate@bipole{l}{ncpushbuttono}{ncpushbuttono}{ncpbo}
+\pgfcirc at style@to at style{ncpbo}{normally closed push button open}
+
+\pgfcirc at activate@bipole{l}{toggleswitch}{toggleswitch}{toggle switch}
+\pgfcirc at activate@bipole at simple{l}{reed}
+
+\pgfcirc at activate@bipole{l}{cuteclosedswitch}{cuteclosedswitch}{cute closed switch}
+\pgfcirc at style@to at style{cute closed switch}{ccsw}
+\pgfcirc at activate@bipole{l}{cuteopenswitch}{cuteopenswitch}{cute open switch}
+\pgfcirc at style@to at style{cute open switch}{cosw}
+\pgfcirc at activate@bipole{l}{cuteclosingswitch}{cuteclosingswitch}{cute closing switch}
+\pgfcirc at style@to at style{cute closing switch}{ccgsw}
+\pgfcirc at activate@bipole{l}{cuteopeningswitch}{cuteopeningswitch}{cute opening switch}
+\pgfcirc at style@to at style{cute opening switch}{cogsw}% %>>>
+
 %%%%%%%%%%%%%%%%%
 %% Instruments
 %%%%%%%%%%%%%%%%%
 
+%% Definitions for Instruments %<<<1
+\ctikzset{bipoles/ammeter/height/.initial=.60}
+\ctikzset{bipoles/ammeter/width/.initial=.60}
+\ctikzset{bipoles/ohmmeter/height/.initial=.60}
+\ctikzset{bipoles/ohmmeter/width/.initial=.60}
+\ctikzset{bipoles/voltmeter/height/.initial=.60}
+\ctikzset{bipoles/voltmeter/width/.initial=.60}
+\ctikzset{bipoles/smeter/height/.initial=.60}
+\ctikzset{bipoles/smeter/width/.initial=.60}
+\ctikzset{bipoles/smeter/voltage/additional shift/.initial=1}
+\ctikzset{bipoles/qmeter/depth/.initial=.40}
+\ctikzset{bipoles/qmeter/height/.initial=.80}
+\ctikzset{bipoles/qmeter/width/.initial=.60}
+% this must be specified for each one
+\ctikzset{bipoles/qvprobe/voltage/additional shift/.initial=.5}
+\ctikzset{bipoles/qiprobe/voltage/additional shift/.initial=.5}
+\ctikzset{bipoles/qpprobe/voltage/additional shift/.initial=.5}
+\ctikzset{bipoles/iloop/width/.initial=.40}
+\ctikzset{bipoles/iloop/height/.initial=.60}
+
+\ctikzset{bipoles/oscope/height/.initial=.60}
+\ctikzset{bipoles/oscope/width/.initial=.60}
+\ctikzset{bipoles/oscope/voltage/additional shift/.initial=1}
+
+
+% option to not rotate the new (Romano's) instruments
+\newif\ifpgf at circuit@straightinstruments\pgf at circuit@straightinstrumentstrue
+\pgfkeys{/tikz/straight instruments/.add code={}{\pgf at circuit@straightinstrumentstrue}}
+\ctikzset{straight instruments/.add code={}{\pgf at circuit@straightinstrumentstrue}}
+\pgfkeys{/tikz/rotated instruments/.add code={}{\pgf at circuit@straightinstrumentsfalse}}
+\ctikzset{rotated instruments/.add code={}{\pgf at circuit@straightinstrumentsfalse}}
+%%>>>
+
+%% Node shapes for instruments%<<<
+
 % % METERINGSHAPE
 \long\def\drawmeteringcircle{
     \def\pgf at circ@temp{right}
@@ -3976,1720 +4960,46 @@
         \pgfusepath{draw}
     \endpgfscope
 }
+% %>>>
 
+% Path definitions for Instruments%<<<
 
-%% Varistor
-\pgfcircdeclarebipolescaled{resistors}
-{
-    \pgfcirc at border@extend at updown{1}{1.4}
-}
-{\ctikzvalof{bipoles/varistor/height}}
-{varistor}
-{\ctikzvalof{bipoles/varistor/height}}
-{\ctikzvalof{bipoles/varistor/width}}
-{
-    \pgfscope
-        \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\ctikzvalof{bipoles/varistor/main}\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{-\ctikzvalof{bipoles/varistor/main}\pgf at circ@res at up}}
-        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
-        \pgf at circ@draworfill
-    \endpgfscope
+\pgfcirc at activate@bipole at simple{l}{ammeter}
+\pgfcirc at activate@bipole at simple{l}{ohmmeter}
+\pgfcirc at activate@bipole at simple{l}{voltmeter}
+\pgfcirc at activate@bipole at simple{l}{oscope}
+\pgfcirc at activate@bipole at simple{l}{rmeter}
+\pgfcirc at activate@bipole at simple{l}{rmeterwa}
+\pgfcirc at activate@bipole at simple{l}{smeter}
+\pgfcirc at activate@bipole at simple{l}{iloop}
+% \pgfcirc at activate@bipole at simple{l}{iloop2} that was wrong
+\pgfcirc at activate@bipole{l}{ilooptwo}{iloop2}{iloop2}
+\pgfcirc at activate@bipole at simple{l}{qvprobe}
+\pgfcirc at activate@bipole at simple{l}{qiprobe}
+\pgfcirc at activate@bipole at simple{l}{qpprobe}
+% %>>>
 
-    \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at left}{-\pgf at circ@res at down}}
-    \pgfpathlineto{\pgfpoint{.4\pgf at circ@res at left}{\pgf at circ@res at down}}
-    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
-    \pgfusepath{draw}
-
-    \pgftext[top,x=.65\pgf at circ@res at left,y=1.2\pgf at circ@res at down]{{\pgf at circ@font at tiny\textsf{U}}}
-}
-
-%%%%%%%%%%%%%%
-%% RF bipoles
-%%%%%%%%%%%%%%
-
-% transmission line
-\pgfcircdeclarebipolescaled{RF}
-{}
-{\ctikzvalof{bipoles/tline/height}}
-{tline}
-{\ctikzvalof{bipoles/tline/height}}
-{\ctikzvalof{bipoles/tline/width}}
-{
-    \pgf at circ@res at step=.2\pgf at circ@res at right % half x axis
-    \begin{pgftransparencygroup}
-        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
-        \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at step}{\pgf at circ@res at up}}
-        \pgfpathlineto{\pgfpoint{\pgf at circ@res at left+\pgf at circ@res at step}{\pgf at circ@res at up}}
-        \pgfpatharc{-90}{90}{-\pgf at circ@res at step and -\pgf at circ@res at up}
-        \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at step}{\pgf at circ@res at down}}
-        \pgf at circ@draworfill
-        \pgfpathellipse{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at step}{0pt}}
-        {\pgfpoint{\pgf at circ@res at step}{0pt}}{\pgfpoint{0pt}{-\pgf at circ@res at up}}
-        \pgf at circ@draworfill
-    \end{pgftransparencygroup}
-    \pgfsetlinewidth{\pgfstartlinewidth}
-    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at step}{0pt}}
-    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{0pt}}
-    \pgfusepath{stroke}
-}
-
-% microstrip transmission line
-\pgfcircdeclarebipolescaled{RF}
-{}
-{\ctikzvalof{bipoles/mstline/height}}
-{mstline}
-{\ctikzvalof{bipoles/mstline/height}}
-{\ctikzvalof{bipoles/mstline/width}}
-{
-    \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
-    \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
-    \pgf at circ@draworfill
-}
-
-%%%%%%%%%%%%%%%%%%%
-%% Block diagrams
-%%%%%%%%%%%%%%%%%%%
-
-%% Draw the two-port fillable box
-\def\pgf at circ@twoportbox{
-    \pgfscope
-        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
-        \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
-        \pgf at circ@draworfill
-    \endpgfscope
-}
-
-%% Generic two port box
-\pgfcircdeclarebipolescaled{blocks}
-{}
-{\ctikzvalof{bipoles/twoport/height}}
-{twoport}
-{\ctikzvalof{bipoles/twoport/height}}
-{\ctikzvalof{bipoles/twoport/width}}
-{
-    \pgf at circ@res at step = \ctikzvalof{bipoles/twoport/width}\pgf at circ@scaled at Rlen
-    \divide \pgf at circ@res at step by 2
-
-    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
-    \pgf at circ@res at other = \pgf at circ@res at left
-    \advance\pgf at circ@res at other by \pgf at circ@res at step
-    \ifpgf at circuit@dashed
-        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
-    \fi
-    % draw outer box
-    \pgf at circ@twoportbox
-    \ifpgf at circuit@inputarrow
-        {
-            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
-            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
-            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
-        }
-    \fi
-
-    % rotate inner symbol
-    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
-    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
-        \pgftransformrotate{270}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
-        \pgftransformrotate{180}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
-        \pgftransformrotate{90}
-    \fi\fi
-
-    % draw inner symbol
-    \pgftext[center,x=0,y=0]{\ctikzvalof{bipoles/twoport/text}}
-
-}
-
-%% twoport split
-\pgfcircdeclarebipolescaled{blocks}
-{}
-{\ctikzvalof{bipoles/twoportsplit/width}}
-{twoportsplit}
-{\ctikzvalof{bipoles/twoportsplit/width}}
-{\ctikzvalof{bipoles/twoportsplit/width}}
-{
-    \pgf at circ@res at step = \ctikzvalof{bipoles/twoportsplit/width}\pgf at circ@scaled at Rlen
-    \divide \pgf at circ@res at step by 2
-
-    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
-    \pgf at circ@res at other = \pgf at circ@res at left
-    \advance\pgf at circ@res at other by \pgf at circ@res at step
-
-    \ifpgf at circuit@dashed
-        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
-    \fi
-
-    % draw outer box
-    \pgf at circ@twoportbox
-
-    \ifpgf at circuit@inputarrow
-        {
-            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
-            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
-            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
-        }
-    \fi
-
-    %get texts
-    \def\pgfcirc at tin{\ctikzvalof{bipoles/twoport/text in}}
-    \def\pgfcirc at tout{\ctikzvalof{bipoles/twoport/text out}}
-
-    % rotate inner symbol
-    \def\texti{\pgfcirc at tin}
-    \def\textii{\pgfcirc at tout}
-    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
-    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
-        \def\texti{\pgfcirc at tout}
-        \def\textii{\pgfcirc at tin}
-        \pgftransformrotate{270}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225  % 134 degree, because >= 135 is not possible
-        \def\texti{\pgfcirc at tout}
-        \def\textii{\pgfcirc at tin}
-        \pgftransformrotate{180}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
-        \pgftransformrotate{90}
-        \def\texti{\pgfcirc at tin}
-        \def\textii{\pgfcirc at tout}
-    \fi\fi
-
-    % draw inner symbol
-    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
-    \pgfsetarrows{-} %never draw arrows
-    \pgfsetlinewidth{\pgfstartlinewidth}
-    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
-    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
-    \pgfusepath{draw}
-
-    \pgftext[center,x=0.45\pgf at circ@res at left,y=0.45\pgf at circ@res at up]{\texti}
-    \pgftext[center,x=0.45\pgf at circ@res at right,y=0.45\pgf at circ@res at down]{\textii}
-}
-
-%% voltage controled oscillator
-\pgfcircdeclarebipolescaled{blocks}
-{}
-{\ctikzvalof{bipoles/vco/width}}
-{vco}
-{\ctikzvalof{bipoles/twoport/width}}
-{\ctikzvalof{bipoles/vco/width}}
-{
-    \pgf at circ@res at step = \ctikzvalof{bipoles/vco/width}\pgf at circ@scaled at Rlen
-    \divide \pgf at circ@res at step by 2
-
-    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
-    \pgf at circ@res at other = \pgf at circ@res at left
-    \advance\pgf at circ@res at other by \pgf at circ@res at step
-
-    \ifpgf at circuit@dashed
-        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
-    \fi
-    % draw circle
-    \pgfscope
-        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
-        \pgfpathcircle{\pgfpoint{0}{0}} {\pgf at circ@res at step}
-        \pgf at circ@draworfill
-    \endpgfscope
-    \ifpgf at circuit@inputarrow
-        {
-            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
-            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
-            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
-        }
-    \fi
-
-    % rotate inner symbol
-    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
-    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
-        \pgftransformrotate{270}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225  % 134 degree, because >= 135 is not possible
-        \pgftransformrotate{180}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
-        \pgftransformrotate{90}
-    \fi\fi
-
-    % draw inner sine waves
-    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
-    \pgfsetlinewidth{\pgfstartlinewidth}
-    \pgfpathmoveto{\pgfpoint{-.5\pgf at circ@res at step}{0\pgf at circ@res at step}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfusepath{draw}
-}
-
-%% bandpass filter
-\pgfcircdeclarebipolescaled{blocks}
-{}
-{\ctikzvalof{bipoles/bandpass/width}}
-{bandpass}
-{\ctikzvalof{bipoles/bandpass/width}}
-{\ctikzvalof{bipoles/bandpass/width}}
-{
-
-    \pgf at circ@res at step = \ctikzvalof{bipoles/bandpass/width}\pgf at circ@scaled at Rlen
-    \divide \pgf at circ@res at step by 2
-
-    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
-    \pgf at circ@res at other = \pgf at circ@res at left
-    \advance\pgf at circ@res at other by \pgf at circ@res at step
-
-    \ifpgf at circuit@dashed
-        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
-    \fi
-
-    % draw outer box
-    \pgf at circ@twoportbox
-
-    \ifpgf at circuit@inputarrow
-        {
-            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
-            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
-            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
-        }
-    \fi
-
-    % rotate inner symbol
-    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
-    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
-        \pgftransformrotate{270}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225  % 134 degree, because >= 135 is not possible
-        \pgftransformrotate{180}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
-        \pgftransformrotate{90}
-    \fi\fi
-
-    % draw inner symbol
-    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
-    \pgfsetarrows{-} %never draw arrows
-    \pgfsetlinewidth{\pgfstartlinewidth}
-    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{0.5\pgf at circ@res at step}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfusepath{draw}
-    \pgfpathmoveto{\pgfpoint{-0.15\pgf at circ@res at step}{0.35\pgf at circ@res at step}}
-    \pgfpathlineto{\pgfpoint{0.15\pgf at circ@res at step}{0.65\pgf at circ@res at step}}
-    \pgfusepath{draw}
-
-    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{0}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfusepath{draw}
-
-    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{-0.5\pgf at circ@res at step}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfusepath{draw}
-    \pgfpathmoveto{\pgfpoint{-0.15\pgf at circ@res at step}{-0.65\pgf at circ@res at step}}
-    \pgfpathlineto{\pgfpoint{0.15\pgf at circ@res at step}{-0.35\pgf at circ@res at step}}
-    \pgfusepath{draw}
-}
-
-%% bandstop filter
-\pgfcircdeclarebipolescaled{blocks}
-{}
-{\ctikzvalof{bipoles/bandstop/width}}
-{bandstop}
-{\ctikzvalof{bipoles/bandstop/width}}
-{\ctikzvalof{bipoles/bandstop/width}}
-{
-    \pgf at circ@res at step = \ctikzvalof{bipoles/bandstop/width}\pgf at circ@scaled at Rlen
-    \divide \pgf at circ@res at step by 2
-
-    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
-    \pgf at circ@res at other = \pgf at circ@res at left
-    \advance\pgf at circ@res at other by \pgf at circ@res at step
-
-    \ifpgf at circuit@dashed
-        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
-    \fi
-
-    % draw outer box
-    \pgf at circ@twoportbox
-
-    \ifpgf at circuit@inputarrow
-        {
-            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
-            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
-            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
-        }
-    \fi
-
-    % rotate inner symbol
-    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
-    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
-        \pgftransformrotate{270}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225% 134 degree, because >= 135 is not possible
-        \pgftransformrotate{180}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
-        \pgftransformrotate{90}
-    \fi\fi
-
-    % draw inner symbol
-    \pgfsetdash{}{0pt}% always draw solid line for inner symbol
-    \pgfsetarrows{-}%never draw arrows
-    \pgfsetlinewidth{\pgfstartlinewidth}
-    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{0.5\pgf at circ@res at step}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfusepath{draw}
-
-    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{0}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfusepath{draw}
-    \pgfpathmoveto{\pgfpoint{-0.15\pgf at circ@res at step}{-0.15\pgf at circ@res at step}}
-    \pgfpathlineto{\pgfpoint{0.15\pgf at circ@res at step}{0.15\pgf at circ@res at step}}
-    \pgfusepath{draw}
-
-    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{-0.5\pgf at circ@res at step}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfusepath{draw}
-}
-
-%% highpass filter
-\pgfcircdeclarebipolescaled{blocks}
-{}
-{\ctikzvalof{bipoles/highpass/width}}
-{highpass}
-{\ctikzvalof{bipoles/highpass/width}}
-{\ctikzvalof{bipoles/highpass/width}}
-{
-    \pgf at circ@res at step = \ctikzvalof{bipoles/highpass/width}\pgf at circ@scaled at Rlen
-    \divide \pgf at circ@res at step by 2
-
-    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
-    \pgf at circ@res at other = \pgf at circ@res at left
-    \advance\pgf at circ@res at other by \pgf at circ@res at step
-
-    \ifpgf at circuit@dashed
-        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
-    \fi
-
-    % draw outer box
-    \pgf at circ@twoportbox
-
-    \ifpgf at circuit@inputarrow
-        {
-            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
-            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
-            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
-        }
-    \fi
-
-    % rotate inner symbol
-    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
-    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
-        \pgftransformrotate{270}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225  % 134 degree, because >= 135 is not possible
-        \pgftransformrotate{180}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
-        \pgftransformrotate{90}
-    \fi\fi
-
-    % draw inner symbol
-    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
-    \pgfsetarrows{-} %never draw arrows
-    \pgfsetlinewidth{\pgfstartlinewidth}
-    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{0.5\pgf at circ@res at step}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfusepath{draw}
-
-    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{0}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfusepath{draw}
-    \pgfpathmoveto{\pgfpoint{-0.15\pgf at circ@res at step}{-0.15\pgf at circ@res at step}}
-    \pgfpathlineto{\pgfpoint{0.15\pgf at circ@res at step}{0.15\pgf at circ@res at step}}
-    \pgfusepath{draw}
-
-    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{-0.5\pgf at circ@res at step}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfusepath{draw}
-    \pgfpathmoveto{\pgfpoint{-0.15\pgf at circ@res at step}{-0.65\pgf at circ@res at step}}
-    \pgfpathlineto{\pgfpoint{0.15\pgf at circ@res at step}{-0.35\pgf at circ@res at step}}
-    \pgfusepath{draw}
-}
-
-%% lowpass filter
-\pgfcircdeclarebipolescaled{blocks}
-{}
-{\ctikzvalof{bipoles/lowpass/width}}
-{lowpass}
-{\ctikzvalof{bipoles/lowpass/width}}
-{\ctikzvalof{bipoles/lowpass/width}}
-{
-    \pgf at circ@res at step = \ctikzvalof{bipoles/lowpass/width}\pgf at circ@scaled at Rlen
-    \divide \pgf at circ@res at step by 2
-
-    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
-    \pgf at circ@res at other = \pgf at circ@res at left
-    \advance\pgf at circ@res at other by \pgf at circ@res at step
-
-    \ifpgf at circuit@dashed
-        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
-    \fi
-
-    % draw outer box
-    \pgf at circ@twoportbox
-
-    \ifpgf at circuit@inputarrow
-        {
-            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
-            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
-            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
-        }
-    \fi
-
-    % rotate inner symbol
-    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
-    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
-        \pgftransformrotate{270}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225  % 134 degree, because >= 135 is not possible
-        \pgftransformrotate{180}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
-        \pgftransformrotate{90}
-    \fi\fi
-
-    % draw inner symbol
-    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
-    \pgfsetarrows{-} %never draw arrows
-    \pgfsetlinewidth{\pgfstartlinewidth}
-    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{0.5\pgf at circ@res at step}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfusepath{draw}
-    \pgfpathmoveto{\pgfpoint{-0.15\pgf at circ@res at step}{0.35\pgf at circ@res at step}}
-    \pgfpathlineto{\pgfpoint{0.15\pgf at circ@res at step}{0.65\pgf at circ@res at step}}
-    \pgfusepath{draw}
-
-    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{0}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfusepath{draw}
-    \pgfpathmoveto{\pgfpoint{-0.15\pgf at circ@res at step}{-0.15\pgf at circ@res at step}}
-    \pgfpathlineto{\pgfpoint{0.15\pgf at circ@res at step}{0.15\pgf at circ@res at step}}
-    \pgfusepath{draw}
-
-    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{-0.5\pgf at circ@res at step}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfusepath{draw}
-}
-
-%% allpass filter
-\pgfcircdeclarebipolescaled{blocks}
-{}
-{\ctikzvalof{bipoles/allpass/width}}
-{allpass}
-{\ctikzvalof{bipoles/allpass/width}}
-{\ctikzvalof{bipoles/allpass/width}}
-{
-    \pgf at circ@res at step = \ctikzvalof{bipoles/allpass/width}\pgf at circ@scaled at Rlen
-    \divide \pgf at circ@res at step by 2
-
-    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
-    \pgf at circ@res at other = \pgf at circ@res at left
-    \advance\pgf at circ@res at other by \pgf at circ@res at step
-
-    \ifpgf at circuit@dashed
-        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
-    \fi
-
-    % draw outer box
-    \pgf at circ@twoportbox
-
-    \ifpgf at circuit@inputarrow
-        {
-            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
-            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
-            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
-        }
-    \fi
-
-    % rotate inner symbol
-    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
-    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
-        \pgftransformrotate{270}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225  % 134 degree, because >= 135 is not possible
-        \pgftransformrotate{180}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
-        \pgftransformrotate{90}
-    \fi\fi
-
-    % draw inner symbol
-    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
-    \pgfsetarrows{-} %never draw arrows
-    \pgfsetlinewidth{\pgfstartlinewidth}
-    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{0.5\pgf at circ@res at step}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfusepath{draw}
-
-    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{0}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfusepath{draw}
-
-    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{-0.5\pgf at circ@res at step}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathsine{\pgfpoint{.25\pgf at circ@res at step}{-.25\pgf at circ@res at step}}
-    \pgfpathcosine{\pgfpoint{.25\pgf at circ@res at step}{.25\pgf at circ@res at step}}
-    \pgfusepath{draw}
-}
-
-%% ADC
-\pgfcircdeclarebipolescaled{blocks}
-{}
-{\ctikzvalof{bipoles/adc/width}}
-{adc}
-{\ctikzvalof{bipoles/adc/width}}
-{\ctikzvalof{bipoles/adc/width}}
-{
-    \pgf at circ@res at step = \ctikzvalof{bipoles/adc/width}\pgf at circ@scaled at Rlen
-    \divide \pgf at circ@res at step by 2
-
-    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
-    \pgf at circ@res at other = \pgf at circ@res at left
-    \advance\pgf at circ@res at other by \pgf at circ@res at step
-
-    \ifpgf at circuit@dashed
-        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
-    \fi
-
-    % draw outer box
-    \pgf at circ@twoportbox
-
-    \ifpgf at circuit@inputarrow
-        {
-            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
-            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
-            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
-        }
-    \fi
-
-    % rotate inner symbol
-    \def\texti{A}
-    \def\textii{D}
-    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
-    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
-        \def\texti{D}
-        \def\textii{A}
-        \pgftransformrotate{270}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225  % 134 degree, because >= 135 is not possible
-        \def\texti{D}
-        \def\textii{A}
-        \pgftransformrotate{180}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
-        \pgftransformrotate{90}
-        \def\texti{A}
-        \def\textii{D}
-    \fi\fi
-
-    % draw inner symbol
-    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
-    \pgfsetarrows{-} %never draw arrows
-    \pgfsetlinewidth{\pgfstartlinewidth}
-    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
-    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
-    \pgfusepath{draw}
-
-    \pgftext[center,x=0.45\pgf at circ@res at left,y=0.45\pgf at circ@res at up]{\textsf{\texti}}
-    \pgftext[center,x=0.45\pgf at circ@res at right,y=0.45\pgf at circ@res at down]{\textsf{\textii}}
-}
-
-%% DAC
-\pgfcircdeclarebipolescaled{blocks}
-{}
-{\ctikzvalof{bipoles/dac/width}}
-{dac}
-{\ctikzvalof{bipoles/dac/width}}
-{\ctikzvalof{bipoles/dac/width}}
-{
-    \pgf at circ@res at step = \ctikzvalof{bipoles/dac/width}\pgf at circ@scaled at Rlen
-    \divide \pgf at circ@res at step by 2
-
-    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
-    \pgf at circ@res at other = \pgf at circ@res at left
-    \advance\pgf at circ@res at other by \pgf at circ@res at step
-
-    \ifpgf at circuit@dashed
-        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
-    \fi
-
-    % draw outer box
-    \pgf at circ@twoportbox
-
-    \ifpgf at circuit@inputarrow
-        {
-            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
-            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
-            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
-        }
-    \fi
-
-    % rotate inner symbol
-    \def\texti{D}
-    \def\textii{A}
-    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
-    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
-        \def\texti{A}
-        \def\textii{D}
-        \pgftransformrotate{270}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225  % 134 degree, because >= 135 is not possible
-        \def\texti{A}
-        \def\textii{D}
-        \pgftransformrotate{180}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
-        \pgftransformrotate{90}
-        \def\texti{D}
-        \def\textii{A}
-    \fi\fi
-
-    % draw inner symbol
-    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
-    \pgfsetarrows{-} %never draw arrows
-    \pgfsetlinewidth{\pgfstartlinewidth}
-    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
-    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
-    \pgfusepath{draw}
-
-    \pgftext[center,x=0.45\pgf at circ@res at left,y=0.45\pgf at circ@res at up]{\textsf{\texti}}
-    \pgftext[center,x=0.45\pgf at circ@res at right,y=0.45\pgf at circ@res at down]{\textsf{\textii}}
-}
-
-%% DSP
-\pgfcircdeclarebipolescaled{blocks}
-{}
-{\ctikzvalof{bipoles/dsp/width}}
-{dsp}
-{\ctikzvalof{bipoles/dsp/width}}
-{\ctikzvalof{bipoles/dsp/width}}
-{
-    \pgf at circ@res at step = \ctikzvalof{bipoles/dsp/width}\pgf at circ@scaled at Rlen
-    \divide \pgf at circ@res at step by 2
-
-    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
-    \pgf at circ@res at other = \pgf at circ@res at left
-    \advance\pgf at circ@res at other by \pgf at circ@res at step
-
-    \ifpgf at circuit@dashed
-        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
-    \fi
-
-    % draw outer box
-    \pgf at circ@twoportbox
-
-    \ifpgf at circuit@inputarrow
-        {
-            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
-            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
-            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
-        }
-    \fi
-
-    % rotate inner symbol
-    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
-    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
-        \pgftransformrotate{270}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
-        \pgftransformrotate{180}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
-        \pgftransformrotate{90}
-    \fi\fi
-
-    % draw inner symbol
-    \pgftext[center,x=0,y=0]{\textsf{DSP}}
-}
-
-%% FFT
-\pgfcircdeclarebipolescaled{blocks}
-{}
-{\ctikzvalof{bipoles/fft/width}}
-{fft}
-{\ctikzvalof{bipoles/fft/width}}
-{\ctikzvalof{bipoles/fft/width}}
-{
-    \pgf at circ@res at step = \ctikzvalof{bipoles/fft/width}\pgf at circ@scaled at Rlen
-    \divide \pgf at circ@res at step by 2
-
-    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
-    \pgf at circ@res at other = \pgf at circ@res at left
-    \advance\pgf at circ@res at other by \pgf at circ@res at step
-
-    \ifpgf at circuit@dashed
-        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
-    \fi
-
-    % draw outer box
-    \pgf at circ@twoportbox
-
-    \ifpgf at circuit@inputarrow
-        {
-            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
-            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
-            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
-        }
-    \fi
-
-    % rotate inner symbol
-    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
-    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
-        \pgftransformrotate{270}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
-        \pgftransformrotate{180}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
-        \pgftransformrotate{90}
-    \fi\fi
-
-    % draw inner symbol
-    \pgftext[center,x=0,y=0]{\textsf{FFT}}
-}
-
-%% Amplifier
-\pgfcircdeclarebipolescaled{blocks}
-{}
-{
-    \ifpgf at circuit@boxed
-        \ctikzvalof{bipoles/twoport/width}
-    \else
-        \ctikzvalof{bipoles/amp/width}
-    \fi
-}
-{amp}
-{
-    \ifpgf at circuit@boxed
-        \ctikzvalof{bipoles/twoport/width}
-    \else
-        \ctikzvalof{bipoles/amp/width}
-    \fi
-}
-{
-    \ifpgf at circuit@boxed
-        \ctikzvalof{bipoles/twoport/width}
-    \else
-        \ctikzvalof{bipoles/amp/width}
-    \fi
-}
-{
-    \pgf at circ@res at step = \ctikzvalof{bipoles/amp/width}\pgf at circ@scaled at Rlen
-
-    \ifpgf at circuit@dashed
-        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
-    \fi
-
-    % draw outer box
-    \ifpgf at circuit@boxed
-        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
-        \pgfnode{blockbox}{center}{}{pgf at box}{\pgfusepath{draw}}
-        \pgf at circ@draworfill
-    \fi
-
-    % draw input arrow
-    \ifpgf at circuit@inputarrow
-        {
-            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
-            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
-            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
-        }
-    \fi
-
-    \ifpgf at circuit@boxed
-        \pgfsetlinewidth{\pgfstartlinewidth}
-        \pgfsetdash{}{0pt}	% draw solid line for inner symbol if no box is drawn
-        \pgf at circ@res at step=.7\pgf at circ@res at step % scale amp symbol when inside a box
-    \else
-        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
-    \fi
-
-    \pgfsetarrows{-} %never draw arrows
-
-    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{0.55\pgf at circ@res at step}}
-    \pgfpathlineto{\pgfpoint{0.5\pgf at circ@res at step}{0}}
-    \pgfpathlineto{\pgfpoint{-0.5\pgf at circ@res at step}{-0.55\pgf at circ@res at step}}
-
-    \pgfpathclose
-    \pgf at circ@draworfill
-
-    % draw inner text
-    \pgftext[center,x=-0.12\pgf at circ@res at step,y=0]{\ctikzvalof{bipoles/twoport/text}}
-}
-
-
-%% variable amplifier
-\pgfcircdeclarebipolescaled{blocks}
-{}
-{
-    \ifpgf at circuit@boxed
-        \ctikzvalof{bipoles/twoport/width}
-    \else
-        \ctikzvalof{bipoles/amp/width}
-    \fi
-}
-{vamp}
-{
-    \ifpgf at circuit@boxed
-        \ctikzvalof{bipoles/twoport/width}
-    \else
-        \ctikzvalof{bipoles/amp/width}
-    \fi
-}
-{
-    \ifpgf at circuit@boxed
-        \ctikzvalof{bipoles/twoport/width}
-    \else
-        \ctikzvalof{bipoles/amp/width}
-    \fi
-}
-{
-    \pgf at circ@res at step = \ctikzvalof{bipoles/amp/width}\pgf at circ@scaled at Rlen
-
-    \ifpgf at circuit@dashed
-        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
-    \fi
-
-    % draw outer box
-    \ifpgf at circuit@boxed
-        \pgfnode{blockbox}{center}{}{pgf at box}{\pgfusepath{draw}}
-    \fi
-
-    % draw input arrow
-    \ifpgf at circuit@inputarrow
-        {
-            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
-            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
-            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
-        }
-    \fi
-
-    \ifpgf at circuit@boxed
-        \pgfsetlinewidth{\pgfstartlinewidth}
-        \pgfsetdash{}{0pt}	% draw solid line for inner symbol if no box is drawn
-        \pgf at circ@res at step=.7\pgf at circ@res at step % scale amp symbol when inside a box
-    \else
-        \pgf at circ@setlinewidth{bipoles}{\pgfstartlinewidth}
-    \fi
-
-
-    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
-    \pgfsetarrows{-} %never draw arrows
-
-    \pgfpathmoveto{\pgfpoint{-0.5\pgf at circ@res at step}{0.55\pgf at circ@res at step}}
-    \pgfpathlineto{\pgfpoint{0.5\pgf at circ@res at step}{0}}
-    \pgfpathlineto{\pgfpoint{-0.5\pgf at circ@res at step}{-0.55\pgf at circ@res at step}}
-
-    \pgfpathclose
-    \pgf at circ@draworfill
-
-    % draw inner text
-    \pgftext[center,x=-0.12\pgf at circ@res at step,y=0]{\ctikzvalof{bipoles/twoport/text}}
-
-    % draw arrow
-    \pgfsetlinewidth{\pgfstartlinewidth}
-    \pgfsetarrowsend{latex}
-    \pgfpathmoveto{\pgfpoint{-0.8\pgf at circ@res at step}{-0.5\pgf at circ@res at step}}
-    \pgfpathlineto{\pgfpoint{0.6\pgf at circ@res at step}{0.6\pgf at circ@res at step}}
-    \pgfusepath{draw}
-}
-
-%% pi attenuator
-\pgfcircdeclarebipolescaled{blocks}
-{}
-{\ctikzvalof{bipoles/piattenuator/width}}
-{piattenuator}
-{\ctikzvalof{bipoles/piattenuator/width}}
-{\ctikzvalof{bipoles/piattenuator/width}}
-{
-    \pgf at circ@res at step = \ctikzvalof{bipoles/piattenuator/width}\pgf at circ@scaled at Rlen
-    \divide \pgf at circ@res at step by 2
-
-    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
-    \pgf at circ@res at other = \pgf at circ@res at left
-    \advance\pgf at circ@res at other by \pgf at circ@res at step
-
-    \ifpgf at circuit@dashed
-        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
-    \fi
-
-    % draw outer box
-    \pgf at circ@twoportbox
-
-    \ifpgf at circuit@inputarrow
-        {
-            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
-            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
-            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
-        }
-    \fi
-
-    % rotate inner symbol
-    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
-    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
-        \pgftransformrotate{270}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
-        \pgftransformrotate{90}
-    \fi\fi
-
-    % draw inner symbol
-    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
-    \pgfsetarrows{-} %never draw arrows
-    \pgfsetlinewidth{\pgfstartlinewidth}
-    \pgfpathmoveto{\pgfpoint{0.4\pgf at circ@res at left}{0.4\pgf at circ@res at down}}
-    \pgfpathlineto{\pgfpoint{0.4\pgf at circ@res at left}{0.4\pgf at circ@res at up}}
-    \pgfusepath{draw}
-    \pgfpathmoveto{\pgfpoint{0.4\pgf at circ@res at right}{0.4\pgf at circ@res at down}}
-    \pgfpathlineto{\pgfpoint{0.4\pgf at circ@res at right}{0.4\pgf at circ@res at up}}
-    \pgfusepath{draw}
-    \pgfpathmoveto{\pgfpoint{0.6\pgf at circ@res at left}{0.4\pgf at circ@res at up}}
-    \pgfpathlineto{\pgfpoint{0.6\pgf at circ@res at right}{0.4\pgf at circ@res at up}}
-    \pgfusepath{draw}
-}
-
-%% variable pi attenuator
-\pgfcircdeclarebipolescaled{blocks}
-{}
-{\ctikzvalof{bipoles/vpiattenuator/width}}
-{vpiattenuator}
-{\ctikzvalof{bipoles/vpiattenuator/width}}
-{\ctikzvalof{bipoles/vpiattenuator/width}}
-{
-    \pgf at circ@res at step = \ctikzvalof{bipoles/vpiattenuator/width}\pgf at circ@scaled at Rlen
-    \divide \pgf at circ@res at step by 2
-
-    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
-    \pgf at circ@res at other = \pgf at circ@res at left
-    \advance\pgf at circ@res at other by \pgf at circ@res at step
-
-    \ifpgf at circuit@dashed
-        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
-    \fi
-
-    % draw outer box
-    \pgf at circ@twoportbox
-
-    \ifpgf at circuit@inputarrow
-        {
-            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
-            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
-            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
-        }
-    \fi
-
-    % rotate inner symbol
-    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
-    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
-        \pgftransformrotate{270}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
-        \pgftransformrotate{90}
-    \fi\fi
-
-    % draw inner symbol
-    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
-    \pgfsetarrows{-} %never draw arrows
-    \pgfsetlinewidth{\pgfstartlinewidth}
-    \pgfpathmoveto{\pgfpoint{0.4\pgf at circ@res at left}{0.4\pgf at circ@res at down}}
-    \pgfpathlineto{\pgfpoint{0.4\pgf at circ@res at left}{0.4\pgf at circ@res at up}}
-    \pgfusepath{draw}
-    \pgfpathmoveto{\pgfpoint{0.4\pgf at circ@res at right}{0.4\pgf at circ@res at down}}
-    \pgfpathlineto{\pgfpoint{0.4\pgf at circ@res at right}{0.4\pgf at circ@res at up}}
-    \pgfusepath{draw}
-    \pgfpathmoveto{\pgfpoint{0.6\pgf at circ@res at left}{0.4\pgf at circ@res at up}}
-    \pgfpathlineto{\pgfpoint{0.6\pgf at circ@res at right}{0.4\pgf at circ@res at up}}
-    \pgfusepath{draw}
-
-    \pgfsetarrowsend{latex}
-    \pgfpathmoveto{\pgfpoint{0.7\pgf at circ@res at left}{0.5\pgf at circ@res at down}}
-    \pgfpathlineto{\pgfpoint{0.7\pgf at circ@res at right}{0.8\pgf at circ@res at up}}
-    \pgfusepath{draw}
-}
-
-%% T attenuator
-\pgfcircdeclarebipolescaled{blocks}
-{}
-{\ctikzvalof{bipoles/tattenuator/width}}
-{tattenuator}
-{\ctikzvalof{bipoles/tattenuator/width}}
-{\ctikzvalof{bipoles/tattenuator/width}}
-{
-    \pgf at circ@res at step = \ctikzvalof{bipoles/tattenuator/width}\pgf at circ@scaled at Rlen
-    \divide \pgf at circ@res at step by 2
-
-    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
-    \pgf at circ@res at other = \pgf at circ@res at left
-    \advance\pgf at circ@res at other by \pgf at circ@res at step
-
-    \ifpgf at circuit@dashed
-        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
-    \fi
-
-    % draw outer box
-    \pgf at circ@twoportbox
-
-    \ifpgf at circuit@inputarrow
-        {
-            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
-            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
-            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
-        }
-    \fi
-
-    % rotate inner symbol
-    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
-    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
-        \pgftransformrotate{270}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
-        \pgftransformrotate{90}
-    \fi\fi
-
-    % draw inner symbol
-    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
-    \pgfsetarrows{-} %never draw arrows
-    \pgfsetlinewidth{\pgfstartlinewidth}
-    \pgfpathmoveto{\pgfpoint{0pt}{0.4\pgf at circ@res at down}}
-    \pgfpathlineto{\pgfpoint{0pt}{0.4\pgf at circ@res at up}}
-    \pgfusepath{draw}
-    \pgfpathmoveto{\pgfpoint{0.6\pgf at circ@res at left}{0.4\pgf at circ@res at up}}
-    \pgfpathlineto{\pgfpoint{0.6\pgf at circ@res at right}{0.4\pgf at circ@res at up}}
-    \pgfusepath{draw}
-}
-
-%% variable T attenuator
-\pgfcircdeclarebipolescaled{blocks}
-{}
-{\ctikzvalof{bipoles/vtattenuator/width}}
-{vtattenuator}
-{\ctikzvalof{bipoles/vtattenuator/width}}
-{\ctikzvalof{bipoles/vtattenuator/width}}
-{
-    \pgf at circ@res at step = \ctikzvalof{bipoles/vtattenuator/width}\pgf at circ@scaled at Rlen
-    \divide \pgf at circ@res at step by 2
-
-    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
-    \pgf at circ@res at other = \pgf at circ@res at left
-    \advance\pgf at circ@res at other by \pgf at circ@res at step
-
-    \ifpgf at circuit@dashed
-        \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
-    \fi
-
-    % draw outer box
-    \pgf at circ@twoportbox
-
-    \ifpgf at circuit@inputarrow
-        {
-            \advance \pgf at circ@res at left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
-            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
-            \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
-        }
-    \fi
-
-    % rotate inner symbol
-    \def\pgfcircmathresult{\expandafter\pgf at circ@stripdecimals\pgf at circ@direction\pgf at nil}
-    \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
-        \pgftransformrotate{270}
-    \fi\fi
-    \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
-        \pgftransformrotate{90}
-    \fi\fi
-
-    % draw inner symbol
-    \pgfsetdash{}{0pt}	% always draw solid line for inner symbol
-    \pgfsetarrows{-} %never draw arrows
-    \pgfsetlinewidth{\pgfstartlinewidth}
-    \pgfpathmoveto{\pgfpoint{0pt}{0.4\pgf at circ@res at down}}
-    \pgfpathlineto{\pgfpoint{0pt}{0.4\pgf at circ@res at up}}
-    \pgfusepath{draw}
-    \pgfpathmoveto{\pgfpoint{0.6\pgf at circ@res at left}{0.4\pgf at circ@res at up}}
-    \pgfpathlineto{\pgfpoint{0.6\pgf at circ@res at right}{0.4\pgf at circ@res at up}}
-    \pgfusepath{draw}
-
-    \pgfsetarrowsend{latex}
-    \pgfpathmoveto{\pgfpoint{0.7\pgf at circ@res at left}{0.5\pgf at circ@res at down}}

@@ Diff output truncated at 1234567 characters. @@


More information about the tex-live-commits mailing list.