texlive[51387] Master/texmf-dist: circuitikz (16jun19)
commits+karl at tug.org
commits+karl at tug.org
Mon Jun 17 00:04:22 CEST 2019
Revision: 51387
http://tug.org/svn/texlive?view=revision&revision=51387
Author: karl
Date: 2019-06-17 00:04:20 +0200 (Mon, 17 Jun 2019)
Log Message:
-----------
circuitikz (16jun19)
Modified Paths:
--------------
trunk/Master/texmf-dist/doc/context/third/circuitikz/circuitikz-context.pdf
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/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/latex/circuitikz/circuitikz.sty
Added Paths:
-----------
trunk/Master/texmf-dist/tex/latex/circuitikz/circuitikz-0.4.sty
trunk/Master/texmf-dist/tex/latex/circuitikz/circuitikz-0.6.sty
trunk/Master/texmf-dist/tex/latex/circuitikz/circuitikz-0.7.sty
trunk/Master/texmf-dist/tex/latex/circuitikz/circuitikz-0.8.3.sty
Modified: trunk/Master/texmf-dist/doc/context/third/circuitikz/circuitikz-context.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/generic/circuitikz/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/generic/circuitikz/CHANGELOG.md 2019-06-15 23:38:18 UTC (rev 51386)
+++ trunk/Master/texmf-dist/doc/generic/circuitikz/CHANGELOG.md 2019-06-16 22:04:20 UTC (rev 51387)
@@ -1,19 +1,33 @@
<!--- 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 0.9.1
+ - Added old LaTeX versions for 0.8.3, 0.7, 0.6 and 0.4
+ - Added the option to have inline transformers and gyrators
+ - Added rotary switches
+ - Added more configurable bipole nodes (connectors) and more shapes
+ - Added 7-segment displays
+ - Added vacuum tubes by J. op den Brouw
+ - Made the open shape of dcisources configurable
+ - Made the arrows on vcc and vee configurable
+ - Fixed anchors of diamondpole nodes
+ - Fixed a bug (#205) about unstable anchors in the chip components
+ - Fixed a regression in label placement for some values of scaling
+ - Fixed problems with cute switches anchors
+
* Version 0.9.0 (2019-05-10)
- Added Romano Giannetti as contributor
- Added a CONTRIBUTING file
- - Added options for solving the voltage direction problems.
+ - Added options for solving the voltage direction problems.
- Adjusted ground symbols to better match ISO standard, added new symbols
- - Added new sources (cute european versions, noise sources)
+ - Added new sources (cute european versions, noise sources)
- Added new types of amplifiers, and option to flip inputs and outputs
- - Added bidirectional diodes (diac) thanks to Andre Lucas Chinazzo
+ - Added bidirectional diodes (diac) thanks to Andre Lucas Chinazzo
- Added L,R,C sensors (with european, american and cute variants)
- Added stacked labels (thanks to the original work by Claudio Fiandrino)
- Make the position of voltage symbols adjustable
- Make the position of arrows in FETs and BJTs adjustable
- - Added chips (DIP, QFP) with a generic number of pins
+ - Added chips (DIP, QFP) with a generic number of pins
- Added special anchors for transformers (and fixed the wrong center anchor)
- Changed the logical port implementation to multiple inputs (thanks to John Kormylo) with border anchors.
- Added several symbols: bulb, new switches, new antennas, loudspeaker, microphone, coaxial connector, viscoelastic element
@@ -26,8 +40,8 @@
- Fixed a bug about straightlabels (thanks to @fotesan)
- Fixed labels spacing so that they are independent on scale factor
- Fixed the position of text labels in amplifiers
-
-* Version 0.8.3 (2017-05-28)
+
+* Version 0.8.3 (2017-05-28)
- Removed unwanted lines at to-paths if the starting point is a node without a explicit anchor.
- Fixed scaling option, now all parts are scaled by bipoles/length
- Surge arrester appears no more if a to path is used without []-options
@@ -37,7 +51,7 @@
- Adjustable default distance for straight-voltages: 'bipoles/voltage/straight label distance'
- Added Symbol for bandstop filter
- New annotation type to show flows using f=... like currents, can be used for thermal, power or current flows
-
+
* Version 0.8.2 (2017-05-01)
- Fixes pgfkeys error using alternatively specified mixed colors(see pgfplots manual section "4.7.5 Colors")
- Added new switches "ncs" and "nos"
@@ -47,13 +61,13 @@
- current label "i=" can now be used independent of the regular label "l=" at current sources
- rewrite of current arrow placement. Current arrows can now also be rotated on zero-length paths
- New DIN/EN compliant operational amplifier symbol "en amp"
-
+
* Version 0.8.1 (2017-03-25)
- Fixed unwanted line through components if target coordinate is a name of a node
- Fixed position of labels with subscript letters.
- Absolute distance calculation in terms of ex at rotated labels
- Fixed label for transistor paths (no label drawn)
-
+
* Version 0.8 (2017-03-08)
- Allow use of voltage label at a [short]
- Correct line joins between path components (to[...])
@@ -123,7 +137,7 @@
- added isfet
- added noiseless, protective, chassis, signal and reference grounds (Luigi «Liverpool»)
-* Version 0.2.4
+* Version 0.2.4
- added square voltage source (contributed by Alistair Kwan)
- added buffer and plain amplifier (contributed by Danilo Piazzalunga)
- added squid and barrier (contributed by Cor Molenaar)
@@ -142,7 +156,7 @@
- Variable capacitor
- polarized capacitor
- ConTeXt support (read the manual!)
- - nfet, nigfete, nigfetd, pfet, pigfete, pigfetd (contribution of Clemens Helfmeier and Theodor
+ - nfet, nigfete, nigfetd, pfet, pigfete, pigfetd (contribution of Clemens Helfmeier and Theodor
Borsche)
- njfet, pjfet (contribution of Danilo Piazzalunga)
- pigbt, nigbt
@@ -157,7 +171,7 @@
- new placing option for some tripoles (mostly transistors)
- mirror path style
-
+
* Version 0.2.2 - 20090520
- Added the shape for lamps.
- Added options \texttt{europeanresistor}, \texttt{europeaninductor}, \texttt{americanresistor} and \texttt{americaninductor}, with corresponding styles.
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 2019-06-15 23:38:18 UTC (rev 51386)
+++ trunk/Master/texmf-dist/doc/latex/circuitikz/changelog.tex 2019-06-16 22:04:20 UTC (rev 51387)
@@ -6,6 +6,36 @@
\begin{itemize}
\tightlist
\item
+ Version 0.9.1
+
+ \begin{itemize}
+ \tightlist
+ \item
+ Added old LaTeX versions for 0.8.3, 0.7, 0.6 and 0.4
+ \item
+ Added the option to have inline transformers and gyrators
+ \item
+ Added rotary switches
+ \item
+ Added more configurable bipole nodes (connectors) and more shapes
+ \item
+ Added 7-segment displays
+ \item
+ Added vacuum tubes by J. op den Brouw
+ \item
+ Made the open shape of dcisources configurable
+ \item
+ Made the arrows on vcc and vee configurable
+ \item
+ Fixed anchors of diamondpole nodes
+ \item
+ Fixed a bug (\#205) about unstable anchors in the chip components
+ \item
+ Fixed a regression in label placement for some values of scaling
+ \item
+ Fixed problems with cute switches anchors
+ \end{itemize}
+\item
Version 0.9.0 (2019-05-10)
\begin{itemize}
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 2019-06-15 23:38:18 UTC (rev 51386)
+++ trunk/Master/texmf-dist/doc/latex/circuitikz/circuitikzmanual.tex 2019-06-16 22:04:20 UTC (rev 51387)
@@ -6,18 +6,23 @@
% !TeX encoding = utf8
\documentclass[a4paper, titlepage]{article}
-\usepackage{a4wide} %smaller borders
+\usepackage{a4wide} % smaller borders
\usepackage{titling}
\def\modern{
\usepackage{fontspec}
- \defaultfontfeatures{Ligatures=TeX, Numbers=OldStyle,Mapping=tex-text ,SmallCapsFeatures={LetterSpace=8, Numbers=OldStyle}}
- %\setmainfont{Gentium Book Basic}
+ \defaultfontfeatures{
+ Ligatures=TeX,
+ Numbers=OldStyle,
+ Mapping=tex-text,
+ SmallCapsFeatures={LetterSpace=8, Numbers=OldStyle}
+ }
+ % \setmainfont{Gentium Book Basic}
}
-%do not split this line in more lines, otherwise "make git-manual" will show the wrong version
+% do not split this line in more lines, otherwise "make git-manual" will show the wrong version
\usepackage[siunitx, RPvoltages]{circuitikz}
-% Let this being the same as the chosen voltage direction for coherence
+% Let this be the same as the chosen voltage direction for coherence
\def\chosenvoltoption{RPvoltages}
\usepackage{ifxetex,ifluatex}
@@ -30,10 +35,10 @@
% pdflatex
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
- %\usepackage{babel}
+ % \usepackage{babel}
\fi
\fi
-\def\tightlist{} %needed for latest pandoc-versions(pandoc used for including changelog)
+\def\tightlist{} % needed for latest pandoc-versions(pandoc used for including changelog)
\usepackage{microtype}
\sisetup{load=derived} % loading \siemens
@@ -46,10 +51,21 @@
\let\SX at Info=\relax % silence showexpl a bit...
\makeatother
%
-\lstset{pos=l,width=-99pt, overhang=0pt,hsep=\columnsep,vsep=\bigskipamount,
- rframe=single,numbers=left,numberstyle=\tiny,numbersep=.3em, xleftmargin=1em,
- columns=flexible, language=[LaTeX]TEX,breaklines=true,
- basicstyle=\normalsize\ttfamily,tabsize=3}
+\lstset{
+ pos=l,
+ width=-99pt,
+ overhang=0pt,
+ hsep=\columnsep,
+ vsep=\bigskipamount,
+ rframe=single,
+ numbers=left,
+ numberstyle=\tiny,
+ numbersep=.3em,
+ xleftmargin=1em,
+ columns=flexible,
+ language=[LaTeX]TEX,breaklines=true,
+ basicstyle=\normalsize\ttfamily,tabsize=3
+}
\usepackage{booktabs}
\renewcommand{\arraystretch}{1.2}
@@ -58,15 +74,15 @@
\usepackage{hyperref}
\hypersetup{
bookmarks=false, % show bookmarks bar?
- pdftitle={CircuiTikZ \pgfcircversion\ - manual}, % title
- pdfauthor={Massimo Redaelli, Stefan Lindner, Stefan Erhardt, Romano Giannetti}, % author
+ pdftitle={CircuiTikZ \pgfcircversion\ - manual}, % title
+ pdfauthor={Massimo Redaelli, Stefan Lindner, Stefan Erhardt, Romano Giannetti}, % authors
pdfsubject={CircuiTikZ manual}, % subject of the document
- pdfkeywords={}, % list of keywords
- colorlinks=true, % false: boxed links; true: colored links
- linkcolor=black, % color of internal links
- citecolor=black, % color of links to bibliography
- filecolor=black, % color of file links
- urlcolor=black % color of external links
+ pdfkeywords={}, % list of keywords
+ colorlinks=true, % false: boxed links; true: colored links
+ linkcolor=blue, % color of internal links
+ citecolor=blue, % color of links to bibliography
+ filecolor=blue, % color of file links
+ urlcolor=blue % color of external links
}
\usepackage{imakeidx}
\usepackage{textcomp}
@@ -143,6 +159,8 @@
The use of \Circuitikz\ is, of course, not limited to academic teaching. The package gets widely used by engineers for typesetting electronic circuits for articles and publications all over the world.
+\subsection{License}
+Copyright \copyright\ 2007--2019 Massimo Redaelli. This package is author-maintained. Permission is granted to copy, distribute and/or modify this software under the terms of the \LaTeX\ Project Public License, version 1.3.1, or the GNU Public License. This software is provided ‘as is’, without warranty of any kind, either expressed or implied, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose.
\subsection{Loading the package}
\begin{table}[h]
@@ -189,13 +207,16 @@
So, if loaded with said option, one must write \verb!(0,0) to[*R] (2,0)! and, for transistors on a path, \verb!(0,0) to[*Tnmos] (2,0)!, and so on (but \verb!(0,0) node[nmos] {}!). See example at page~\pageref{ex:compatibility}.
-\subsection{License}
-Copyright \copyright\ 2007--2019 Massimo Redaelli. This package is author-maintained. Permission is granted to copy, distribute and/or modify this software under the terms of the \LaTeX\ Project Public License, version 1.3.1, or the GNU Public License. This software is provided ‘as is’, without warranty of any kind, either expressed or implied, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose.
+\subsection{Known bugs and limitation}\label{sec:bugs}
-\subsection{Feedback}
-The easiest way to contact the authors is via the official Github repository: \url{https://github.com/circuitikz/circuitikz/issues}
+\Circuitikz{} will \textbf{not work} correctly with global (in the main \texttt{circuitikz} environment, or in \texttt{scope} environments) \emph{negative} scale parameters (\texttt{scale}, \texttt{xscale} or \texttt{yscale}), unless \texttt{transform shape} is also used, and even in this cases the behavior is not guaranteed.
+Neither it will work with angle-changing scaling (when \texttt{xscale} is different form \texttt{yscale}) and with the global \texttt{rotate} parameter.
+Correcting this will need a big rewrite of the path routines, and although the authors are thinking about solving it, don't hold your breath; it will need changing a lot of interwoven code (labels, voltages, currents and so on). Contributions and help would be highly appreciated.
+This same issue create a lot of problem of compatibility between \Circuitikz{} and the new \texttt{pic} Ti\emph{k}Z feature, so basically don't put components into \texttt{pic}s.
+
+
\subsection{Incompabilities between version}
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{}!.
@@ -207,8 +228,21 @@
\item Since v0.5.1: The parts pfet, pigfete, pigfetebulk and pigfetd are now mirrored by default. Please adjust your yscale-option to correct this.
\item Since v0.5: New voltage counting direction, here exists an option to use the old behaviour
\end{itemize}
-For older projects, you can use an older version locally using the git-version and picking the correct commit from the repository (branch gh-pages).
+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} and \texttt{0.8.3}. To switch to use them, you simply change your \verb|\usepackage| invocation like
+ \begin{lstlisting}
+ \usepackage[]{circuitik-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.
+\end{itemize}
+
+
+\subsection{Feedback}
+The easiest way to contact the authors is via the official Github repository: \url{https://github.com/circuitikz/circuitikz/issues}
+
\subsection{Package options}
\label{sec:package-options}
@@ -225,8 +259,8 @@
\begin{center}
\begin{tabular}{ll}\toprule
- \LaTeX & \ConTeXt \\ \midrule
- \verb!\usepackage[american]{circuitikz}! & \verb!\usemodule[circuitikz][american]!\\
+ \LaTeX & \ConTeXt \\ \midrule
+ \verb!\usepackage[american]{circuitikz}! & \verb!\usemodule[circuitikz][american]!\\
\bottomrule
\end{tabular}
\end{center}
@@ -278,7 +312,7 @@
\item \texttt{rotatelabels}: labels on bipoles are always printed aligned along the bipole;
\item \texttt{smartlabels}: labels on bipoles are rotated along the bipoles, unless the rotation is very close to multiples of 90°;
\item \texttt{compatibility}: makes it possibile to load \Circuitikz\ and \TikZ\ circuit library together.
- \item Voltage directions: until v0.8.3, there was an error in the coherence between american and european voltages styles (see section~\ref{curr-and-volt} for the batteries. This has been fixed, but to guarantee backward compatibility and nasty surprises, the fix is available with new options:
+ \item Voltage directions: until v0.8.3, there was an error in the coherence between american and european voltages styles (see section~\ref{curr-and-volt}) for the batteries. This has been fixed, but to guarantee backward compatibility and to avoid nasty surprises, the fix is available with new options:
\begin{itemize}
\item \texttt{oldvoltagedirection}: Use old way of voltage direction having a difference between european and american direction, with wrong default labelling for batteries;
\item \texttt{nooldvoltagedirection}: The standard from 0.5 onward, utilize the (German?) standard of voltage arrows in the direction of electric fields (without fixing batteries);
@@ -315,12 +349,12 @@
\subsection{Getting started with \Circuitikz: a current shunt}
-Let's say we want to prepare a circuit to teach how a current shunt works; the idea is just draw a current generator, a couple of resistors in parallel, and the indication of currents and voltages for the discussion.
+Let's say we want to prepare a circuit to teach how a current shunt works; the idea is to draw a current generator, a couple of resistors in parallel, and the indication of currents and voltages for the discussion.
-A circuit in \Circuitikz is drawn into a \texttt{circuitikz} environment (which is really an alias for a \texttt{tikzpicture} one). In this first example we will use absolute coordinates.
-The electrical components can be divided in two big categories: the one that are bipoles and are placed along a path (also known as \texttt{to}-style component, for their usage) and components that are nodes and can have any number of poles, or connections.
+A circuit in \Circuitikz is drawn into a \texttt{circuitikz} environment (which is really an alias for \texttt{tikzpicture}). In this first example we will use absolute coordinates.
+The electrical components can be divided in two main categories: the one that are bipoles and are placed along a path (also known as \texttt{to}-style component, for their usage), and components that are nodes and can have any number of poles or connections.
-Let's start with the first type of components and build a basic mesh:
+Let's start with the first type of component, and build a basic mesh:
\begin{LTXexample}[varwidth=true]
\begin{circuitikz}[]
@@ -329,7 +363,7 @@
\end{circuitikz}
\end{LTXexample}
-The symbol for the current source can surprise somebody; this is actually the european-style symbol, and the symbols chosen reflects the default options of loaded in the package (see section~\ref{sec:package-options}). Let's change the style for now (the author of the tutorial, Romano, is European but he has used since ever American style circuit, so\dots); and while at it, let add the other branch and some label.
+The symbol for the current source can surprise somebody; this is actually the european-style symbol, and the type of symbol chosen reflects the default options of the package (see section~\ref{sec:package-options}). Let's change the style for now (the author of the tutorial, Romano, is European - but he has always used American-style circuits, so \dots); and while we're at it, let's add the other branch and some labels.
\begin{LTXexample}[varwidth=true]
\begin{circuitikz}[american]
@@ -407,10 +441,10 @@
\end{circuitikz}
\end{LTXexample}
-\subsection{A more complex tutorial: circuits Romano's style.}
+\subsection{A more complex tutorial: circuits, Romano style.}
\begingroup % do not propagate to the rest of the manual
-The idea is to draw a two-stage amplifier for a lesson, or exercise, on the different qualities of BJT an MOSFET transistors.
+The idea is to draw a two-stage amplifier for a lesson, or exercise, on the different qualities of BJT and MOSFET transistors.
Notice that this is a more ``personal'' tutorial, showing a way to draw circuits that is, in the author's opinion, highly reusable and easy to do.
The idea is using relative coordinates and named nodes as much as possible, so that changes in the circuit are easily done by changing keys numbers of position, and crucially, each block is reusable in other diagrams.
@@ -437,7 +471,7 @@
After the circuit is drawn, simply commenting out the second definition of \verb|\coord| will hide all the markers.
-So let's start with the first stage transistor; given that my preferred way of drawing a MOSFET is with arrows, I'll start issuing the command \verb|\ctikzset{tripoles/mos style/arrows}|:
+So let's start with the first stage transistor; given that my preferred way of drawing a MOSFET is with arrows, I'll start with the command \verb|\ctikzset{tripoles/mos style/arrows}|:
\ctikzset{tripoles/mos style/arrows}
\def\killdepth#1{{\raisebox{0pt}[\height][0pt]{#1}}}
@@ -450,7 +484,7 @@
\end{circuitikz}
\end{LTXexample}
-Another thing I like to modify with respect to the standard is the position of the arrows in transistors, which are normally midway the symbol. Issuing the following settings will move the arrows to the end or start of the corresponding pin.
+Another thing I like to modify with respect to the standard is the position of the arrows in transistors, which are normally in the middle the symbol. Using the following settings will move the arrows to the start or end of the corresponding pin.
\ctikzset{tripoles/mos style/arrows,
tripoles/npn/arrow pos=0.8,
@@ -465,7 +499,7 @@
tripoles/pmos/arrow pos=0.6, }
\end{lstlisting}
-The tricky thing about \verb|\killdepth{}| macro is a finicky details; I do not like the standard position of labels on transistors (which is near the collector/drain) so I plot the label at the right of the \texttt{center} anchor. Without the \verb|\killdepth| macro, the labels of different transistor will be adjusted so that the center of the box is at the \texttt{center} anchor, and as an effect, labels with descenders (like Q) will have a different baseline than labels without. You can see this here (it's really subtle):
+The tricky thing about \verb|\killdepth{}| macro is finnicky details; I do not like the standard position of labels on transistors (which is near the collector/drain) so I plot the label at the right of the \texttt{center} anchor. Without the \verb|\killdepth| macro, the labels of different transistor will be adjusted so that the center of the box is at the \texttt{center} anchor, and as an effect, labels with descenders (like Q) will have a different baseline than labels without. You can see this here (it's really subtle):
\begin{LTXexample}[varwidth=true]
@@ -607,11 +641,11 @@
\section{The components}
-Components in \Circuitikz{} come in two forms: a path-style form, to be used in \texttt{to} path specifications, and node-style, which will be instantiated by a \texttt{node} specification.
+Components in \Circuitikz{} come in two forms: path-style, to be used in \texttt{to} path specifications, and node-style, which will be instantiated by a \texttt{node} specification.
\subsection{Path-style components}
-The path-style components are used as in the following way:
+The path-style components are used as shown below:
\begin{lstlisting}
\begin{circuitikz}
\draw (0,0) to[#1=#2, #options] (2,0);
@@ -625,7 +659,7 @@
\subsubsection{Anchors}
-Normally, path-style component do not need anchors, although they have them just in case you need them. You have the basic ``geographical'' anchors (bipoles are defined horizontally and then rotate as needed):
+Normally, path-style components do not need anchors, although they have them just in case you need them. You have the basic ``geographical'' anchors (bipoles are defined horizontally and then rotated as needed):
\begin{center}
\begin{circuitikz}[
]
@@ -797,6 +831,14 @@
\circuitdesc*{plain amp}{Plain amplifier}{}( out/45/0.3 )
\end{groupdesc}
+Sometime, components will expose internal (sub-)shapes that can be accessed with the syntax \texttt{\textsl{<node name>}-\textsl{<internal node name>}} (a dash is separating the node name and the internal node name); that will be shown in the description as a blue ``anchor'':
+
+\begin{groupdesc}
+\circuitdesc{rotaryswitch}{Rotary switch}{}(in/-180/0.2, cin/145/0.2, center/-90/0.2, mid/0/0.4, out 1/0/0.2,
+cout 1/180/0.2)[out 1.n/90/0.2, out 4.w/0/0.3]
+\end{groupdesc}
+
+
\subsection{Grounds and supply voltages}
For the grounds, the \texttt{center} anchor is put on the connecting point of the symbol, so that you can use them directly in a \texttt{path} specification.
@@ -809,14 +851,33 @@
\circuitdesc{nground}{Noiseless ground}{}
\circuitdesc{pground}{Protective ground}{}
\circuitdesc{cground}{Chassis ground\footnotemark}{}
- \footnotetext{These last three were contributed by Luigi «Liverpool»)}
+ \footnotetext{These last three were contributed by Luigi «Liverpool»}
\circuitdesc{eground}{European style ground}{}
\circuitdesc{eground2}{European style ground, version 2\footnotemark}{}
- \footnotetext{These last two were contributed by \texttt{@fotesan})}
+ \footnotetext{These last two were contributed by \texttt{@fotesan}}
\circuitdesc{vcc}{VCC/VDD}{}
\circuitdesc{vee}{VEE/VSS}{}
\end{groupdesc}
+\subsubsection{Power supplies}
+
+The power supplies are normally drawn with the arrows shown in the list above.
+You can change them using all the options of the \texttt{arrows.meta} package (see the Ti\emph{k}Z manual for details) by changing the key \texttt{monopoles/vcc/arrow} and \texttt{monopoles/vee/arrow} (the default for both is \texttt{legacy}, which will use the old code for drawing them). Notes that the anchors are at the start of the connecting lines!
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \def\coord(#1){\showcoord(#1)<0:0.3>}
+ \draw (0,0)
+ node[vcc](vcc){VCC} \coord(vcc) ++(2,0)
+ node[vee](vee){VEE} \coord(vee);
+ \ctikzset{monopoles/vcc/arrow={Stealth[red, width=6pt, length=9pt]}}
+ \ctikzset{monopoles/vee/arrow={Latex[blue]}}
+ \draw (0,-2)
+ node[vcc](vcc){VCC} \coord(vcc) ++(2,0)
+ node[vee](vee){VEE} \coord(vee);
+\end{circuitikz}
+\end{LTXexample}
+
\subsubsection{Grounds anchors}
Anchors for grounds are a bit strange, given that they have the \texttt{center} spot at the same location than \texttt{north} and all the ground will develop ``going down'':
@@ -915,7 +976,7 @@
\end{circuitikz}
\end{LTXexample}
-This kind of component will maintain the symbol horizontal whatever the orientation:
+This kind of component will keep the symbol horizontal, whatever the orientation:
\begin{LTXexample}[varwidth=true]
\begin{circuitikz}[american]
@@ -939,7 +1000,7 @@
\end{LTXexample}
-If you prefer, you have the option to use square meters, to have more visual difference from generators:
+If you prefer it, you have the option to use square meters, in order to have more visual difference from generators:
\begin{LTXexample}[varwidth=true]
\begin{circuitikz}[american]
@@ -950,7 +1011,7 @@
\end{circuitikz}
\end{LTXexample}
-Another possibility is to use the QUCS\footnote{QUCS is an open source circuit simulator: \url{http://qucs.sourceforge.net/}}-styled probes, which have the nice property of explictly showing the type of connection (in series or parallel) of the meter:
+Another possibility is to use QUCS\footnote{QUCS is an open source circuit simulator: \url{http://qucs.sourceforge.net/}}-style probes, which have the nice property of explictly showing the type of connection (in series or parallel) of the meter:
\begin{LTXexample}[varwidth=true]
\begin{circuitikz}[american]
@@ -974,7 +1035,7 @@
\end{circuitikz}
\end{LTXexample}
-The final possibility is to use oscilloscopes, like for example:
+The final possibility is to use oscilloscopes. For example:
\begin{LTXexample}[varwidth=true]
\begin{circuitikz}[american]
@@ -988,9 +1049,8 @@
\end{circuitikz}
\end{LTXexample}
-Or, if you want a more physical structure for the measurement setup:
+Or, if you want a more physical structure for the measurement setup:
-
\begin{LTXexample}[varwidth=true, pos=b]
\begin{circuitikz}[american]
\draw (0,0) -- ++(1,0) to[R] ++(3,0) to [iloop2, name=I] ++(0,-2)
@@ -1127,7 +1187,7 @@
\end{framed}
-\subsection{Basic dynamical bipoles}
+\subsection{Capacitors and inductors: dynamical bipoles}
\begin{groupdesc}
\circuitdescbip{capacitor}{Capacitor}{C}
\circuitdescbip[polarcapacitor]{polar capacitor}{Polar capacitor}{pC}
@@ -1215,7 +1275,7 @@
\subsection{Noise sources}
-In this case, the ``direction'' of the source has no sense. Noise sources are filled in gray by default, but if you choose the dashed style, they become fillable.
+In this case, the ``direction'' of the source is undefined. Noise sources are filled in gray by default, but if you choose the dashed style, they become fillable.
\begin{groupdesc}
\circuitdescbip[vsourceN]{noise voltage source}{Sinusoidal voltage source}{vsourceN, nV}
@@ -1275,6 +1335,18 @@
\circuitdescbip*{dcisource}{DC current source}{}
\end{groupdesc}
+The size of the broken part of the DC current source is configurable by changing the value of \texttt{bipoles/dcisource/angle} (default \texttt{80}); values must be between 0 (no circle at all, probably not useful) and 90 (full circle, again not useful).
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[dcvsource] ++(2,0)
+ to [dcisource, fill=yellow] ++(2,0) ;
+ \ctikzset{bipoles/dcisource/angle=45}
+ \draw (0,-2) to[dcvsource] ++(2,0)
+ to [dcisource, fill=yellow] ++(2,0) ;
+\end{circuitikz}
+\end{LTXexample}
+
+
\subsection{Mechanical Analogy}
\begin{groupdesc}
\circuitdescbip*{damper}{Mechanical Damping}{}
@@ -1339,11 +1411,11 @@
\noindent Contributed by Stefan Erhardt.
\begin{groupdesc}
- \circuitdesc*{mixer}{\scshape mixer}{}( 1/180/0.1,2/-90/0.1,3/0/0.1,4/90/0.1 )
- \circuitdesc*{adder}{\scshape adder}{}( west/180/0.1,south/-90/0.1,east/0/0.1,north/90/0.1 )
- \circuitdesc*{oscillator}{\scshape oscillator}{}
- \circuitdesc*{circulator}{\scshape circulator}{}
- \circuitdesc*{wilkinson}{\scshape wilkinson divider}{}( in/180/0.1, out2/45/0.1, out1/-45/0.1 )
+ \circuitdesc*{mixer}{mixer}{}( 1/180/0.1,2/-90/0.1,3/0/0.1,4/90/0.1 )
+ \circuitdesc*{adder}{adder}{}( west/180/0.1,south/-90/0.1,east/0/0.1,north/90/0.1 )
+ \circuitdesc*{oscillator}{oscillator}{}
+ \circuitdesc*{circulator}{circulator}{}
+ \circuitdesc*{wilkinson}{wilkinson divider}{}( in/180/0.1, out2/45/0.1, out1/-45/0.1 )
\end{groupdesc}
\begin{groupdesc}
@@ -1525,7 +1597,7 @@
\end{circuitikz}
\end{LTXexample}
-The Base/Gate connection of all transistors can be disable by using the options \textit{nogate} or \textit{nobase}, respectively. The Base/Gate anchors are floating, but there an additional anchor "nogate"/"nobase", which can be used to point to the unconnected base:
+The Base/Gate connection of all transistors can be disabled by the options \textit{nogate} or \textit{nobase}, respectively. The Base/Gate anchors are floating, but there is an additional anchor "nogate"/"nobase", which can be used to point to the unconnected base:
\begin{LTXexample}[varwidth=true]
\begin{circuitikz}
\draw (2,0) node[npn,nobase](npn){};
@@ -1550,7 +1622,7 @@
\circuitdesc{pmos,emptycircle}{\scshape pmos}{}
\end{groupdesc}
-If you prefer different position of the arrows in transistors and FETs, you can adjust them like this (it works for the other BJT-based transistors, too):
+If you prefer a different position of the arrows in transistors and FETs, you can adjust them like this (it works for the other BJT-based transistors, too):
\begin{LTXexample}[varwidth=true]
\begin{circuitikz}
\ctikzset{tripoles/mos style/arrows,
@@ -1626,7 +1698,7 @@
;\end{circuitikz}
\end{LTXexample}
-For \textsc{npn}, \textsc{pnp}, \textsc{nigbt}, and \textsc{pigbt} transistors the anchors are \texttt{base}, \texttt{emitter} and \texttt{collector} anchors (which can be abbreviated with \texttt{B}, \texttt{E} and \texttt{C}):
+For \textsc{npn}, \textsc{pnp}, \textsc{nigbt} and \textsc{pigbt} transistors, the anchors are \texttt{base}, \texttt{emitter} and \texttt{collector} anchors (which can be abbreviated with \texttt{B}, \texttt{E} and \texttt{C}):
\begin{LTXexample}[varwidth=true]
\begin{circuitikz} \draw
@@ -1702,21 +1774,131 @@
\subsection{Electronic Tubes}
+
+Electronic tubes, also known as vacuum tubes, control current flow between electrodes. They come in many different flavours.
+\small{Contributed by J. op den Brouw (\texttt{J.E.J.opdenBrouw at hhs.nl}).}
+
\begin{groupdesc}
+ \circuitdesc*{diodetube}{Tube Diode}{}(anode/90/0.2, cathode/-90/0.2 )
+ \circuitdesc*{triode}{Triode}{}(anode/90/0.2, cathode/-90/0.2, grid/180/0.2 )
+ \circuitdesc*{tetrode}{Tetrode}{}(anode/90/0.2, cathode/-90/0.2, grid/190/0.2,screen/170/0.2 )
+ \circuitdesc*{pentode}{Pentode}{}(anode/90/0.2, cathode/-90/0.2, grid/190/0.2,screen/180/0.2,suppressor/170/0.2 )
+\end{groupdesc}
+
+Note that the \verb|diodetube| is used as component name to avoid clashes with the semiconductor diode.
+Normally, the filament is not drawn. If you want a filament, put the \verb|filament| option in the node description:
+
+\begin{groupdesc}
+ \circuitdesc*{diodetube,filament}{Tube Diode}{}(anode/90/0.2, filament 1/-135/0.2, filament 2/-45/0.2 )
+\end{groupdesc}
+
+Sometimes, you don't want the cathode to be drawn (but you do want the filament). Use the \verb|nocathode| option in the node description:
+
+\begin{groupdesc}
+ \circuitdesc*{diodetube,filament,nocathode}{Tube Diode}{}(anode/90/0.2 )
+\end{groupdesc}
+
+If you want a full cathode to be drawn, use the \verb|fullcathode| option in the node description. You can then use the anchors \verb|cathode 1| and \verb|cathode 2|.
+
+\begin{groupdesc}
+ \circuitdesc*{diodetube,fullcathode}{Tube Diode}{}(anode/90/0.2, cathode 1/-135/0.2, cathode 2/-45/0.2 )
+\end{groupdesc}
+
+These circuit elements are fully configurable, and the attributes are described below:
+
+\begin{tabular}{l | l | l}
+
+ Key & Default value & Description\\
+ \hline
+ \verb|tubes/width| & \verb|1| & relative width \\
+ \verb|tubes/height| & \verb|1.4| & relative height \\
+ \verb|tubes/tube radius| & \verb|0.40| & radius of tube circle \\
+ \verb|tubes/anode distance| & \verb|0.40| & distance from center \\
+ \verb|tubes/anode width| & \verb|0.40| & width of an anode/plate \\
+ \verb|tubes/grid protrusion| & \verb|0.25| & distance from center \\
+ \verb|tubes/grid dashes| & \verb|5| & number of grid dashes \\
+ \verb|tubes/grid separation| & \verb|0.2| & separation between grids \\
+ \verb|tubes/grid shift| & \verb|0.0| & y shift of grids from center \\
+ \verb|tubes/cathode distance| & \verb|0.40| & distance from grid \\
+ \verb|tubes/cathode width| & \verb|0.40| & width of a cathode \\
+ \verb|tubes/cathode corners| & \verb|0.06| & corners of the cathode wire \\
+ \verb|tubes/cathode right extend| & \verb|0.075| & extension at the right side \\
+ \verb|tubes/filament distance| & \verb|0.1| & distance from cathode \\
+ \verb|tubes/filament angle| & \verb|15| & angle from the centerpoint \\
+\end{tabular}
+
+Conventionally, the model of the tube is indicated at the \verb|east| anchor:
+
+\begin{LTXexample}[varwidth]
+\ctikzset{tubes/width=1.4}
+\ctikzset{tubes/height=1}
+
+\begin{circuitikz}
+\draw (0,0) node[triode] (Tri) {};
+\draw (Tri.east) node[right] {12AX7};
+\end{circuitikz}
+\end{LTXexample}
+
+Example triode amplifier:
+
+\begin{lstlisting}
+\begin{circuitikz}
+\draw (0,0) node (start) {}
+ to[sV=$V_i$] ++(0,2+\ctikzvalof{tubes/height})
+ to[C=$C_i$] ++(2,0) node (Rg) {}
+ to[R=$R_g$] (Rg |- start)
+(Rg) to[short,*-] ++(1,0)
+ node[triode,anchor=grid] (Tri) {} ++(2,0)
+(Tri.cathode) to[R=$R_c$,-*] (Tri.cathode |- start)
+(Tri.anode) to [R=$R_a$] ++(0,2)
+ to [short] ++(3.5,0) node(Vatop) {}
+ to [V<=$V_a$] (Vatop |- start)
+ to [short] (start)
+(Tri.anode) ++(0,0.2) to[C=$C_o$,*-o] ++(2,0)
+(Tri.cathode) ++(0,-0.2) to[short,*-] ++(1.5,0) node(Cctop) {}
+ to[C=$C_c$,-*] (start -| Cctop)
+;
+\draw[red,thin,dashed] (Tri.north west) rectangle (Tri.south east);
+\draw (Tri.east) node[right] {12AX7};
+\end{circuitikz}
+\end{lstlisting}
+
+\begin{circuitikz}
+\draw (0,0) node (start) {}
+ to[sV=$V_i$] ++(0,2+\ctikzvalof{tubes/height})
+ to[C=$C_i$] ++(2,0) node (Rg) {}
+ to[R=$R_g$] (Rg |- start)
+(Rg) to[short,*-] ++(1,0)
+ node[triode,anchor=grid] (Tri) {} ++(2,0)
+(Tri.cathode) to[R=$R_c$,-*] (Tri.cathode |- start)
+(Tri.anode) to [R=$R_a$] ++(0,2)
+ to [short] ++(3.5,0) node(Vatop) {}
+ to [V<=$V_a$] (Vatop |- start)
+ to [short] (start)
+(Tri.anode) ++(0,0.2) to[C=$C_o$,*-o] ++(2,0)
+(Tri.cathode) ++(0,-0.2) to[short,*-] ++(1.5,0) node(Cctop) {}
+ to[C=$C_c$,-*] (start -| Cctop)
+;
+\draw[red,thin,dashed] (Tri.north west) rectangle (Tri.south east);
+\draw (Tri.east) node[right] {12AX7};
+\end{circuitikz}
+
+\begin{groupdesc}
\circuitdesc*{magnetron}{Magnetron}{}( anode/-90/0.2, cathode1/135/0.2,
cathode2/45/0.2, left/180/0.2, right/0/0.2, top/90/0.4 )
\end{groupdesc}
+
\begin{LTXexample}[varwidth=true]
- \begin{circuitikz}
- \draw (0,-2)node[rground](gnd){} to[voltage source,v<={HV}]++(0,3)--++(1,0)to[V,n=DC]++(2,0);
- \draw (2,-1) node[magnetron,scale=1](magn){};
- \draw (DC.left)++(-0.2,0)to [short,*-] ++(0,-1) to [short] (magn.cathode1);
- \draw (DC.right)++(0.2,0)to [short,*-] ++(0,-1) to [short] (magn.cathode2);
- \draw (magn.anode) to [short] (magn.anode|-gnd) node[rground]{};
- \draw (magn.cathode1)node[above]{$1$};
- \draw (magn.cathode2)node[above]{$2$};
- \draw[->](magn.east) --++(1,0)node[right]{$RF_{out}$};
- \end{circuitikz}
+\begin{circuitikz}
+\draw (0,-2)node[rground](gnd){} to[voltage source,v<={HV}]++(0,3)--++(1,0)to[V,n=DC]++(2,0);
+\draw (2,-1) node[magnetron,scale=1](magn){};
+\draw (DC.left)++(-0.2,0)to [short,*-] ++(0,-1) to [short] (magn.cathode1);
+\draw (DC.right)++(0.2,0)to [short,*-] ++(0,-1) to [short] (magn.cathode2);
+\draw (magn.anode) to [short] (magn.anode|-gnd) node[rground]{};
+\draw (magn.cathode1)node[above]{$1$};
+\draw (magn.cathode2)node[above]{$2$};
+\draw[->](magn.east) --++(1,0)node[right]{$RF_{out}$};
+\end{circuitikz}
\end{LTXexample}
\subsection{RF components}
@@ -1795,7 +1977,7 @@
-\subsection{Double bipoles}
+\subsection{Double bipoles (transformers)}
Transformers automatically use the inductor shape currently selected. These are the three possibilities:
\begin{groupdesc}
@@ -1825,8 +2007,6 @@
\ctikzset{inductor=cute} % reset default
\end{groupdesc}
-
-
\subsubsection{Double dipoles anchors}
All the double bipoles/quadrupoles have the four anchors, two for each port.
@@ -1886,9 +2066,57 @@
;\end{circuitikz}
\end{LTXexample}
+\subsubsection{Double dipoles customization}
+You can change the aspect of a quadpole using the corresponding parameters \texttt{quadpoles/*/width} and \texttt{quadpoles/*/heigth} (substitute the star for \texttt{transformer}, \texttt{transformer core} or \texttt{gyrator}; default value is \texttt{1.5} for all). You have to be careful to not choose value that overlaps the components!
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+\ctikzset{quadpoles/transformer/width=1,
+ quadpoles/transformer/height=2}
+ \draw (0,0) node[transformer] (T) {}
+ (T.base) node{K}
+ (T.inner dot A1) node[circ]{}
+ (T.inner dot B2) node[circ]{};
+\end{circuitikz}
+\end{LTXexample}
+Another very useful parameter is \texttt{quadpoles/*/inner} (default \texttt{0.4}) that determine which part of the component is the ``vertical'' one. So, setting that parameter to 1 will eliminate the horizontal part of the component (obviously, to maintain the general aspect ratio you need to change the width also):
+
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+\draw (0,0) node[transformer] (T) {}
+ (T.A1) node[anchor=east] {A1}
+ (T.A2) node[anchor=east] {A2}
+ (T.B1) node[anchor=west] {B1}
+ (T.B2) node[anchor=west] {B2}
+ (T.base) node{K} ;
+\ctikzset{quadpoles/transformer/inner=1, quadpoles/transformer/width=0.6}
+\draw (0,-3) node[transformer] (P) {}
+ (P.base) node{T}
+ (P.inner dot A2) node[ocirc]{}
+ (P.inner dot B2) node[ocirc]{};
+\end{circuitikz}
+\end{LTXexample}
+
+This can be useful if you want to put seamlessly something in series with either side of the component; for simplicity, you have a style setting \texttt{quadpoles style} to toggle between the standard shape of double bipoles (called \texttt{inward}, default) and the one without horizontal leads (called \texttt{inline}):
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+\ctikzset{inductor=cute, quadpoles style=inline}
+\draw
+ (0,0) to[R] ++(0,-2)
+ node[transformer, anchor=A1](T){}
+ (T.A2) node[ground](GND){}
+ (T.inner dot A1) node[font=\small\boldmath]{$\oplus$}
+ (T.inner dot B2) node[]{$+$}
+ (T.B1) node[above, ocirc]{}
+ (T.B2) -- (GND);
+\end{circuitikz}
+\end{LTXexample}
+
+
\subsection{Amplifiers}
\begin{groupdesc}
@@ -2052,7 +2280,7 @@
\end{circuitikz}
\end{LTXexample}
-Notice that the label is fully mirrored, so check below for the generic way of changing this.
+Notice that the label is fully mirrored, so check below for the generic way to change this.
You can use the new key \texttt{en amp text A} to change the infinity symbol with an A:
@@ -2120,9 +2348,6 @@
\begin{groupdesc}
\circuitdesc{currarrow}{Arrows (current and voltage)}{}
\circuitdesc{inputarrow}{Arrow to draw at its tip, useful for block diagrams.}{}
- \circuitdesc{circ}{Connected terminal}{}
- \circuitdesc{ocirc}{Unconnected terminal}{}
- \circuitdesc{diamondpole}{Diamond-style terminal}{}
\circuitdesc{jump crossing}{Jumper-style crossing node}{}
\circuitdesc{plain crossing}{Plain style crossing node}{}
\circuitdesc{waves}{Waves}{}( north/90/0.4, north east/45/0.4, east/-45/0.4, south east/-45/0.4,
@@ -2131,6 +2356,18 @@
\circuitdesc*{bnc}{BNC connector}{}(left/135/0.6, right/45/0.6, center/-90/0.6, hot/0/0.6, zero/-135/0.6)
\end{groupdesc}
+These are the so-called ``bipole nodes'' shapes, or poles (see section~\ref{sec:bipole-nodes}). These nodes are always filled; the ``open'' versions (starting with an \texttt{o}) are by default filled white, but you can override it with the \texttt{fill} parameter.
+
+\begin{groupdesc}
+ \circuitdesc{circ}{Connected terminal}{}
+ \circuitdesc{ocirc}{Unconnected terminal}{}
+ \circuitdesc{diamondpole}{Diamond-square terminal}{}
+ \circuitdesc{odiamondpole}{Open diamond-square terminal}{}
+ \circuitdesc{squarepole}{Square-shape terminal}{}
+ \circuitdesc{osquarepole}{Open square-shape terminal}{}
+\end{groupdesc}
+
+
Moreover, you have the arrow tip \texttt{latexslim} which is an arrow similar to the old (in deprecated \texttt{arrows} library) \texttt{latex'} element:
\begin{LTXexample}[varwidth=true]
@@ -2139,10 +2376,8 @@
\end{circuitikz}
\end{LTXexample}
-
-
\subsubsection{Terminal shapes}
-Since version 0.9.0, \texttt{circ}, \texttt{ocirc} , and \texttt{diamondpole} have all the standard geographical anchors, so you can do things like these:
+Since version 0.9.0, ``bipole nodes'' shapes have all the standard geographical anchors, so you can do things like these:
\begin{LTXexample}[varwidth=true]
\begin{circuitikz}[american,]
@@ -2251,9 +2486,26 @@
while this is a node-style component:
\begin{groupdesc}
- \circuitdesc{spdt}{spdt}{}( in/180/0.2, out 1/0/0.2, out 2/0/0.2 )
+ \circuitdesc{spdt}{spdt}{}( in/180/0.2, out 1/0/0.2, out 2/0/0.2 )
\end{groupdesc}
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) node[spdt] (Sw) {}
+ (Sw.in) node[left] {in}
+ (Sw.out 1) node[right] {out 1}
+ (Sw.out 2) node[right] {out 2}
+;\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) to[C] (1,0) to[toggle switch , n=Sw] (2.5,0)
+ -- (2.5,-1) to[battery1] (1.5,-1) to[R] (0,-1) -| (0,0)
+ (Sw.out 2) -| (2.5, 1) to[R] (0,1) -- (0,0)
+;\end{circuitikz}
+\end{LTXexample}
+
\subsubsection{Cute switches}
These switches have been introduced after version 0.9.0, and they come in also in to-style and in node-style, but they are size-matched so that they can be used together in a seamless way.
@@ -2260,7 +2512,7 @@
The path element (to-style) are:
\begin{groupdesc}
\circuitdescbip[cuteclosedswitch]{cute closed switch}{Cute closed switch}{ccsw}(mid/90/0.2, in/-135/0.2, out/-45/0.2)
- \circuitdescbip[cuteopenswitch]{cute open switch}{Cute open switch}{cosw}
+ \circuitdescbip[cuteopenswitch]{cute open switch}{Cute open switch}{cosw}(out/45/0.2)[out.s/-90/0.2]
\circuitdescbip[cuteclosingswitch]{cute closing switch}{Cute closing switch}{ccgsw}
\circuitdescbip[cuteopeningswitch]{cute opening switch}{Cute opening switch}{cogsw}
\end{groupdesc}
@@ -2274,7 +2526,7 @@
\circuitdesc{cute spdt down arrow}{Cute spdt down with arrow}{}
\end{groupdesc}
-\subsubsection{Switches anchors}
+\paragraph{Cute switches anchors}
The nodes-style switches have the following anchors:
@@ -2282,30 +2534,38 @@
\begin{circuitikz}
\def\coorda(#1)<#2>{node[circle, red, draw, inner sep=1pt,pin={[red, overlay, inner sep=0.5pt, font=\small, pin distance=0.1cm, pin edge={red, overlay,}]#2:#1}](#1){}}
\path (0,-1) -- (3,1); %bbox
- \draw (0, 0) node[cute spdt up arrow](CS){};
- \draw (2, 0) node[cute spdt up arrow](CS){};
+ \draw (0, 0) node[spdt](S){};
+ \foreach \a/\b in {center/0, in/-135, out 1/45, out 2/-45}
+ \path (S.\a) \coorda(\a)<\b>;
+ \draw (3, 0) node[cute spdt up arrow](CS){};
\foreach \a/\b in {center/0, in/-135, out 1/45, out 2/-45, mid/135}
- \path (CS.\a) \coorda(\a)<\b>;
+ \path (CS.\a) \coorda(\a)<\b>;
+ \draw (6, 0) node[cute spdt up arrow](CS2){};
+ \foreach \a/\b in {cin/-135, cout 1/45, cout 2/-45}
+ \path (CS2.\a) \coorda(\a)<\b>;
\end{circuitikz}
+Please notice the position of the normal anchors at the border of the \texttt{ocirc} shape for the cute switches; they are thought to be compatible with an horizontal wire going out.
+Additionaly, you have the \texttt{cin}, \texttt{cout 1} y \texttt{cout 2} which are anchors on the center of the contacts.
-\begin{LTXexample}[varwidth=true]
-\begin{circuitikz} \draw
- (0,0) node[spdt] (Sw) {}
- (Sw.in) node[left] {in}
- (Sw.out 1) node[right] {out 1}
- (Sw.out 2) node[right] {out 2}
-;\end{circuitikz}
-\end{LTXexample}
+For more complex situations, the contact nodes are available\footnote{Thanks to \texttt{@marmot} on \href{https://tex.stackexchange.com/a/492599/38080}{tex.stackexchange.com}.} using the syntax \emph{name of the node}\texttt{-in}, \dots\texttt{-out 1} and \dots\texttt{-out 2}, with all their anchors.
\begin{LTXexample}[varwidth=true]
-\begin{circuitikz} \draw
- (0,0) to[C] (1,0) to[toggle switch , n=Sw] (2.5,0)
- -- (2.5,-1) to[battery1] (1.5,-1) to[R] (0,-1) -| (0,0)
- (Sw.out 2) -| (2.5, 1) to[R] (0,1) -- (0,0)
-;\end{circuitikz}
+\begin{circuitikz}
+\draw (0,0) node[cute spdt up] (S1) {}
+ (S1.in) node[left] {in}
+ (S1.out 1) node[right] {out 1};
+ \draw (0,-2) node[cute spdt up,
+ /tikz/circuitikz/bipoles/cuteswitch/height=0.8] (S2) {}
+ (S2.in) node[left] {in}
+ (S2.out 2) node[right] {out 2};
+ \draw [red] (S1-in.s) -- (S2-in.n);
+ \draw [blue] (S1-out 2.s) -- (S2-out 1.n);
+\end{circuitikz}
\end{LTXexample}
+
+
The \texttt{mid} anchor in the cute switches (both path- and node-style) can be used to combine switches to get more complex configurations:
\begin{LTXexample}[varwidth=true]
@@ -2317,9 +2577,10 @@
\end{circuitikz}
\end{LTXexample}
-\subsubsection{Cute switches customization}
+\paragraph{Cute switches customization}
-You can use the key \texttt{bipoles/cuteswitch/thickness} to decide the thickness of the switch lever. The units are the diameter of the \texttt{ocirc} connector, and the default is \texttt{1}.
+You can use the key \texttt{bipoles/cuteswitch/thickness} to decide the thickness of the switch lever.
+The units are the diameter of the \texttt{ocirc} connector, and the default is \texttt{1}.
\begin{LTXexample}[varwidth=true]
\begin{circuitikz}
@@ -2331,6 +2592,156 @@
\end{circuitikz}
\end{LTXexample}
+Finally, the switches are normally drawn using the \texttt{ocirc} shape, but you can change it, as in the following example, with the key \texttt{bipoles/cuteswitch/shape}. Be careful that the shape is used with its defaults (which can lead to strange results), and that the standard anchors will be correct only for \texttt{circ} and \texttt{ocirc} shapes, so you have to use the internal node syntax to connect it.
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \begin{scope}
+ \ctikzset{bipoles/cuteswitch/thickness=0.5,
+ bipoles/cuteswitch/shape=circ}
+ \draw (0,2) node[cute spdt up](S1){};
+ \ctikzset{bipoles/cuteswitch/thickness=0.25,
+ bipoles/cuteswitch/shape=emptyshape}
+ \draw (0,0) node[cute spdt up](S2){};
+ \draw (S2.cin) node[draw, inner sep=2pt]{};
+ \draw (S2.cout 1) node[draw, inner sep=2pt]{};
+ \draw (S2.cout 2) node[draw=red, inner sep=2pt]{};
+ \end{scope}
+ \draw (0,-2) node[cuteclosedswitchshape, yscale=-1](S3){};
+ \draw [densely dashed] (S1.mid)--(S2.mid)--(S3.mid);
+\end{circuitikz}
+\end{LTXexample}
+
+
+\subsubsection{Rotary switches}
+
+Rotary switches are a kind of generic multipole switches; they are implemented as a strongly customizable element (and a couple of styles to simplify its usage). The basic element is the following one, and it has the same basic anchors of the cute switches, included the access to internal nodes (shown in blue here).
+
+\begin{groupdesc}
+\circuitdesc{rotaryswitch}{Rotary switch}{}(in/-180/0.2, cin/145/0.2, center/-90/0.2, mid/0/0.4, out 1/0/0.2,
+cout 1/180/0.2)[out 1.n/90/0.2, out 4.w/0/0.3]
+\end{groupdesc}
+
+Notice that the name of the shape is \texttt{rotaryswitch}, no spaces.
+The default rotary switch component has 5 channels (this is set in the parameter \texttt{multipoles/rotary/channels}), spanning form \SI{-60}{\degree} to \SI{60}{\degree} (parameter \texttt{multipoles/rotary/angle}) and with the wiper at \SI{20}{\degree} (parameter \texttt{multipoles/rotary/wiper}).
+
+Moreover, there are by default no arrows on the wiper; you can set this with the parameter \texttt{multipoles/rotary/arrow} which can assume the values \texttt{none}, \texttt{cw} (clockwise), \texttt{ccw} (counterclockwise) or \texttt{both}.
+
+To simplify the usage of the component, a series of styles are defined: \texttt{rotary switch=\textsl{<channels>} in \textsl{<angle>} wiper \textsl{<wiper angle>}} (notice the space in the name of the style!). Using \texttt{rotary switch} without parameters will generate a default switch.
+
+To add arrows, you can use the styles \texttt{rotary switch -} (no arrow, whatever the default), \texttt{rotary switch <-} (counterclockwise arrow), \texttt{rotary switch ->} (clockwise) and \texttt{rotary switch <->} (both).
+
+Notice that the defaults of the styles are the same as the default values of the parameters, but that if you change globally the defaults using the keys mentioned above, you only change the defaults for the ``bare'' component \texttt{rotaryswitch}, not for the styles.
+
+
+\begin{LTXexample}[varwidth=true, pos=t, basicstyle=\small\ttfamily]
+\begin{circuitikz}
+\ctikzset{multipoles/rotary/arrow=both}
+\draw (0,0) -- ++(1,0) node[rotary switch <-=8 in 120 wiper 40, anchor=in](A){};
+\draw (3,0) -- ++(1,0) node[rotary switch, anchor=in](B){}; % default values
+\draw[red] (A.out 4) -| (3,0);
+\draw[blue] (A-out 2.n) -- ++(0,0.5) -| (B-out 1.n);
+\draw (B.out 3) -- ++(1,0) node[rotary switch -=5 in 90 wiper 15, anchor=in](C){};
+\draw (C.out 3) -- ++(1,0) node[rotary switch ->, xscale=-1, anchor=out 3](D){};
+\draw[green, dashed] (B.mid) -- ++(-.5,-1) -| (C.mid);
+\end{circuitikz}
+\end{LTXexample}
+
+\paragraph{Rotary switch anchors}
+
+Rotary switches anchors are basically the same as the cute switches, including access (with the \texttt{\textsl{<node name>}-<anchor name>} notation) to the internal connection nodes. The geographical anchors work as expected, marking the limits of the component.
+
+\showanchors{rotary switch}{}(north/90/0.4, north east/45/0.4, east/0/0.4, south east/-45/0.4,
+ south/-90/0.4, south west/-135/0.4, west/180/0.4, north west/135/0.4, center/-120/0.3)
+\qquad
+\showanchors{rotary switch=25 in 120 wiper 10}{}(north/90/0.4, north east/45/0.4, east/0/0.4, south east/-45/0.4,
+ south/-90/0.4, south west/-135/0.4, west/180/0.4, north west/135/0.4, center/-120/0.3)
+
+In addition to the anchors they have in common with the cute switches, the rotary switch has the so called ``angled'' anchors and the ``external square anchors''. \emph{Angled anchors}, called \texttt{aout 1}, \texttt{aout 2} and so forth, are anchors placed on the output poles at the same angle as the imaginary lines coming from the input pole; \emph{square anchors}, called \texttt{sqout 1}\dots, are located on an imaginary square surrounding the rotary switch on the same line.
+
+\bigskip
+
+\begin{circuitikz}
+ \begin{scope}[scale=2, transform shape]
+ \clip (-1,-.4) rectangle (1,.6);
+ \draw (0,0) node[rotary switch=9 in 90 wiper 10](Z){};
+ \draw [dashed, blue] (Z.cin) -- (Z.sqout 4);
+ \end{scope}
+ \path (Z.aout 4) \showcoord(aout 4)<-15:0.4>;
+ \path (Z.sqout 4) \showcoord(sqout 4)<0:0.4>;
+ \path (Z.out 3) \showcoord(out 3)<15:0.4>;
+ \path (Z.cout 3) \showcoord(cout 3)<180:0.4>;
+ \draw (8,0) node[rotary switch -=31 in 150 wiper 10](D){};
+ \foreach \i in {1,...,31} \draw (D.sqout \i) -- (D.aout \i);
+ \foreach \l/\a/\d in {north/90/0.2, north east/45/0.2, east/0/0.2,
+ south east/-45/0.2, south/-90/0.2, south west/-135/0.2, west/180/0.2, north west/135/0.2,
+ center/-145/0.7}
+ \path (D.ext \l) \showcoord(ext \l)<\a:\d>;
+ \path (D.aout 12) \showcoordb(aout 12)<-5:0.4>;
+ \path (D.sqout 12) \showcoordb(sqout 12)<0:0.4>;
+ \draw[blue, densely dotted] (D.ext north west) rectangle (D.ext south east);
+\end{circuitikz}
+
+The code for the diagram at the left, above, without the markings for the anchors, is:
+\begin{lstlisting}[basicstyle=\small\ttfamily]
+\begin{circuitikz}
+ \draw (8,0) node[rotary switch -=31 in 150 wiper 10](D){};
+ \foreach \i in {1,...,31} \draw (D.sqout \i) -- (D.aout \i);
+ \draw[blue, densely dotted] (D.ext north west) rectangle (D.ext south east);
+\end{circuitikz}
+\end{lstlisting}
+
+One possible application for the angled and the ``on square'' anchors is that you can use them to move radially from the output poles, for example for adding numbers:
+
+\begin{LTXexample}[varwidth=true, basicstyle=\small\ttfamily]
+\begin{circuitikz}
+\draw (0,0) node[rotary switch=13 in 120 wiper 0](S){};
+\foreach \i in {1,...,13} % requires "calc"
+ \path ($(S.aout \i)!1ex!(S.sqout \i)$)
+ node[font=\tiny\color{red}]{\i};
+\end{circuitikz}
+\end{LTXexample}
+
+Finally, notice that the value of width for the rotary switches is taken from the one for the ``cute switches'' which in turn is taken from the width of traditional \texttt{spdt} switch, so that they match (notice that the ``center'' anchor is better centered in the rotary switch, so you have to explicitly align them).
+
+\begin{LTXexample}[varwidth=true, basicstyle=\small\ttfamily]
+\begin{circuitikz}
+ \draw (0,0) node[color=blue, rotary switch=2 in 35 wiper 30,
+ anchor=in](R){};
+ \draw (0,-1) node[cute spdt up, anchor=in](C){};
+ \draw (0,-2) node[color=blue, rotary switch=3 in 35 wiper 30,
+ anchor=in](R){};
+\end{circuitikz}
+\end{LTXexample}
+
+\paragraph{Rotary switch customization}
+
+Apart from the basic customization seen above (number of channels, etc.) you can change, as in the cute switches, the shape used by the connection points with the parameter \texttt{multipoles/rotary/shape}, and the thickness of the wiper with \texttt{multipoles/rotary/thickness}. The optional arrow has thickness equal to the standard bipole thickness \texttt{bipoles/thickness} (default 2).
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \ctikzset{multipoles/rotary/thickness=0.5}
+ \draw (0,1.6) node[rotary switch ->, color=blue](S1){};
+ \ctikzset{multipoles/rotary/shape=circ}
+ \draw (0,0) node[rotary switch ->](S2){};
+ \ctikzset{bipoles/thickness=0.5}
+ \draw (0,-1.6) node[rotary switch ->, color=red](S3){};
+\end{circuitikz}
+\end{LTXexample}
+
+Finally, the size can be changed using the parameter \texttt{tripoles/spdt/width} (default 0.85).
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,2) node[rotary switch ->, color=blue](S1){};
+ \ctikzset{tripoles/spdt/width=1.6, fill=cyan,
+ multipoles/rotary/shape=osquarepole}
+ \draw (0,0) node[rotary switch ->](S2){};
+\end{circuitikz}
+\end{LTXexample}
+
+
+
\subsection{Logic gates}
Logic gates, with two or more input, are supported. Albeit in principle these components are multipoles, the are considered tripoles here, for historical reasons (when they just had two inputs).
@@ -2511,10 +2922,7 @@
-\subsection{Chips}
-%%% This chapter is in the new format --- description and components.
-%%% The idea is to try to reorganize the manual before the next release.
-%%% See issue #24
+\subsection{Chips (integrated circuits)}
\texttt{CircuiTikZ} supports two types of variable-pin chips: DIP (Dual-in-Line Package) and QFP (Quad-Flat Package).
\begin{groupdesc}
@@ -2654,6 +3062,83 @@
\draw (C.s) -- ++(0,-1) node[ground]{};
\end{circuitikz}\end{LTXexample}
+\subsection{Seven segment displays}
+
+\begin{groupdesc}
+ \circuitdesc*{bare7seg}{Seven segment display}{}
+\end{groupdesc}
+
+The seven segment display lets you show values as if they were displayed in a classical seven segment display.\footnote{This component has been loosely inspired by the package \texttt{SevenSeg} by Germain Gondor, 2009, see \href{http://www.texample.net/tikz/examples/seven-segment-display/}{\TeX{}example.net}.}
+
+The main ``bare'' component is the one shown above, but for simplicity a couple of style interfaces are defined:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) node[seven segment val=A dot off box on]{};
+ \draw (1,0) node[seven segment val=- dot none box on]{};
+ \draw (0,-2) node[seven segment bits=1001001 dot empty box on]{};
+ \draw (1,-2) node[seven segment bits=0011101 dot none box off]{};
+\end{circuitikz}
+\end{LTXexample}
+
+There are two main configuration methods. The first one is \texttt{seven segment val}, which will take an hexadecimal number or value and display it: the possible values are \texttt{0,...,15}, plus \texttt{A, B, C, D, E, F} (or lowercase) and the symbol \texttt{-} (minus).
+
+
+The other interface is \texttt{seven segment bits}, where you specify seven bits saying which segment must be on (please never specify a different number of bits, it will throw a very obscure error); you can see in the anchors the name of each segment.
+
+The option \texttt{dot} specifies if you want a decimal dot or not. The key \texttt{none} will remove the dot and the space it would take; \texttt{empty} will not show the dot at all but reserve the space, and \texttt{on} or \texttt{off} will show the dot in the corresponding state.
+
+The option \texttt{box} (can be \texttt{on} or \texttt{off}) simply toggles the drawing of the external box. You can separate it from the display with the key \texttt{seven seg/box sep} (default \texttt{1pt}), and it will use the thickness specified in \texttt{multipoles/thickness} (The same as the chips).
+
+You can use these option with the ``bare'' object \texttt{bare7seg} and the keys \texttt{seven seg/bits} (default \texttt{0000000}), \texttt{seven seg/dot} (default \texttt{none}) and \texttt{seven seg/box} (default \texttt{off}); there is no option equivalent to the \texttt{val} interface.
+
+\subsubsection{Seven segments anchors}
+
+These are the anchors for the seven segment displays; notice that when the \texttt{dot} parameter is not \texttt{none}, the cell is a bit wider at the right side.
+
+\begingroup
+\ctikzset{seven seg/color off=gray, multipoles/thickness=1}
+\showanchors{bare7seg}{}(north/90/0.4, north east/45/0.4, east/0/0.4,
+south east/-45/0.4, south/-90/0.4, south west/-135/0.4, west/180/0.4,
+north west/135/0.4, center/-140/0.5)
+\ctikzset{seven seg/dot=off}
+\ctikzset{seven seg/box=on}
+\showanchors{bare7seg}{}(north/90/0.4, north east/45/0.4, east/0/0.4,
+south east/-45/0.4, south/-90/0.4, center/-140/0.5)
+\ctikzset{seven seg/box=off}
+\showanchors{bare7seg}{}(a/90/0.4, b/45/0.4, c/0/0.4, d/-90/0.4,
+e/-129/0.4, f/145/0.4, g/190/0.4, dot/-45/0.2)
+\endgroup
+
+\subsubsection{Seven segments customization}
+
+You can change several parameters to adjust the displays:
+\begin{lstlisting}[basicstyle=\small\ttfamily]
+\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"
+\end{lstlisting}
+
+A couple of examples following:
+
+\begin{LTXexample}[varwidth=true, pos=b, basicstyle=\small\ttfamily]
+\begin{circuitikz}[scale=0.5]
+\ctikzset{seven seg/width=0.2, seven seg/thickness=2pt}
+\foreach \i in {0,...,15} \path (\i,0)
+ node[seven segment val=\i dot on box off]{};
+\ctikzset{seven seg/color on=black}
+\foreach \i in {0,...,15} \path (\i,-1.5)
+ node[seven segment val=\i dot off box off, fill=gray!30!white]{};
+\ctikzset{seven seg/color on=green, seven seg/color off=yellow!30}
+\foreach \i in {0,...,15} \path[color=red] (\i,-3)
+ node[seven segment val=\i dot none box on, xslant=0.2]{};
+\end{circuitikz}
+\end{LTXexample}
+
+
\section{Labels and similar annotations}
\begin{LTXexample}[varwidth=true]
@@ -2719,7 +3204,7 @@
\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, or voltage, or current) contains one of the characters $=$ (equal) or $,$ (comma), giving unexpected errors and wrong output.
+\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 to the option parser using an \verb|\mbox| command, or redefining the characters with a \TeX\ \verb|\def|:
\begin{LTXexample}[varwidth=true]
@@ -3239,10 +3724,50 @@
\end{LTXexample}
+\subsection{Nodes (also called poles)}\label{sec:bipole-nodes}
+You can add nodes to the bipoles, positioned at the coordinates surrounding the component. The general style to use is \texttt{bipole nodes=\{start\}\{stop\}}, where \texttt{start} and \texttt{stop} are the nodes --- to be chosen between \texttt{none}, \texttt{circ}, \texttt{ocirc}, \texttt{squarepole}, \texttt{osquarepole}, \texttt{diamondpole}, \texttt{odiamondpole} and \texttt{rectfill}\footnote{You can use other shapes too, but at your own risk\dots Moreover, notice that \texttt{none} is not really a node, just a special word used to say ``do not put any node here''.} (see section~\ref{sec:support}).
-\subsection{Nodes}
+\begin{LTXexample}[varwidth=true,
+ basicstyle=\small\ttfamily
+ ]
+\begin{circuitikz}
+ \ctikzset{bipoles/length=.5cm, nodes width=0.1}%small components, big nodes
+ \foreach \a/\p [evaluate=\a as \b using (\a+180)] in
+ {-90/none, -60/circ, -30/ocirc, 0/diamondpole, 30/odiamondpole, 60/squarepole, 90/osquarepole}
+ \draw (0,0) to[R, bipole nodes={none}{\p}] ++(\a:1.5) node[font=\tiny, anchor=\b]{\p};
+\end{circuitikz}
+\end{LTXexample}
+
+
+
+These bipole nodes are added after the path is drawn, as every node in Ti\emph{k}Z --- this is the reason why they are always filled (with the main color the normal nodes, with white the open ones), in order to ``hide'' the wire below. You can override the fill color if you want; but notice that if you draw things in two different paths, you will have ``strange'' results; notice that in the second line of resistors the second wire is starting from the center of the white \texttt{ocirc} of the previous path.
+
+\begin{LTXexample}[varwidth=true,
+ pos=t, basicstyle=\small\ttfamily
+ ]
+\begin{circuitikz}
+ \draw (0,0) to[R, *-o] ++(2,0) to[R, -d] ++(2,0)
+ to[R, bipole nodes={diamondpole}{odiamondpole, fill=red}] ++(2,0);
+ \draw (0,-1) to[R, *-o] ++(2,0) ;
+ \draw (2,-1) to[R, -d] ++(2,0) to[R, bipole nodes={none}{squarepole}] ++(2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+You can define shortcuts for the \texttt{bipole bodes} you use most; for example if you want a shortcut for a bipole with open square node in red in the right side you can:
+
+\begin{LTXexample}[varwidth=true,
+ basicstyle=\small\ttfamily
+ ]
+\begin{circuitikz}
+ \ctikzset{-s/.style = {bipole nodes={none}{osquarepole, fill=red}}}
+ \draw (0,0) to[R, -s] ++(2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+There are several predefined shorthand as the above; in the following pages you can see all of them.
+
\begin{LTXexample}[varwidth=true]
\begin{circuitikz}
\draw (0,0) to[R, o-o] (2,0);
@@ -3577,7 +4102,7 @@
\subsection{Line joins between Path Components}
\label{sec:line-joins}
-Line joins should be calculated correctly, if the are on the same path and if the path is not closed. For example, the following path is not closed correctly (\textit{--cycle} does not work here!):
+Line joins should be calculated correctly - if they are on the same path, and the path is not closed. For example, the following path is not closed correctly (\textit{--cycle} does not work here!):
\begin{LTXexample}[varwidth=true]
\begin{tikzpicture}[line width=3pt,european]
\draw (0,0) to[R]++(2,0)to[R]++(0,2)
@@ -3754,7 +4279,19 @@
Use \verb|\def{\eq}{=}| \verb!to[R = $R_1\eq 12V$]! and \verb!to[ospst = open{,} 3s]! instead; see caveat in section~\ref{sec:labels-and-annotations}.
+\bigskip
+\noindent Q: I tried to change the direction of the $y$ axis with \texttt{yscale=-1}, but the circuit is completely messed up.
+
+\noindent A: Yes, it's a known bug (or misfeature, or limitation). See section~\ref{sec:bugs}. Don't do that.
+
+
+\bigskip
+
+\noindent Q: I tried to put a diode in a \texttt{pic}, but it's coming out badly rotated.
+
+\noindent A: Yes, it's a known bug (or misfeature, or limitation). See section~\ref{sec:bugs}. \Circuitikz{} is not compatible with \texttt{pic}s at this point.
+
\section{Defining new components}
\begin{quote}
@@ -3794,7 +4331,7 @@
\begin{document}
-\circuitdescbip*{damper}{Mechanical damping\footnotemark}{}(left/135/0.2, right/45/0.2, center/-90/0.3)
+\circuitdescbip*{damper}{Mechanical damping}{}(left/135/0.2, right/45/0.2, center/-90/0.3)
\geolrcoord{dampershape, fill=yellow}
@@ -3807,9 +4344,9 @@
\end{document}
\end{lstlisting}
-This will compile in something like this (in this case, we are using a couple of existing components to check everything is ok):
+This will compile to something like this (in this case, we are using a couple of existing components to check everything is ok):
-\circuitdescbip*{damper}{Mechanical damping\footnotemark}{}(left/135/0.2, right/45/0.2, center/-90/0.3)
+\circuitdescbip*{damper}{Mechanical damping}{}(left/135/0.2, right/45/0.2, center/-90/0.3)
\geolrcoord{dampershape, fill=yellow}
@@ -3930,7 +4467,7 @@
which leads to:
-\circuitdescbip*{viscoe}{Mechanical viscoelastic element\footnotemark}{}(left/135/0.2, right/45/0.2, center/-90/0.3)
+\circuitdescbip*{viscoe}{Mechanical viscoelastic element}{}(left/135/0.2, right/45/0.2, center/-90/0.3)
\geolrcoord{viscoeshape, fill=yellow}
@@ -3953,11 +4490,11 @@
Once you have a satisfactory element, you should
\begin{itemize}
\item Clean up your code;
- \item write a piece of documentation explaining its use with example;
+ \item write a piece of documentation explaining its use, with an example;
\item Propose the element for inclusion in the GitHub page of the project (you will have to license this as explained in that page, of course).
\end{itemize}
-The best way of contributing is forking the project, adding your component in the correct files, modify 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.
+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.
Modified: trunk/Master/texmf-dist/doc/latex/circuitikz/ctikzmanutils.sty
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuitikz/ctikzmanutils.sty 2019-06-15 23:38:18 UTC (rev 51386)
+++ trunk/Master/texmf-dist/doc/latex/circuitikz/ctikzmanutils.sty 2019-06-16 22:04:20 UTC (rev 51387)
@@ -32,7 +32,8 @@
% optional: scale of the component in the entry
% mandatory shape name, description, node text:
% optional between (): anchor specification list
-\NewDocumentCommand{\circuitdesc}{s O{1} m m m d()}
+% optional between []: internal nodes specification list
+\NewDocumentCommand{\circuitdesc}{s O{1} m m m d() d[]}
{
\twopartbox{%
\begin{circuitikz}[]
@@ -44,16 +45,20 @@
\IfValueT{#6}{%
\foreach \n/\a/\d in {#6} \path(N.\n) \showcoord(\n)<\a:\d>;
}
+ \IfValueT{#7}{%
+ \foreach \n/\a/\d in {#7} \path(N-\n) \showcoordb(N-\n)<\a:\d>;
+ }
\end{circuitikz}%
}{\sloppy%
{#4, type: node\IfBooleanT{#1}{, fillable}%
- } (\texttt{node[#3]\{#5\}}) \index{#3} }
+ } (\texttt{node[#3]\IfValueT{#7}{(N)}\{#5\}}) \index{#3} }
}
% description of a path-style component:
% optional: main name, if different from above
% mandatory component name, description, comma separated alias
% optional between (): anchor specification list
-\NewDocumentCommand{\circuitdescbip}{s o m m m d()}
+% optional between []: internal nodes specification list
+\NewDocumentCommand{\circuitdescbip}{s o m m m d() d[]}
{
\index{#3} \tikz\foreach \i in {#5} {\index{\i|see{#3}} };
\twopartbox{%
@@ -66,13 +71,15 @@
\IfValueT{#6}{%
\foreach \n/\a/\d in {#6} \path(B.\n) \showcoord(\n)<\a:\d>;
}
+ \IfValueT{#7}{%
+ \foreach \n/\a/\d in {#7} \path(B-\n) \showcoordb(B-\n)<\a:\d>;
+ }
\end{circuitikz}%
}{\sloppy%
\texttt{\textbf{#3}}: #4, \texttt{type: path-style\IfBooleanT{#1}{, fillable}%
- \IfValueTF{#2}{%
- , nodename: #2shape.%\drawphantomshape{#2shape}%
- }{
- , nodename: #3shape.%\drawphantomshape{#3shape}%
+ \IfValueT{#7}{, \texttt{name=B}}%
+ \IfValueTF{#2}{, nodename: #2shape.%\drawphantomshape{#2shape}%
+ }{, nodename: #3shape.%\drawphantomshape{#3shape}%
}
}%
\ifthenelse{\equal{#5}{}}{}{%
@@ -92,6 +99,11 @@
[red, inner sep=0.5pt, font=\small,
pin distance=#3\pgf at circ@Rlen, pin edge={red, }%
]#2:#1}](#1){}}
+\def\showcoordb(#1)<#2:#3>{%
+ node[circle, blue, draw, inner sep=1pt,pin={%
+ [blue, inner sep=0.5pt, font=\small,
+ pin distance=#3\pgf at circ@Rlen, pin edge={blue, }%
+ ]#2:#1}](#1){}}
\makeatother
% show anchors of a node component:
% optional: options of the circuitikz environment
Modified: trunk/Master/texmf-dist/tex/context/third/circuitikz/t-circuitikz.tex
===================================================================
--- trunk/Master/texmf-dist/tex/context/third/circuitikz/t-circuitikz.tex 2019-06-15 23:38:18 UTC (rev 51386)
+++ trunk/Master/texmf-dist/tex/context/third/circuitikz/t-circuitikz.tex 2019-06-16 22:04:20 UTC (rev 51387)
@@ -1,5 +1,5 @@
-\def\pgfcircversion{0.9.0}
-\def\pgfcircversiondate{2019/05/10}
+\def\pgfcircversion{0.9.1}
+\def\pgfcircversiondate{2019/06/16}
\writestatus{loading}{\pgfcircversiondate{} The CircuiTikz circuit drawing package version \pgfcircversion}
\usemodule[tikz]
Modified: trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcirc.defines.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcirc.defines.tex 2019-06-15 23:38:18 UTC (rev 51386)
+++ trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcirc.defines.tex 2019-06-16 22:04:20 UTC (rev 51387)
@@ -147,6 +147,8 @@
\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}
@@ -247,6 +249,7 @@
\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}
@@ -995,6 +998,7 @@
\ctikzset{tripoles/triac/diode width right/.initial=.3}
%% 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}
@@ -1017,14 +1021,17 @@
\ctikzset{tripoles/wilkinson/height/.initial=1.3}
\ctikzset{tripoles/wilkinson/width/.initial=1.3}
+\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}
@@ -1036,6 +1043,27 @@
\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}
+ \ctikzset{quadpoles/gyrator/width=0.6}
+ }
+}
+
+
%
% multipoles
%
@@ -1074,7 +1102,51 @@
\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
\ctikzset{/tikz/circuitikz/tripoles/elmech/height/.initial=.8}
@@ -1149,7 +1221,6 @@
\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=}
@@ -1158,19 +1229,6 @@
\ctikzset{bipole/annotation/position/.initial=-90}
\ctikzset{bipole/annotation/unit/.initial=}
\ctikzset{bipole/annotation/name/.initial=}
-\ctikzset{bipole/nodes/.is family}
-\ctikzset{bipole/nodes/left/.is choice}
-\ctikzset{bipole/nodes/left/none/.code={\ctikzsetvalof{bipole/nodes/left}{none}}}
-\ctikzset{bipole/nodes/left/empty/.code={\ctikzsetvalof{bipole/nodes/left}{empty}}}
-\ctikzset{bipole/nodes/left/full/.code={\ctikzsetvalof{bipole/nodes/left}{full}}}
-\ctikzset{bipole/nodes/left/diamond/.code={\ctikzsetvalof{bipole/nodes/left}{diamond}}}
-\ctikzset{bipole/nodes/left/rectjoinfill/.code={\ctikzsetvalof{bipole/nodes/left}{rectjoinfill}}}
-\ctikzset{bipole/nodes/right/.is choice}
-\ctikzset{bipole/nodes/right/none/.code={\ctikzsetvalof{bipole/nodes/right}{none}}}
-\ctikzset{bipole/nodes/right/empty/.code={\ctikzsetvalof{bipole/nodes/right}{empty}}}
-\ctikzset{bipole/nodes/right/full/.code={\ctikzsetvalof{bipole/nodes/right}{full}}}
-\ctikzset{bipole/nodes/right/diamond/.code={\ctikzsetvalof{bipole/nodes/right}{diamond}}}
-\ctikzset{bipole/nodes/right/rectjoinfill/.code={\ctikzsetvalof{bipole/nodes/right}{rectjoinfill}}}
\newif\ifpgf at circuit@europeanresistor
\ctikzset{resistor/.is choice}
@@ -1307,5 +1365,108 @@
\ctikzset{label/align/rotate/.code={\ctikzsetvalof{label/align}{rotate}}}
\ctikzset{label/align/smart/.code={\ctikzsetvalof{label/align}{smart}}}
+% seven segment displays by RGtti
+
+\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,
+ },
+}
+
+
%%%%%%%%%% new
\pgfkeys{\circuitikzbasekey/.search also={/tikz}}
+
+% Electronic tubes: diodetube, triode, tetrode and pentode
+\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}}
+
+\endinput
Modified: trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircbipoles.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircbipoles.tex 2019-06-15 23:38:18 UTC (rev 51386)
+++ trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircbipoles.tex 2019-06-16 22:04:20 UTC (rev 51387)
@@ -936,10 +936,11 @@
\pgfpathmoveto{\pgfpointorigin}
\pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
\pgf at circ@maybefill
- \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0}}\pgfpatharc{0}{90}{0.85\pgf at circ@res at right and \pgf at circ@res at up}
- \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0}}\pgfpatharc{0}{-90}{0.85\pgf at circ@res at right and \pgf at circ@res at up}
- \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0}}\pgfpatharc{180}{270}{0.85\pgf at circ@res at right and \pgf at circ@res at up}
- \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0}}\pgfpatharc{180}{90}{0.85\pgf at circ@res at right and \pgf at circ@res at up}
+ \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}}
@@ -950,7 +951,6 @@
\pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
\endpgfscope
}
-
%% DC-Voltage source
\pgfcircdeclarebipole
{}
@@ -2088,10 +2088,19 @@
\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}
- \anchor{out}{\northeast \pgf at y=0cm}
- \anchor{in}{\southwest\pgf at y=0cm}
+ \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}
@@ -2110,9 +2119,9 @@
#3
\endpgfscope
\pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
- \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+ \pgfnode{\cshape}{center}{}{\thisshape-in}{\pgfusepath{draw}}
\pgftransformshift{\pgfpoint{2\pgf at circ@res at right}{0pt}}
- \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+ \pgfnode{\cshape}{center}{}{\thisshape-out}{\pgfusepath{draw}}
}
}
@@ -2743,88 +2752,7 @@
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Handling of terminals
-
-%% Easily usable styles
-
-\ctikzset{o-o/.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=empty}}
-\ctikzset{-o/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=empty}}
-\ctikzset{o-/.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=none}}
-\ctikzset{*-o/.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=empty}}
-\ctikzset{o-*/.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=full}}
-\ctikzset{d-o/.style = {\circuitikzbasekey/bipole/nodes/left=diamond, \circuitikzbasekey/bipole/nodes/right=empty}}
-\ctikzset{o-d/.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=diamond}}
-\ctikzset{*-/.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=none}}
-\ctikzset{-*/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=full}}
-\ctikzset{d-/.style = {\circuitikzbasekey/bipole/nodes/left=diamond, \circuitikzbasekey/bipole/nodes/right=none}}
-\ctikzset{-d/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=diamond}}
-\ctikzset{*-*/.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=full}}
-\ctikzset{d-*/.style = {\circuitikzbasekey/bipole/nodes/left=diamond, \circuitikzbasekey/bipole/nodes/right=full}}
-\ctikzset{*-d/.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=diamond}}
-\ctikzset{d-d/.style = {\circuitikzbasekey/bipole/nodes/left=diamond, \circuitikzbasekey/bipole/nodes/right=diamond}}
-
-\ctikzset{.-/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=none}}
-\ctikzset{.-*/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=full}}
-\ctikzset{.-o/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=empty}}
-\ctikzset{.-d/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=diamond}}
-\ctikzset{-./.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
-\ctikzset{o-./.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
-\ctikzset{*-./.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
-\ctikzset{d-./.style = {\circuitikzbasekey/bipole/nodes/left=diamond, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
-\ctikzset{.-./.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
-
-\tikzset{reversed/.style = {\circuitikzbasekey/bipole/inverted=true}}
-
-
-%% The output routine
-
-\def\drawpoles{
- \pgfextra{ \edef\pgf at circ@temp{\ctikzvalof{bipole/nodes/left}} \def\pgf at temp{diamond} }
- \ifx\pgf at temp\pgf at circ@temp
- (\tikztostart) node[diamondpole] {}
- \else
- \pgfextra{ \def\pgf at temp{empty} }
- \ifx\pgf at temp\pgf at circ@temp
- (\tikztostart) node[ocirc] {}
- \else
- \pgfextra{ \def\pgf at temp{full} }
- \ifx\pgf at temp\pgf at circ@temp
- (\tikztostart) node[circ] {}
- \else
- \pgfextra{ \def\pgf at temp{rectjoinfill} }
- \ifx\pgf at temp\pgf at circ@temp
- (\tikztostart) node[rectjoinfill] {}
- \else
- \fi
- \fi
- \fi
- \fi
- \pgfextra{ \edef\pgf at circ@temp{\ctikzvalof{bipole/nodes/right}} \def\pgf at temp{diamond} }
- \ifx\pgf at temp\pgf at circ@temp
- (\tikztotarget) node[diamondpole] {}
- \else
- \pgfextra{ \def\pgf at temp{empty} }
- \ifx\pgf at temp\pgf at circ@temp
- (\tikztotarget) node[ocirc] {}
- \else
- \pgfextra{ \def\pgf at temp{full} }
- \ifx\pgf at temp\pgf at circ@temp
- (\tikztotarget) node[circ] {}
- \else
- \pgfextra{ \def\pgf at temp{rectjoinfill} }
- \ifx\pgf at temp\pgf at circ@temp
- (\tikztotarget) node[rectjoinfill] {}
- \else
- \fi
- \fi
- \fi
- \fi
-}
-
-
-
%% Lamp
\pgfcircdeclarebipole
@@ -4968,4 +4896,5 @@
\endpgfscope
}
+
% end of pgfcircbipoles.tex
Modified: trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcirclabel.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcirclabel.tex 2019-06-15 23:38:18 UTC (rev 51386)
+++ trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcirclabel.tex 2019-06-16 22:04:20 UTC (rev 51387)
@@ -102,15 +102,23 @@
\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 (labelcoor)
Modified: trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircmonopoles.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircmonopoles.tex 2019-06-15 23:38:18 UTC (rev 51386)
+++ trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircmonopoles.tex 2019-06-16 22:04:20 UTC (rev 51387)
@@ -792,23 +792,25 @@
\behindforegroundpath{
\pgf at circ@res at step=\ctikzvalof{monopoles/vcc/width}\pgf at circ@Rlen
\pgfscope
- \pgfpathmoveto{\pgfpointorigin}
- \pgfpathlineto{\pgfpoint{0pt}{1.5\pgf at circ@res at step}}
- \pgfusepath{draw}
+ \edef\pgf at circ@temp{\ctikzvalof{monopoles/vcc/arrow}}\edef\pgf at temp{legacy}
+ \ifx\pgf at temp\pgf at circ@temp
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
- \pgfstartlinewidth=\pgflinewidth
- \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}
- \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}
-
- \endpgfscope
+ \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
@@ -839,27 +841,28 @@
\behindforegroundpath{
\pgf at circ@res at step=\ctikzvalof{monopoles/vcc/width}\pgf at circ@Rlen
+ \pgfscope
+ \edef\pgf at circ@temp{\ctikzvalof{monopoles/vee/arrow}}\edef\pgf at temp{legacy}
+ \ifx\pgf at temp\pgf at circ@temp
- \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}
-
- \pgfstartlinewidth=\pgflinewidth
- \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}
-
\endpgfscope
}
-
}
-
% match
\pgfdeclareshape{match}{
\savedanchor{\northeast}{%
Modified: trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircmultipoles.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircmultipoles.tex 2019-06-15 23:38:18 UTC (rev 51386)
+++ trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircmultipoles.tex 2019-06-16 22:04:20 UTC (rev 51387)
@@ -27,6 +27,10 @@
% DIP (dual in line package) chips
\pgfdeclareshape{dipchip}{
+ \savedmacro\numpins{%
+ \c at pgf@counta=\pgfkeysvalueof{/tikz/circuitikz/multipoles/dipchip/num pins}%
+ \def\numpins{\the\c at pgf@counta}
+ }
\savedanchor\centerpoint{%
\pgf at x=-.5\wd\pgfnodeparttextbox%
\pgf at y=-.5\ht\pgfnodeparttextbox%
@@ -36,7 +40,7 @@
\anchor{center}{\origin}
\anchor{text}{\centerpoint}% to adjust text
\saveddimen\height{%
- \pgfmathsetlength\pgf at x{((\pgfkeysvalueof{/tikz/circuitikz/multipoles/dipchip/num pins})
+ \pgfmathsetlength\pgf at x{((\numpins)
*\pgfkeysvalueof{/tikz/circuitikz/multipoles/dipchip/pin spacing})*\pgf at circ@Rlen/2}%
}%
\saveddimen{\chipspacing}{\pgfmathsetlength\pgf at x{\pgf at circ@Rlen*\pgfkeysvalueof{/tikz/circuitikz/multipoles/dipchip/pin spacing}}}
@@ -44,7 +48,7 @@
\saveddimen{\extshift}{\pgfmathsetlength\pgf at x{\pgf at circ@Rlen*\pgfkeysvalueof{/tikz/circuitikz/multipoles/external pins width}}}
% standard anchors
\savedanchor\northwest{%
- \pgfmathsetlength\pgf at y{0.5*((\pgfkeysvalueof{/tikz/circuitikz/multipoles/dipchip/num pins})
+ \pgfmathsetlength\pgf at y{0.5*((\numpins)
*\pgfkeysvalueof{/tikz/circuitikz/multipoles/dipchip/pin spacing})*\pgf at circ@Rlen/2}%
\pgfmathsetlength\pgf at x{-0.5*\pgf at circ@Rlen*\pgfkeysvalueof{/tikz/circuitikz/multipoles/dipchip/width}}
}
@@ -90,7 +94,7 @@
\pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
% Adding the pin number
\ifpgf at circuit@chip at shownumbers
- \c at pgf@counta=\pgfkeysvalueof{/tikz/circuitikz/multipoles/dipchip/num pins}%
+ \c at pgf@counta=\numpins\relax
\divide\c at pgf@counta by 2 \pgf at circ@count at b=\c at pgf@counta
% thanks to @marmot: https://tex.stackexchange.com/a/473571/38080
\ifpgf at circuit@chip at straightnumbers
@@ -157,7 +161,7 @@
\ifdim\pgf at circ@res at other>0pt
\pgfscope
\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/multipoles/external pins thickness}\pgflinewidth}
- \c at pgf@counta=\pgfkeysvalueof{/tikz/circuitikz/multipoles/dipchip/num pins}%
+ \c at pgf@counta=\numpins\relax
\divide\c at pgf@counta by 2 \pgf at circ@count at b=\c at pgf@counta
\pgfmathloop%
\ifnum\c at pgf@counta>0
@@ -192,29 +196,18 @@
% 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.
- % If the anchor is undefined, create it. Otherwise stop.
- \c at pgf@counta=\pgfkeysvalueof{/tikz/circuitikz/multipoles/dipchip/num pins}%
- \divide\c at pgf@counta by 2 \pgf at circ@count at b=\c at pgf@counta
+ \c at pgf@counta=\numpins\relax
\pgfmathloop%
\ifnum\c at pgf@counta>0
- % left side, pins 1..npins/2
% 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\c at pgf@counta\endcsname{%
+ \noexpand\pgf at circ@dippinanchor{\the\c at pgf@counta}{1}%
+ }
\expandafter\xdef\csname pgf at anchor@dipchip at bpin\space\the\c at pgf@counta\endcsname{%
- \noexpand\pgf at circ@chippinanchorLB{\the\c at pgf@counta}%
+ \noexpand\pgf at circ@dippinanchor{\the\c at pgf@counta}{0}%
}
- \expandafter\xdef\csname pgf at anchor@dipchip at pin\space\the\c at pgf@counta\endcsname{%
- \noexpand\pgf at circ@chippinanchorL{\the\c at pgf@counta}%
- }
- % right side
- \pgf at circ@count at c=\numexpr2*\pgf at circ@count at b-\c at pgf@counta+1\relax
- \expandafter\xdef\csname pgf at anchor@dipchip at bpin\space\the\pgf at circ@count at c\endcsname{%
- \noexpand\pgf at circ@chippinanchorRB{\the\c at pgf@counta}%
- }%
- \expandafter\xdef\csname pgf at anchor@dipchip at pin\space\the\pgf at circ@count at c\endcsname{%
- \noexpand\pgf at circ@chippinanchorR{\the\c at pgf@counta}%
- }%
\advance\c at pgf@counta by -1\relax%
\repeatpgfmathloop%
}%
@@ -223,6 +216,10 @@
% QFP (quad flat package) chips
\pgfdeclareshape{qfpchip}{
+ \savedmacro\numpins{%
+ \c at pgf@counta=\pgfkeysvalueof{/tikz/circuitikz/multipoles/qfpchip/num pins}%
+ \def\numpins{\the\c at pgf@counta}
+ }
\savedanchor\centerpoint{%
\pgf at x=-.5\wd\pgfnodeparttextbox%
\pgf at y=-.5\ht\pgfnodeparttextbox%
@@ -232,11 +229,11 @@
\anchor{center}{\origin}
\anchor{text}{\centerpoint}% to adjust text
\saveddimen\height{%
- \pgfmathsetlength\pgf at x{((\pgfkeysvalueof{/tikz/circuitikz/multipoles/qfpchip/num pins}+2)
+ \pgfmathsetlength\pgf at x{((\numpins+2)
*\pgfkeysvalueof{/tikz/circuitikz/multipoles/qfpchip/pin spacing})*\pgf at circ@Rlen/4}%
}%
\saveddimen\width{%
- \pgfmathsetlength\pgf at x{((\pgfkeysvalueof{/tikz/circuitikz/multipoles/qfpchip/num pins}+2)
+ \pgfmathsetlength\pgf at x{((\numpins+2)
*\pgfkeysvalueof{/tikz/circuitikz/multipoles/qfpchip/pin spacing})*\pgf at circ@Rlen/4}%
}%
\saveddimen{\chipspacing}{\pgfmathsetlength\pgf at x{\pgf at circ@Rlen*\pgfkeysvalueof{/tikz/circuitikz/multipoles/qfpchip/pin spacing}}}
@@ -243,7 +240,7 @@
\saveddimen{\extshift}{\pgfmathsetlength\pgf at x{\pgf at circ@Rlen*\pgfkeysvalueof{/tikz/circuitikz/multipoles/external pins width}}}
% standard anchors
\savedanchor\northwest{%
- \pgfmathsetlength\pgf at y{0.5*((\pgfkeysvalueof{/tikz/circuitikz/multipoles/qfpchip/num pins}+2)
+ \pgfmathsetlength\pgf at y{0.5*((\numpins+2)
*\pgfkeysvalueof{/tikz/circuitikz/multipoles/qfpchip/pin spacing})*\pgf at circ@Rlen/4}%
\pgf at x=-\pgf at y
}
@@ -294,7 +291,7 @@
% Adding the pin number
\pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
\ifpgf at circuit@chip at shownumbers
- \c at pgf@counta=\pgfkeysvalueof{/tikz/circuitikz/multipoles/qfpchip/num pins}%
+ \c at pgf@counta=\numpins%
\divide\c at pgf@counta by 4 \pgf at circ@count at b=\c at pgf@counta
% thanks to @marmot: https://tex.stackexchange.com/a/473571/38080
\ifpgf at circuit@chip at straightnumbers
@@ -401,7 +398,7 @@
\ifdim\pgf at circ@res at other>0pt
\pgfscope
\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/multipoles/external pins thickness}\pgflinewidth}
- \c at pgf@counta=\pgfkeysvalueof{/tikz/circuitikz/multipoles/qfpchip/num pins}%
+ \c at pgf@counta=\numpins%
\divide\c at pgf@counta by 4 \pgf at circ@count at b=\c at pgf@counta
\pgfmathloop%
\ifnum\c at pgf@counta>0
@@ -452,42 +449,15 @@
% 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.
- % If the anchor is undefined, create it. Otherwise stop.
- \c at pgf@counta=\pgfkeysvalueof{/tikz/circuitikz/multipoles/qfpchip/num pins}%
- \divide\c at pgf@counta by 4 \pgf at circ@count at b=\c at pgf@counta
+ \c at pgf@counta=\numpins%
\pgfmathloop%
\ifnum\c at pgf@counta>0
- % left side; 1..npins/4
\expandafter\xdef\csname pgf at anchor@qfpchip at pin\space\the\c at pgf@counta\endcsname{%
- \noexpand\pgf at circ@chippinanchorQL{\the\c at pgf@counta}%
+ \noexpand\pgf at circ@qfppinanchor{\the\c at pgf@counta}{1}%
}
\expandafter\xdef\csname pgf at anchor@qfpchip at bpin\space\the\c at pgf@counta\endcsname{%
- \noexpand\pgf at circ@chippinanchorQLB{\the\c at pgf@counta}%
+ \noexpand\pgf at circ@qfppinanchor{\the\c at pgf@counta}{0}%
}
- % bottom side;
- \pgf at circ@count at c=\numexpr2*\pgf at circ@count at b-\c at pgf@counta+1\relax
- \expandafter\xdef\csname pgf at anchor@qfpchip at pin\space\the\pgf at circ@count at c\endcsname{%
- \noexpand\pgf at circ@chippinanchorQB{\the\c at pgf@counta}%
- }
- \expandafter\xdef\csname pgf at anchor@qfpchip at bpin\space\the\pgf at circ@count at c\endcsname{%
- \noexpand\pgf at circ@chippinanchorQBB{\the\c at pgf@counta}%
- }
- % right side; 2*npins/4+1, 3*npins/4
- \pgf at circ@count at c=\numexpr3*\pgf at circ@count at b-\c at pgf@counta+1\relax
- \expandafter\xdef\csname pgf at anchor@qfpchip at pin\space\the\pgf at circ@count at c\endcsname{%
- \noexpand\pgf at circ@chippinanchorQR{\the\c at pgf@counta}%
- }
- \expandafter\xdef\csname pgf at anchor@qfpchip at bpin\space\the\pgf at circ@count at c\endcsname{%
- \noexpand\pgf at circ@chippinanchorQRB{\the\c at pgf@counta}%
- }
- % top side
- \pgf at circ@count at c=\numexpr3*\pgf at circ@count at b+\c at pgf@counta\relax
- \expandafter\xdef\csname pgf at anchor@qfpchip at pin\space\the\pgf at circ@count at c\endcsname{%
- \noexpand\pgf at circ@chippinanchorQT{\the\c at pgf@counta}%
- }
- \expandafter\xdef\csname pgf at anchor@qfpchip at bpin\space\the\pgf at circ@count at c\endcsname{%
- \noexpand\pgf at circ@chippinanchorQTB{\the\c at pgf@counta}%
- }
\advance\c at pgf@counta-1\relax%
\repeatpgfmathloop%
}%
@@ -494,66 +464,352 @@
}
%% anchors for DIP
-\def\pgf at circ@chippinanchorR#1{%
- % When this macro is called,
- % \extshift, \height and \chipspacing will be defined.
- \pgfpoint{\width/2+\extshift}{\height/2+(\pgf at circ@dip at pin@shift-#1)*\chipspacing}%
+\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
}
-\def\pgf at circ@chippinanchorL#1{%
- % When this macro is called,
- % \extshift, \height and \chipspacing will be defined.
- \pgfpoint{-\width/2-\extshift}{\height/2+(\pgf at circ@dip at pin@shift-#1)*\chipspacing}%
+
+%% 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
}
-\def\pgf at circ@chippinanchorRB#1{%
- % When this macro is called,
- % \extshift, \height and \chipspacing will be defined.
- \pgfpoint{\width/2}{\height/2+(\pgf at circ@dip at pin@shift-#1)*\chipspacing}%
+
+
+%% Rotary Switch
+
+\pgfdeclareshape{rotaryswitch}
+{
+ \savedanchor\northeast{%
+ % 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@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@Rlen +(\a>90 ? 2 : 2*sin(\a))*\pgf at circ@res at temp}
+ \pgfmathsetlength{\pgf at x}{\r*\pgf at circ@Rlen + \pgf at circ@res at temp}
+ }
+ \savedanchor\northwest{%
+ % 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@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@Rlen +(\a>90 ? 2 : 2*sin(\a))*\pgf at circ@res at temp}
+ \pgfmathsetlength{\pgf at x}{-\r*\pgf at circ@Rlen - (\a<90 ? 1 : 1-2*cos(\a))*\pgf at circ@res at temp}
+ }
+ \savedanchor\central{%
+ % 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@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@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{%
+ \pgf at x=-\ctikzvalof{tripoles/spdt/width}\pgf at circ@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 x{0.3052*\pgf at circ@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{\pgfkeysvalueof{/tikz/circuitikz/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
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}
+ \c at pgf@counta=\channels\relax
+ \pgfmathsetmacro{\currenta}{-\angle}
+ \pgfmathloop%
+ \ifnum\c at pgf@counta>0
+ % \typeout{LOOP\space\the\c at pgf@counta\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\c at pgf@counta}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfmathsetmacro{\currenta}{\currenta+\stepa}
+ \advance\c at pgf@counta 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.
+ \c at pgf@counta=\channels\relax
+ \pgfmathloop%
+ \ifnum\c at pgf@counta>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\c at pgf@counta\endcsname{%
+ \noexpand\pgf at circ@rotaryanchor{\the\c at pgf@counta}{1}{0}%
+ }
+ \expandafter\xdef\csname pgf at anchor@rotaryswitch at cout\space\the\c at pgf@counta\endcsname{%
+ \noexpand\pgf at circ@rotaryanchor{\the\c at pgf@counta}{0}{0}%
+ }
+ \expandafter\xdef\csname pgf at anchor@rotaryswitch at aout\space\the\c at pgf@counta\endcsname{%
+ \noexpand\pgf at circ@rotaryanchor{\the\c at pgf@counta}{0}{1}%
+ }
+ \expandafter\xdef\csname pgf at anchor@rotaryswitch at sqout\space\the\c at pgf@counta\endcsname{%
+ \noexpand\pgf at circ@rotarysqanchor{\the\c at pgf@counta}{0}%
+ }
+ \advance\c at pgf@counta by -1\relax%
+ \repeatpgfmathloop%
+ }%
}
-\def\pgf at circ@chippinanchorLB#1{%
- % When this macro is called,
- % \extshift, \height and \chipspacing will be defined.
- \pgfpoint{-\width/2}{\height/2+(\pgf at circ@dip at pin@shift-#1)*\chipspacing}%
+
+\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
}
-%% anchors for QFP
-\def\pgf at circ@chippinanchorQR#1{%
- % When this macro is called,
- % \extshift, \height and \chipspacing will be defined.
- \pgfpoint{\width/2+\extshift}{\height/2+(\pgf at circ@qfp at pin@shift-#1)*\chipspacing}%
+\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
}
-\def\pgf at circ@chippinanchorQL#1{%
- % When this macro is called,
- % \extshift, \height and \chipspacing will be defined.
- \pgfpoint{-\width/2-\extshift}{\height/2+(\pgf at circ@qfp at pin@shift-#1)*\chipspacing}%
+
+% Seven segments displays
+
+\pgfdeclareshape{bare7seg}{
+ \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 x}{\ctikzvalof{seven seg/width}*\pgf at circ@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 x}{-0.5*\ctikzvalof{seven seg/width}*\pgf at circ@Rlen
+ -0.5*\ctikzvalof{seven seg/thickness}-\ctikzvalof{seven seg/box sep}}
+ \pgfmathsetlength{\pgf at y}{-\ctikzvalof{seven seg/width}*\pgf at circ@Rlen
+ -0.5*\ctikzvalof{seven seg/thickness}-\ctikzvalof{seven seg/box sep}}
+ }
+ \savedanchor{\northeast}{% both positive
+ \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@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@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 x}{0.5*\ctikzvalof{seven seg/width}*\pgf at circ@Rlen}
+ \pgfmathsetlength{\pgf at y}{\ctikzvalof{seven seg/width}*\pgf at circ@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
+ \pgfsetlinewidth{\ctikzvalof{multipoles/thickness}\pgflinewidth}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/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@chippinanchorQT#1{%
- % When this macro is called,
- % \extshift, \height and \chipspacing will be defined.
- \pgfpoint{\width/2+(\pgf at circ@qfp at pin@shift-#1)*\chipspacing}{\height/2+\extshift}%
+
+\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@chippinanchorQB#1{%
- % When this macro is called,
- % \extshift, \height and \chipspacing will be defined.
- \pgfpoint{\width/2+(\pgf at circ@qfp at pin@shift-#1)*\chipspacing}{-\height/2-\extshift}%
+\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\pgf at circ@chippinanchorQRB#1{%
- % When this macro is called,
- % \extshift, \height and \chipspacing will be defined.
- \pgfpoint{\width/2}{\height/2+(\pgf at circ@qfp at pin@shift-#1)*\chipspacing}%
+\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@chippinanchorQLB#1{%
- % When this macro is called,
- % \extshift, \height and \chipspacing will be defined.
- \pgfpoint{-\width/2}{\height/2+(\pgf at circ@qfp at pin@shift-#1)*\chipspacing}%
+\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
}
-\def\pgf at circ@chippinanchorQTB#1{%
- % When this macro is called,
- % \extshift, \height and \chipspacing will be defined.
- \pgfpoint{\width/2+(\pgf at circ@qfp at pin@shift-#1)*\chipspacing}{\height/2}%
-}
-\def\pgf at circ@chippinanchorQBB#1{%
- % When this macro is called,
- % \extshift, \height and \chipspacing will be defined.
- \pgfpoint{\width/2+(\pgf at circ@qfp at pin@shift-#1)*\chipspacing}{-\height/2}%
-}
-
Modified: trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircpath.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircpath.tex 2019-06-15 23:38:18 UTC (rev 51386)
+++ trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircpath.tex 2019-06-16 22:04:20 UTC (rev 51387)
@@ -23,14 +23,11 @@
\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,
@@ -139,7 +136,57 @@
\tikztonodes%draw pending nodes an path
}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% 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}
Modified: trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircquadpoles.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircquadpoles.tex 2019-06-15 23:38:18 UTC (rev 51386)
+++ trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircquadpoles.tex 2019-06-16 22:04:20 UTC (rev 51387)
@@ -18,7 +18,7 @@
\pgf at x=0pt
\pgf at y=0pt
}
- \savedmacro{\stretto}{\def\stretto{0.4}}
+ \savedmacro{\stretto}{\def\stretto{\ctikzvalof{quadpoles/#1/inner}}}
\savedanchor\northwest{%
\pgf at y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/height}\pgf at circ@Rlen
\pgf at y=.5\pgf at y
@@ -254,7 +254,235 @@
}
+\pgfcircdeclarequadpole{transformer}{
+ \pgf at circ@drawtransformerbasicbody
+}{\pgf at circ@drawtransformerbasicanchor}
+\pgfcircdeclarequadpole{transformer core}{
+
+ \pgf at circ@drawtransformerbasicbody
+
+ \pgfmoveto{\pgfpoint%
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf at circ@res at right}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf at circ@res at down}%
+ }
+ \pgflineto{
+ \pgfpoint
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf at circ@res at right}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf at circ@res at up}%
+ }
+
+ \pgfmoveto{\pgfpoint%
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf at circ@res at left}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf at circ@res at down}%
+ }
+ \pgflineto{
+ \pgfpoint
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf at circ@res at left}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf at circ@res at up}%
+ }
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/quadpoles/thickness}\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{\stretto\pgf at circ@res at left}{.7*\stretto\pgf at circ@res at down}}
+ \pgfpatharc{90}{270}{.7*\stretto\pgf at circ@res at down}
+
+ \pgfpathmoveto{\pgfpoint{\stretto\pgf at circ@res at right}{.7*\stretto\pgf at circ@res at up}}
+ \pgfpatharc{-90}{90}{.7*\stretto\pgf at circ@res at down}
+ \pgfusepath{draw}
+
+}{}
+
+%% four-port
+% defines a general outer box for four-ports
+% TikZ usage:
+% \draw (0,0) node[coupler](coup){\SI{-3}{dB}}
+% (coup.port1) to[short,-o] ++(-1,0)
+%
+
+\long\def\pgfcircdeclarefourport#1#2{
+ \pgfdeclareshape{#1}{
+ \anchor{center}{
+ \northwest
+ \pgf at x=0pt
+ \pgf at y=0pt
+ }
+ \savedanchor\northwest{%
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/height}\pgf at circ@Rlen
+ \pgf at y=.5\pgf at y
+ \pgf at x=.5\pgf at circ@Rlen
+ \pgf at x=-\pgfkeysvalueof{/tikz/circuitikz/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{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{\pgfkeysvalueof{/tikz/circuitikz/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
+
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
+ \pgfusepath{draw}
+
+ % 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}
+
+ \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}
+ \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}
+
+ \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}
+ \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}
+}
+
% contrib Kristofer M. Monisit
\pgfdeclareshape{fd op amp}
@@ -650,233 +878,3 @@
\pgfusepath{draw}
}
}
-
-
-\pgfcircdeclarequadpole{transformer}{
- \pgf at circ@drawtransformerbasicbody
-}{\pgf at circ@drawtransformerbasicanchor}
-
-\pgfcircdeclarequadpole{transformer core}{
-
- \pgf at circ@drawtransformerbasicbody
-
- \pgfmoveto{\pgfpoint%
- {\ctikzvalof{quadpoles/transformer core/core width}\pgf at circ@res at right}%
- {\ctikzvalof{quadpoles/transformer core/core height}\pgf at circ@res at down}%
- }
- \pgflineto{
- \pgfpoint
- {\ctikzvalof{quadpoles/transformer core/core width}\pgf at circ@res at right}%
- {\ctikzvalof{quadpoles/transformer core/core height}\pgf at circ@res at up}%
- }
-
- \pgfmoveto{\pgfpoint%
- {\ctikzvalof{quadpoles/transformer core/core width}\pgf at circ@res at left}%
- {\ctikzvalof{quadpoles/transformer core/core height}\pgf at circ@res at down}%
- }
- \pgflineto{
- \pgfpoint
- {\ctikzvalof{quadpoles/transformer core/core width}\pgf at circ@res at left}%
- {\ctikzvalof{quadpoles/transformer core/core height}\pgf at circ@res at up}%
- }
-
- \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}
-
- \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/quadpoles/thickness}\pgflinewidth}
- \pgfpathmoveto{\pgfpoint{\stretto\pgf at circ@res at left}{.7*\stretto\pgf at circ@res at down}}
- \pgfpatharc{90}{270}{.7*\stretto\pgf at circ@res at down}
-
- \pgfpathmoveto{\pgfpoint{\stretto\pgf at circ@res at right}{.7*\stretto\pgf at circ@res at up}}
- \pgfpatharc{-90}{90}{.7*\stretto\pgf at circ@res at down}
- \pgfusepath{draw}
-
-}{}
-
-%% four-port
-% defines a general outer box for four-ports
-% TikZ usage:
-% \draw (0,0) node[coupler](coup){\SI{-3}{dB}}
-% (coup.port1) to[short,-o] ++(-1,0)
-%
-
-\long\def\pgfcircdeclarefourport#1#2{
- \pgfdeclareshape{#1}{
- \anchor{center}{
- \northwest
- \pgf at x=0pt
- \pgf at y=0pt
- }
- \savedanchor\northwest{%
- \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/height}\pgf at circ@Rlen
- \pgf at y=.5\pgf at y
- \pgf at x=.5\pgf at circ@Rlen
- \pgf at x=-\pgfkeysvalueof{/tikz/circuitikz/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{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{\pgfkeysvalueof{/tikz/circuitikz/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
-
- \pgfstartlinewidth=\pgflinewidth
-
- % draw outer box
- \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
- \pgfusepath{draw}
-
- % 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}
-
- \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}
- \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}
-
- \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}
- \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}
-}
Modified: trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircshapes.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircshapes.tex 2019-06-15 23:38:18 UTC (rev 51386)
+++ trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircshapes.tex 2019-06-16 22:04:20 UTC (rev 51387)
@@ -126,7 +126,7 @@
\pgfpointorigin
}
\savedanchor\northwest{%
- \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/nodes width}\pgf at circ@Rlen
+ \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 }
@@ -143,16 +143,28 @@
\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
+ % \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}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf at circ@Rlen}
+ \pgfmathsetlength{\pgf at circ@res at temp}{\ctikzvalof{nodes width}*\pgf at circ@Rlen}
\pgftransformrotate{45}
\pgfpathrectanglecorners
- {\pgfpoint{\pgf at circ@res at left-\pgf at circ@res at temp}{\pgf at circ@res at up+\pgf at circ@res at temp}}
- {\pgfpoint{\pgf at circ@res at left+\pgf at circ@res at temp}{\pgf at circ@res at up-\pgf at circ@res at temp}}
+ {\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{\pgfkeysvalueof{/tikz/circuitikz/color}}
\pgfsetfillopacity{1.0}
\pgfusepath{draw,fill}
@@ -160,6 +172,155 @@
}
}
+%% 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{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \ifx\tikz at fillcolor\pgfutil at empty
+ \pgfsetfillcolor{white}
+ \else
+ \pgfsetfillcolor{\tikz at fillcolor}
+ \fi
+ \pgfsetfillopacity{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}{\pgfqpoint{\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{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetfillopacity{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}{\pgfqpoint{\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{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \ifx\tikz at fillcolor\pgfutil at empty
+ \pgfsetfillcolor{white}
+ \else
+ \pgfsetfillcolor{\tikz at fillcolor}
+ \fi
+ \pgfsetfillopacity{1.0}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ }
+}
% BNC connector
\pgfdeclareshape{bnc}{
Modified: trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcirctripoles.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcirctripoles.tex 2019-06-15 23:38:18 UTC (rev 51386)
+++ trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcirctripoles.tex 2019-06-16 22:04:20 UTC (rev 51387)
@@ -145,14 +145,24 @@
\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{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 }
@@ -173,7 +183,7 @@
\pgfscope
% This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
- \pgf at circ@res at temp=\pgfkeysvalueof{/tikz/circuitikz/nodes width}\pgf at circ@Rlen
+ \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}}
@@ -186,15 +196,15 @@
% terminals
\pgfscope
\pgftransformshift{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
- \pgfnode{ocirc}{center}{}{spdt1}{\pgfusepath{stroke}}
+ \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{ocirc}{center}{}{}{\pgfusepath{stroke}}
+ \pgfnode{\cshape}{center}{}{\thisshape-out 2}{\pgfusepath{stroke}}
\endpgfscope
\pgfscope
\pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
- \pgfnode{ocirc}{center}{}{spdt2}{\pgfusepath{stroke}}
+ \pgfnode{\cshape}{center}{}{\thisshape-in}{\pgfusepath{stroke}}
\endpgfscope
}
@@ -347,14 +357,14 @@
\pgf at circ@res at right = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/width}\pgf at circ@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=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/inputs}\relax%
- \fi
+ }%
+ \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=\pgfkeysvalueof{/tikz/circuitikz/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
+ \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
@@ -4178,4 +4188,346 @@
}
}
+% 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}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northwest{%
+ \pgf at circ@res at up=\ctikzvalof{tubes/height}\pgf at circ@Rlen
+ \pgf at circ@res at right=\ctikzvalof{tubes/width}\pgf at circ@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
+ \pgfsetlinewidth{\ctikzvalof{tripoles/thickness}\pgflinewidth}
+
+ % Setup to draw tube
+ \pgf at circ@res at up=\ctikzvalof{tubes/height}\pgf at circ@Rlen
+ \pgf at circ@res at right=\ctikzvalof{tubes/width}\pgf at circ@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 fill color (if any)
+ \ifx\tikz at fillcolor\pgfutil at empty
+ \else
+ \pgfscope
+ \pgfsetfillcolor{\tikz at fillcolor}
+ \pgf at circ@tubes at drawtube
+ \pgfusepath{fill}
+ \endpgfscope
+ \fi
+
+ % 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@Rlen
+ \pgf at circ@res at right=\ctikzvalof{tubes/width}\pgf at circ@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
+
+ % 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} {%
+ \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
+ \@tempcnta=\ctikzvalof{tubes/grid dashes} % dashes*2+1
+ \multiply\@tempcnta by 2\relax
+ \advance\@tempcnta by 1\relax
+ \advance\pgf at circ@res at step by -\pgf at xa
+ \divide\pgf at circ@res at step by \@tempcnta
+ % Grid dashes: draw
+ \pgf at circ@res at temp=\pgf at xa
+ \@tempcnta=\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\@tempcnta by-1
+ \ifnum\@tempcnta>0\relax
+ \repeat
+}
+
+\pgfcircdeclaretube{tetrode}
+{
+ \anchor{grid} {%
+ \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
+ \@tempcnta=\ctikzvalof{tubes/grid dashes} % dashes*2+1
+ \multiply\@tempcnta by 2\relax
+ \advance\@tempcnta by 1\relax
+ \advance\pgf at circ@res at step by -\pgf at xa
+ \divide\pgf at circ@res at step by \@tempcnta
+ % Grid dashes: draw
+ \pgf at circ@res at temp=\pgf at xa
+ \@tempcnta=\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\@tempcnta by-1
+ \ifnum\@tempcnta>0\relax
+ \repeat
+}
+
+\pgfcircdeclaretube{pentode}
+{
+ \anchor{grid} {%
+ \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
+ \@tempdimc=\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}{\@tempdimc}}
+ \pgfpathlineto{\pgfpoint{\pgf at xa}{\@tempdimc}}
+ % 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
+ \@tempcnta=\ctikzvalof{tubes/grid dashes} % dashes*2+1
+ \multiply\@tempcnta by 2\relax
+ \advance\@tempcnta by 1\relax
+ \advance\pgf at circ@res at step by -\pgf at xa
+ \divide\pgf at circ@res at step by \@tempcnta
+ % Grid dashes: draw
+ \pgf at circ@res at temp=\pgf at xa
+ \@tempcnta=\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}{\@tempdimc}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at temp+\pgf at circ@res at step}{\@tempdimc}}
+ \advance\pgf at circ@res at temp by\pgf at circ@res at step
+ \advance\@tempcnta by-1
+ \ifnum\@tempcnta>0\relax
+ \repeat
+}
+
\endinput
Added: trunk/Master/texmf-dist/tex/latex/circuitikz/circuitikz-0.4.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/circuitikz/circuitikz-0.4.sty (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/circuitikz/circuitikz-0.4.sty 2019-06-16 22:04:20 UTC (rev 51387)
@@ -0,0 +1,10127 @@
+% Copyright 2007-2009 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 file doc/LICENSE for more details.
+
+
+%%%%%
+%%%%%
+%%%%%
+%%%%% Se c'è l'opzione symbol, fallback to siunitx con warning
+%%%%%
+%%%%%
+
+\NeedsTeXFormat{LaTeX2e}
+
+\def\pgfcircversion{0.4}
+\def\pgfcircversiondate{2012/12/20}
+
+\ProvidesPackage{circuitikz-0.4}%
+ [\pgfcircversiondate{} The CircuiTikz circuit drawing package version \pgfcircversion]
+
+%% Version 2.0 of pgf/TikZ is required
+\RequirePackage{tikz}
+\usetikzlibrary{calc}
+\usepgflibrary{decorations.pathmorphing,arrows}
+
+\DeclareOption{european}{
+ \ctikzset{voltage=european} \ctikzset{current=european} \ctikzset{inductor=european}
+ \ctikzset{resistor=european} \ctikzset{logic ports=european} \ctikzset{gas filled surge arrester = european}
+}
+
+\DeclareOption{american}{
+ \ctikzset{voltage=american} \ctikzset{current=american} \ctikzset{resistor=american} \ctikzset{inductor=american} \ctikzset{gas filled surge arrester = american}
+ \ctikzset{logic ports = american}
+}
+
+\DeclareOption{fulldiodes}{
+ \ctikzset{diode = full}
+}
+
+\DeclareOption{emptydiodes}{
+ \ctikzset{diode = empty}
+}
+
+\DeclareOption{europeanvoltages}{
+ \ctikzset{voltage=european}
+}
+
+\DeclareOption{americanvoltages}{
+ \ctikzset{voltage=american}
+}
+
+\DeclareOption{europeancurrents}{
+ \ctikzset{current = european}
+}
+
+\DeclareOption{americancurrents}{
+ \ctikzset{current = american}
+}
+
+\DeclareOption{europeanvoltages}{
+ \ctikzset{voltage = european}
+}
+
+\DeclareOption{americanresistors}{
+ \ctikzset{resistor = american}
+}
+
+\DeclareOption{europeanresistors}{
+ \ctikzset{resistor = european}
+}
+
+\DeclareOption{americaninductors}{
+ \ctikzset{inductor = american}
+}
+
+\DeclareOption{europeaninductors}{
+ \ctikzset{inductor = european}
+}
+
+\DeclareOption{cuteinductors}{
+ \ctikzset{inductor = cute}
+}
+
+\DeclareOption{americanports}{
+ \ctikzset{logic ports = american}
+}
+
+\DeclareOption{europeanports}{
+ \ctikzset{logic ports = european}
+}
+
+\DeclareOption{americangfsurgearrester}{
+ \ctikzset{gas filled surge arrester = american}
+}
+
+\DeclareOption{europeangfsurgearrester}{
+ \ctikzset{gas filled surge arrester = european}
+}
+
+
+\DeclareOption{siunitx}{
+ \pgf at circ@siunitxtrue
+}
+
+\DeclareOption{nosiunitx}{
+ \pgf at circ@siunitxfalse
+}
+
+\DeclareOption{arrowmos}{
+ \pgf at circuit@mos at arrowstrue
+}
+
+\DeclareOption{noarrowmos}{
+ \pgf at circuit@mos at arrowsfalse
+}
+
+\DeclareOption{straightlabels}{
+ \ctikzset{label/align = straight}
+}
+
+\DeclareOption{rotatelabels}{
+ \ctikzset{label/align = rotate}
+}
+
+\DeclareOption{smartlabels}{
+ \ctikzset{label/align = smart}
+}
+
+
+
+\DeclareOption{fulldiode}{
+ \ctikzset{diode = full}
+}
+
+\DeclareOption{emptydiode}{
+ \ctikzset{diode = empty}
+}
+
+\DeclareOption{europeanvoltage}{
+ \ctikzset{voltage=european}
+}
+
+\DeclareOption{americanvoltage}{
+ \ctikzset{voltage=american}
+}
+
+\DeclareOption{europeancurrent}{
+ \ctikzset{current = european}
+}
+
+\DeclareOption{americancurrent}{
+ \ctikzset{current = american}
+}
+
+\DeclareOption{europeanvoltage}{
+ \ctikzset{voltage = european}
+}
+
+\DeclareOption{americanresistor}{
+ \ctikzset{resistor = american}
+}
+
+\DeclareOption{europeanresistor}{
+ \ctikzset{resistor = european}
+}
+
+\DeclareOption{americaninductor}{
+ \ctikzset{inductor = american}
+}
+
+\DeclareOption{europeaninductor}{
+ \ctikzset{inductor = european}
+}
+
+\DeclareOption{cuteinductor}{
+ \ctikzset{inductor = cute}
+}
+
+\DeclareOption{americanport}{
+ \ctikzset{logic ports = american}
+}
+
+\DeclareOption{europeanport}{
+ \ctikzset{logic ports = european}
+}
+
+\DeclareOption{europeanport}{
+ \ctikzset{logic ports = european}
+}
+
+\DeclareOption{betterproportions}{
+ \ctikzset{monopoles/ground/width/.initial=.15}
+
+ \ctikzset{bipoles/resistor/height/.initial=.23}
+ \ctikzset{bipoles/resistor/width/.initial=.6}
+ \ctikzset{bipoles/capacitor/height/.initial=.4}
+ \ctikzset{bipoles/capacitor/width/.initial=.1}
+ \ctikzset{bipoles/potentiometer/height/.initial=.6}
+ \ctikzset{bipoles/potentiometer/height 2/.initial=.23}
+ \ctikzset{bipoles/potentiometer/width/.initial=.6}
+ \ctikzset{bipoles/photoresistor/height/.initial=.6}
+ \ctikzset{bipoles/photoresistor/height 2/.initial=.23}
+ \ctikzset{bipoles/photoresistor/width/.initial=.6}
+ \ctikzset{bipoles/thermistor/main/.initial=.7}
+ \ctikzset{bipoles/thermistor/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/thermistor/width/.initial=.6}
+ \ctikzset{bipoles/thermistorntc/width/.initial=.6}
+ \ctikzset{bipoles/thermistorntc/main/.initial=.7}
+ \ctikzset{bipoles/thermistorntc/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/thermistorntc/height 2/.initial=.75}%.23/.7
+ \ctikzset{bipoles/thermistorptc/width/.initial=.6}
+ \ctikzset{bipoles/thermistorptc/main/.initial=.7}
+ \ctikzset{bipoles/thermistorptc/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/varistor/main/.initial=.7}
+ \ctikzset{bipoles/varistor/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/varistor/width/.initial=.6}
+ \ctikzset{bipoles/vresistor/height/.initial=.45}
+ \ctikzset{bipoles/vresistor/width/.initial=.6}
+ \ctikzset{bipoles/cuteinductor/height/.initial=.23}
+ \ctikzset{bipoles/cuteinductor/width/.initial=.6}
+ \ctikzset{bipoles/cuteinductor/coils/.initial=6}
+ \ctikzset{bipoles/americaninductor/height/.initial=.23}
+ \ctikzset{bipoles/americaninductor/height 2/.initial=.1}
+ \ctikzset{bipoles/americaninductor/width/.initial=.6}
+ \ctikzset{bipoles/americaninductor/coils/.initial=4}
+ \ctikzset{bipoles/vcuteinductor/height/.initial=.6}
+ \ctikzset{bipoles/vcuteinductor/coil height/.initial=.23}
+ \ctikzset{bipoles/vcuteinductor/width/.initial=.6}
+ \ctikzset{bipoles/vcuteinductor/coils/.initial=6}
+ \ctikzset{bipoles/vamericaninductor/height/.initial=.45}
+ \ctikzset{bipoles/vamericaninductor/height 2/.initial=.2}
+ \ctikzset{bipoles/vamericaninductor/width/.initial=.6}
+ \ctikzset{bipoles/vamericaninductor/coils/.initial=4}
+ \ctikzset{bipoles/generic/height/.initial=.23}
+ \ctikzset{bipoles/generic/width/.initial=.6}
+ \ctikzset{bipoles/generic potentiometer/height/.initial=.6}
+ \ctikzset{bipoles/generic potentiometer/height 2/.initial=.23}
+ \ctikzset{bipoles/generic potentiometer/width/.initial=.6}
+ \ctikzset{bipoles/ageneric/height/.initial=.23}
+ \ctikzset{bipoles/ageneric/width/.initial=.6}
+ \ctikzset{bipoles/memristor/height/.initial=.23}
+ \ctikzset{bipoles/memristor/wave height/.initial=.375}
+ \ctikzset{bipoles/memristor/width/.initial=.60}
+ \ctikzset{bipoles/tgeneric/height/.initial=.525}
+ \ctikzset{bipoles/tgeneric/width/.initial=.6}
+ \ctikzset{bipoles/tfullgeneric/height/.initial=.525}
+ \ctikzset{bipoles/tfullgeneric/width/.initial=.60}
+ \ctikzset{bipoles/fullgeneric/height/.initial=.23}
+ \ctikzset{bipoles/fullgeneric/width/.initial=.6}
+ \ctikzset{bipoles/diode/height/.initial=.3}
+ \ctikzset{bipoles/diode/width/.initial=.25}
+
+ \ctikzset{tripoles/thyristor/height/.initial=.66}
+ \ctikzset{tripoles/thyristor/height 2/.initial=.3}
+ \ctikzset{tripoles/thyristor/width/.initial=.6}
+ \ctikzset{tripoles/thyristor/diode height/.initial=.3}
+ \ctikzset{tripoles/thyristor/diode width left/.initial=.4}
+ \ctikzset{tripoles/thyristor/diode width right/.initial=.3}
+
+ \ctikzset{tripoles/triac/height/.initial=.66}
+ \ctikzset{tripoles/triac/width/.initial=.6}
+ \ctikzset{tripoles/triac/diode width left/.initial=.3}
+ \ctikzset{tripoles/triac/diode width right/.initial=.3}
+}
+
+%%%%%%%%%
+
+
+
+%%%%%%%%%%% Springe nach circuitikz.code
+%%%---------- open: circuitikz.code.tex
+
+%% Options
+
+
+
+
+%% Keys
+
+\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}}
+
+\newif\ifpgf at circuit@inputarrow
+\ctikzset{inputarrow/.is choice}
+\ctikzset{inputarrow/true/.code={\pgf at circuit@inputarrowtrue}}
+\ctikzset{inputarrow/false/.code={\pgf at circuit@inputarrowfalse}}
+
+\ctikzset{bipoles/.is family}
+\ctikzset{bipoles/border margin/.initial=1.1}
+\ctikzset{bipoles/thickness/.initial=2}
+\ctikzset{bipoles/length/.initial=1.4cm}
+\ctikzset{nodes width/.initial=.04}
+\newdimen\pgf at circ@Rlen
+\ctikzset{bipoles/length/.code={\pgf at circ@Rlen = #1}}
+
+
+\ctikzset{monopoles/.is family}
+\ctikzset{monopoles/ground/width/.initial=.25}
+\ctikzset{monopoles/chassis/width/.initial=.25}
+\ctikzset{monopoles/alternative chassis/width/.initial=.25}
+\ctikzset{monopoles/equipotentiality/width/.initial=.25}
+\ctikzset{monopoles/tlinestub/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/tground/thickness/.initial=3}
+\ctikzset{monopoles/vcc/width/.initial=.2}
+\ctikzset{monopoles/match/width/.initial=.4}
+\ctikzset{monopoles/oscillator/width/.initial=.7}
+
+\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/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/vresistor/height/.initial=.6}
+\ctikzset{bipoles/vresistor/width/.initial=.8}
+\ctikzset{bipoles/cuteinductor/height/.initial=.3}
+\ctikzset{bipoles/cuteinductor/width/.initial=.8}
+\ctikzset{bipoles/cuteinductor/coils/.initial=6}
+\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/vcuteinductor/height/.initial=.6}
+\ctikzset{bipoles/vcuteinductor/coil height/.initial=.3}
+\ctikzset{bipoles/vcuteinductor/width/.initial=.8}
+\ctikzset{bipoles/vcuteinductor/coils/.initial=6}
+\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/isource/height/.initial=.60}
+\ctikzset{bipoles/isource/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/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/capacitor/height/.initial=.6}
+\ctikzset{bipoles/capacitor/width/.initial=.2}
+\ctikzset{bipoles/pcapacitor/height/.initial=.6}
+\ctikzset{bipoles/pcapacitor/width/.initial=.2}
+\ctikzset{bipoles/pcapacitor/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/battery/height/.initial=.6}
+\ctikzset{bipoles/battery/width/.initial=.3}
+\ctikzset{bipoles/battery1/height/.initial=.6}
+\ctikzset{bipoles/battery1/width/.initial=.3}
+\ctikzset{bipoles/diode/height/.initial=.50}
+\ctikzset{bipoles/diode/width/.initial=.40}
+\ctikzset{bipoles/varcap/height/.initial=.50}
+\ctikzset{bipoles/varcap/width/.initial=.45}
+\ctikzset{bipoles/interr/height/.initial=.35}
+\ctikzset{bipoles/interr/width/.initial=.35}
+\ctikzset{bipoles/interr/height 2/.initial=.1}
+\ctikzset{bipoles/generic/height/.initial=.30}
+\ctikzset{bipoles/generic/width/.initial=.80}
+\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/generic potentiometer/height/.initial=.80}
+\ctikzset{bipoles/generic potentiometer/height 2/.initial=.30}
+\ctikzset{bipoles/generic potentiometer/width/.initial=.80}
+\ctikzset{bipoles/ageneric/height/.initial=.30}
+\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}
+\ctikzset{bipoles/tgeneric/height/.initial=.70}
+\ctikzset{bipoles/tgeneric/width/.initial=.80}
+\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{bipoles/open/height/.initial=.25}
+\ctikzset{bipoles/open/width/.initial=.8}
+\ctikzset{bipoles/ammeter/height/.initial=.60}
+\ctikzset{bipoles/ammeter/width/.initial=.60}
+\ctikzset{bipoles/voltmeter/height/.initial=.60}
+\ctikzset{bipoles/voltmeter/width/.initial=.60}
+\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{bipoles/lamp/height/.initial=.60}
+\ctikzset{bipoles/lamp/width/.initial=.60}
+\ctikzset{bipoles/tline/height/.initial=.3}
+\ctikzset{bipoles/tline/width/.initial=.8}
+\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/thermocouple/height/.initial=.250}
+\ctikzset{bipoles/thermocouple/height 2/.initial=.60}
+\ctikzset{bipoles/thermocouple/width/.initial=.140}
+\ctikzset{bipoles/pushbutton/height/.initial=.5}
+\ctikzset{bipoles/pushbutton/height 2/.initial=.0}
+\ctikzset{bipoles/pushbutton/width/.initial=.50}
+\ctikzset{bipoles/twoport/width/.initial=.7}
+\ctikzset{bipoles/twoport/height/.initial=.7}
+\ctikzset{bipoles/twoport/text/.initial=}
+\ctikzset{bipoles/vco/width/.initial=.7}
+\ctikzset{bipoles/bandpass/width/.initial=.7}
+\ctikzset{bipoles/highpass/width/.initial=.7}
+\ctikzset{bipoles/lowpass/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}
+
+\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}}
+\ctikzset{tripoles/nmos/width/.initial=.7}
+\ctikzset{tripoles/nmos/gate height/.initial=.35}
+\ctikzset{tripoles/nmos/base height/.initial=.5}
+\ctikzset{tripoles/nmos/height/.initial=1.1}
+\ctikzset{tripoles/nmos/base width/.initial=.5}
+\ctikzset{tripoles/nmos/gate width/.initial=.62}
+\ctikzset{tripoles/pmos/width/.initial=.7}
+\ctikzset{tripoles/pmos/gate height/.initial=.35}
+\ctikzset{tripoles/pmos/base height/.initial=.5}
+\ctikzset{tripoles/pmos/height/.initial=1.1}
+\ctikzset{tripoles/pmos/base width/.initial=.5}
+\ctikzset{tripoles/pmos/gate width/.initial=.62}
+
+\ctikzset{tripoles/nfet/width/.initial=.7}
+\ctikzset{tripoles/nfet/gate height/.initial=.35}
+\ctikzset{tripoles/nfet/base height/.initial=.5}
+\ctikzset{tripoles/nfet/height/.initial=1.1}
+\ctikzset{tripoles/nfet/base width/.initial=.5}
+\ctikzset{tripoles/nfet/gate width/.initial=.62}
+
+\ctikzset{tripoles/pfet/width/.initial=.7}
+\ctikzset{tripoles/pfet/gate height/.initial=.35}
+\ctikzset{tripoles/pfet/base height/.initial=.5}
+\ctikzset{tripoles/pfet/height/.initial=1.1}
+\ctikzset{tripoles/pfet/base width/.initial=.5}
+\ctikzset{tripoles/pfet/gate width/.initial=.62}
+
+\ctikzset{tripoles/nigfete/width/.initial=.7}
+\ctikzset{tripoles/nigfete/gate height/.initial=.35}
+\ctikzset{tripoles/nigfete/base height/.initial=.5}
+\ctikzset{tripoles/nigfete/height/.initial=1.1}
+\ctikzset{tripoles/nigfete/base width/.initial=.5}
+\ctikzset{tripoles/nigfete/gate width/.initial=.62}
+
+\ctikzset{tripoles/nigfetd/width/.initial=.7}
+\ctikzset{tripoles/nigfetd/gate height/.initial=.35}
+\ctikzset{tripoles/nigfetd/base height/.initial=.5}
+\ctikzset{tripoles/nigfetd/height/.initial=1.1}
+\ctikzset{tripoles/nigfetd/base width/.initial=.5}
+\ctikzset{tripoles/nigfetd/gate width/.initial=.62}
+
+\ctikzset{tripoles/pigfete/width/.initial=.7}
+\ctikzset{tripoles/pigfete/gate height/.initial=.35}
+\ctikzset{tripoles/pigfete/base height/.initial=.5}
+\ctikzset{tripoles/pigfete/height/.initial=1.1}
+\ctikzset{tripoles/pigfete/base width/.initial=.5}
+\ctikzset{tripoles/pigfete/gate width/.initial=.62}
+
+\ctikzset{tripoles/pigfetd/width/.initial=.7}
+\ctikzset{tripoles/pigfetd/gate height/.initial=.35}
+\ctikzset{tripoles/pigfetd/base height/.initial=.5}
+\ctikzset{tripoles/pigfetd/height/.initial=1.1}
+\ctikzset{tripoles/pigfetd/base width/.initial=.5}
+\ctikzset{tripoles/pigfetd/gate width/.initial=.62}
+
+\ctikzset{tripoles/npn/width/.initial=.6}
+\ctikzset{tripoles/npn/gate height/.initial=.45}
+\ctikzset{tripoles/npn/gate height 2/.initial=.15}
+\ctikzset{tripoles/npn/base height/.initial=.4}
+\ctikzset{tripoles/npn/height/.initial=1.1}
+\ctikzset{tripoles/npn/gate width/.initial=.5}
+
+
+
+\ctikzset{tripoles/pnp/width/.initial=.6}
+\ctikzset{tripoles/pnp/gate height/.initial=.45}
+\ctikzset{tripoles/pnp/gate height 2/.initial=.15}
+\ctikzset{tripoles/pnp/base height/.initial=.4}
+\ctikzset{tripoles/pnp/height/.initial=1.1}
+\ctikzset{tripoles/pnp/gate width/.initial=.5}
+
+\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/height/.initial=1.1}
+\ctikzset{tripoles/pigbt/gate width/.initial=.62}
+\ctikzset{tripoles/pigbt/base width/.initial=.5}
+\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/height/.initial=1.1}
+\ctikzset{tripoles/nigbt/gate width/.initial=.62}
+\ctikzset{tripoles/nigbt/base width/.initial=.5}
+
+\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/height/.initial=1.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/height/.initial=1.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/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}
+
+\newif\ifpgf at circuit@europeanlogicport
+\ctikzset{logic ports/.is choice}
+\ctikzset{logic ports/european/.code= {\pgf at circuit@europeanlogicporttrue } }
+\ctikzset{logic ports/american/.code= {\pgf at circuit@europeanlogicportfalse } }
+
+\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}}
+
+\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 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/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/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}
+\ctikzset{tripoles/american xnor port/circle width/.initial=.15}
+\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 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}
+\ctikzset{tripoles/op amp/width/.initial=1.7}
+\ctikzset{tripoles/op amp/port width/.initial=.7}
+\ctikzset{tripoles/op amp/height/.initial=1.4}
+\ctikzset{tripoles/op amp/input height/.initial=.5}
+\ctikzset{tripoles/op amp/up pos/.initial=.45}
+\ctikzset{tripoles/plain amp/width/.initial=1.7}
+\ctikzset{tripoles/plain amp/port width/.initial=.7}
+\ctikzset{tripoles/plain amp/height/.initial=1.4}
+\ctikzset{tripoles/plain amp/input height/.initial=.5}
+\ctikzset{tripoles/plain amp/up pos/.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}
+
+\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}
+
+\ctikzset{tripoles/mixer/width/.initial=0.7}
+\ctikzset{tripoles/adder/width/.initial=0.7}
+\ctikzset{tripoles/circulator/width/.initial=.7}
+
+\ctikzset{tripoles/wilkinson/height/.initial=1.3}
+\ctikzset{tripoles/wilkinson/width/.initial=1.3}
+
+\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/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/width/.initial=1.5}
+\ctikzset{quadpoles/gyrator/height/.initial=1.5}
+\ctikzset{quadpoles/coupler/width/.initial=1.3}
+\ctikzset{quadpoles/coupler/height/.initial=1.3}
+
+\ctikzset{bipole/.is family}
+\ctikzset{bipole/kind/.initial = }
+\ctikzset{bipole/name/.initial = }
+\newif\ifpgf at circuit@bipole at reversed
+\ctikzset{bipole/reversed/.is if=pgf at circuit@bipole at reversed}
+\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 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/label/.is family}
+\ctikzset{bipole/label/position/.initial=90}
+\ctikzset{bipole/label/unit/.initial=}
+\ctikzset{bipole/label/name/.initial=}
+\ctikzset{bipole/nodes/.is family}
+\ctikzset{bipole/nodes/left/.is choice}
+\ctikzset{bipole/nodes/left/none/.code={\ctikzsetvalof{bipole/nodes/left}{none}}}
+\ctikzset{bipole/nodes/left/empty/.code={\ctikzsetvalof{bipole/nodes/left}{empty}}}
+\ctikzset{bipole/nodes/left/full/.code={\ctikzsetvalof{bipole/nodes/left}{full}}}
+\ctikzset{bipole/nodes/right/.is choice}
+\ctikzset{bipole/nodes/right/none/.code={\ctikzsetvalof{bipole/nodes/right}{none}}}
+\ctikzset{bipole/nodes/right/empty/.code={\ctikzsetvalof{bipole/nodes/right}{empty}}}
+\ctikzset{bipole/nodes/right/full/.code={\ctikzsetvalof{bipole/nodes/right}{full}}}
+
+
+\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 }
+
+\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}}}
+
+\newif\ifpgf at circuit@fulldiode
+\ctikzset{diode/.is if=pgf at circuit@fulldiode}
+\ctikzset{diode/.is choice}
+\ctikzset{diode/empty/.code = \pgf at circuit@fulldiodefalse }
+\ctikzset{diode/full/.code = \pgf at circuit@fulldiodetrue }
+\ctikzset{thickness/.initial=2}
+\ctikzset{color/.initial=black}
+\pgfkeys{/tikz/color/.add code={}{\ctikzset{color=#1}}}
+
+
+\newif\ifpgf at circ@siunitx
+\newif\ifpgf at circ@siunitx at res
+
+\ctikzset{voltage/.is family}
+\ctikzset{voltage/distance from node/.initial=.5} %\pgf at circ@Rlen units
+\ctikzset{voltage/distance from line/.initial=.08} % pos, tra 0 e 1
+\ctikzset{voltage/bump a/.initial=1.2}
+\ctikzset{voltage/bump b/.initial=1.5}
+\ctikzset{voltage/european label distance/.initial=1.4}
+\ctikzset{voltage/american label distance/.initial=1.1}
+% special cases
+\ctikzset{bipoles/generic/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/generic/voltage/bump b/.initial=2}
+\ctikzset{bipoles/generic/voltage/european label distance/.initial=1.8}
+%\ctikzset{bipoles/thermocouple/voltage/distance from node/.initial=.3}
+\ctikzset{bipoles/thermocouple/voltage/bump b/.initial=2.2}
+\ctikzset{bipoles/thermocouple/voltage/european label distance/.initial=1.5}
+\ctikzset{bipoles/ageneric/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/ageneric/voltage/bump b/.initial=2}
+\ctikzset{bipoles/ageneric/voltage/european label distance/.initial=1.8}
+\ctikzset{bipoles/fullgeneric/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/fullgeneric/voltage/bump b/.initial=2}
+\ctikzset{bipoles/fullgeneric/voltage/european label distance/.initial=1.8}
+\ctikzset{bipoles/memristor/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/memristor/voltage/bump b/.initial=2}
+\ctikzset{bipoles/memristor/voltage/european label distance/.initial=1.8}
+%\ctikzset{bipoles/tline/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/tline/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/tline/voltage/european label distance/.initial=2.1}
+%\ctikzset{bipoles/varistor/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/varistor/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/varistor/voltage/european label distance/.initial=2}
+%\ctikzset{bipoles/photoresistor/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/photoresistor/voltage/bump b/.initial=2}
+\ctikzset{bipoles/photoresistor/voltage/european label distance/.initial=1.8}
+%\ctikzset{bipoles/thermistor/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/thermistor/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/thermistor/voltage/european label distance/.initial=2}
+%\ctikzset{bipoles/thermistorntc/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/thermistorntc/voltage/bump b/.initial=1.6}
+%\ctikzset{bipoles/thermistorptc/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/thermistorptc/voltage/bump b/.initial=1.6}
+
+\ctikzset{current/.is family}
+\ctikzset{current/distance/.initial = .5}
+
+\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{american resistors/.style = { \circuitikzbasekey/resistor = american } }
+\tikzset{european resistors/.style = { \circuitikzbasekey/resistor = european } }
+
+\newif\ifpgf at circuit@europeangfsurgearrester
+\ctikzset{gas filled surge arrester/.is choice}
+\ctikzset{gas filled surge arrester/european/.code= {\pgf at circuit@europeangfsurgearrestertrue } }
+\ctikzset{gas filled surge arrester/american/.code= {\pgf at circuit@europeangfsurgearresterfalse } }
+
+\tikzset{american gas filled surge arrester/.style = { \circuitikzbasekey/gas filled surge arrester = american } }
+\tikzset{european gas filled surge arrester/.style = { \circuitikzbasekey/gas filled surge arrester = european } }
+\tikzset{american inductors/.style = { \circuitikzbasekey/inductor = american } }
+\tikzset{european inductors/.style = { \circuitikzbasekey/inductor = european } }
+\tikzset{cute inductors/.style = { \circuitikzbasekey/inductor = cute } }
+\tikzset{full diodes/.style = { \circuitikzbasekey/diode = full } }
+\tikzset{empty diodes/.style = { \circuitikzbasekey/diode = empty } }
+\tikzset{american ports/.style = { \circuitikzbasekey/logic ports = american } }
+\tikzset{european ports/.style = { \circuitikzbasekey/logic ports = european } }
+\tikzset{european/.style = { european currents, european voltages, european resistors, european inductors, european ports, european gas filled surge arrester } }
+\tikzset{american/.style = { american currents, american voltages, american resistors, american inductors, american ports, american gas filled surge arrester } }
+\tikzset{cute/.style = { european currents, european voltages, american resistors, cute inductors, american ports } }
+
+% I should try to make the tree clearer (this voltaege conflicts with the options above)
+
+\newif\ifpgf at circuit@europeanvoltage
+\ctikzset{voltage/.is choice}
+\ctikzset{voltage/american/.code = {\pgf at circuit@europeanvoltagefalse } }
+\ctikzset{voltage/european/.code = {\pgf at circuit@europeanvoltagetrue } }
+
+\newif\ifpgf at circuit@europeancurrent
+\ctikzset{current/.is choice}
+\ctikzset{current/american/.code = \pgf at circuit@europeancurrentfalse }
+\ctikzset{current/european/.code = \pgf at circuit@europeancurrenttrue }
+
+\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}}}
+%% dependencies
+
+
+
+
+%%%%%%%%%% new
+\pgfkeys{\circuitikzbasekey/.search also={/tikz}}
+
+
+
+
+
+%%%%%%%%%%% Springe nach pgfcircutils
+%%%---------- open: pgfcircutils.tex
+% Copyright 2007-2009 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 file doc/LICENSE for more details.
+
+%\def\pgf at circ@handleSI#1{%
+ % \pgf at circ@siunitx at resfalse
+%
+ % \edef\len{\stringlength[e]{#1}}
+ %\testmatchingchar[e]{#1}{\len}{>}%
+ %\ifmatchingchar%
+ % \ifnum\findchars{#1}{<}=0
+ % \def\pgf at circ@handleSI at val{\substring{#1}{1}{\findchars{#1}{<}-1}}
+ %\def\pgf at circ@handleSI at unit{\substring{#1}{\findchars{#1}{<}-1}+1}{\stringlength{#1}}
+ %\pgf at circ@siunitx at restrue
+% \else
+% \fi
+ %\else
+ %\fi
+%}
+
+\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@finallabel#1{%
+ \edef\pgf at temp{}%
+ \edef\pgf at circ@temp{\ctikzvalof{bipole/#1label/unit}}%
+ \ifx\pgf at temp\pgf at circ@temp%
+ \ctikzvalof{bipole/#1label/name}%
+ \else%
+ $\SI{\ctikzvalof{bipole/#1label/name}}{\ctikzvalof{bipole/#1label/unit}}$%
+ \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
+}
+
+
+%%%---------- close: pgfcircutils
+%%%%%%%%%%% Springe nach pgfcircmath
+%%%---------- open: pgfcircmath.tex
+% Copyright 2007-2009 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 file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Math routines
+
+\def\pgf at circ@stripdecimals#1.#2\pgf at nil{#1}
+
+% angle between 0 and 360
+\def\pgf at circ@slope#1#2{%
+ \pgf at process{#1}%
+ \pgf at xa=\pgf at x%
+ \pgf at ya=\pgf at y%
+ \pgf at process{#2}%
+ \advance\pgf at x by-\pgf at xa%
+ \advance\pgf at y by-\pgf at ya%
+ \ifdim\pgf at x<0.1pt
+ \ifdim\pgf at x>-0.1pt % vertical
+ \ifdim\pgf at y<0pt
+ \def\pgfmathresult{-90.0}
+ \else
+ \def\pgfmathresult{+90.0}
+ \fi
+ \else % oblique with dx < 0
+ \pgfmathdivide{\pgf at y}{\pgf at x}
+ \pgfmathatan{\pgfmathresult}
+ \ifdim\pgf at x<0pt
+ \pgfmathsubtract{\pgfmathresult}{+180}
+ \fi
+ \fi
+ \else % oblique with dx > 0
+ \pgfmathdivide{\pgf at y}{\pgf at x}
+ \pgfmathatan{\pgfmathresult}
+ \ifdim\pgf at x<0pt
+ \pgfmathsubtract{\pgfmathresult}{+180}
+ \fi
+ \fi
+ \pgf at x=\pgfmathresult pt
+ \ifdim\pgf at x<0pt
+ \pgfmathadd{\pgfmathresult}{+360}
+ \fi
+ }
+
+
+%%%---------- close: pgfcircmath
+
+%%%%%%%%%%% Springe nach pgfcircshapes
+%%%---------- open: pgfcircshapes.tex
+% Copyright 2007-2009 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 file doc/LICENSE 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
+ }
+ \anchor{east}{%
+ \northeast
+ \pgf at y=0cm
+ }
+ \anchor{south}{%
+ \northeast
+ \pgf at y=-\pgf at y
+ \pgf at x=0cm
+ }
+ \anchor{west}{
+ \northeast
+ \pgf at y=0cm
+ \pgf at x=-\pgf at x
+ }
+ \anchor{text}{%
+ \pgfpointorigin
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+}
+
+%% Full terminal
+
+\pgfdeclareshape{circ}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \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{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}}
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+
+ }
+}
+
+%% Empty terminal
+
+\pgfdeclareshape{ocirc}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \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{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}}
+ }
+
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetfillcolor{white}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+
+ }
+}
+
+%% Current arrow
+
+\pgfdeclareshape{currarrow}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgf at circ@res at step = \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \divide \pgf at circ@res at step by 16
+
+ \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{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw,fill}
+
+ \endpgfscope
+ }
+
+}
+
+%% Current arrow
+
+\pgfdeclareshape{inputarrow}{
+ \savedanchor{\tip}{
+ \pgfpointorigin
+ }
+ \anchor{center}{
+ \tip
+ }
+ \anchor{tip}{
+ \tip
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgf at circ@res at step = \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \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{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{fill}
+
+ \endpgfscope
+ }
+
+}
+
+%%%---------- close: pgfcircshapes
+%%%%%%%%%%% Springe nach pgfcircmonopoles
+%%%---------- open: pgfcircmonopoles.tex
+% Copyright 2007-2009 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 file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Monopoles
+
+%% Ground symbol
+
+\pgfdeclareshape{ground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf at circ@res at step=\ctikzvalof{monopoles/ground/width}\pgf at circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf at circ@res at step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ %\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at step}{-\pgf at circ@res at step}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{-\pgf at circ@res at step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.8\pgf at circ@res at step}{-1.2\pgf at circ@res at step}}
+ \pgfpathlineto{\pgfpoint{.8\pgf at circ@res at step}{-1.2\pgf at circ@res at step}}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf at circ@res at step}{-1.4\pgf at circ@res at step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf at circ@res at step}{-1.4\pgf at circ@res at step}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf at circ@res at step}{-1.6\pgf at circ@res at step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf at circ@res at step}{-1.6\pgf at circ@res at step}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw}
+
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+
+}
+
+
+
+\pgfdeclareshape{rground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf at circ@res at step=\ctikzvalof{monopoles/ground/width}\pgf at circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf at circ@res at step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at step}{-\pgf at circ@res at step}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{-\pgf at circ@res at step}}
+ \pgfusepath{draw}
+
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{tground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf at circ@res at step=\ctikzvalof{monopoles/ground/width}\pgf at circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ %\pgfpathlineto{\pgfpoint{0pt}{-\pgf at circ@res at step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/monopoles/tground/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{0pt}}
+ \pgfusepath{draw}
+
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{sground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf at circ@res at step=\ctikzvalof{monopoles/ground/width}\pgf at circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf at circ@res at step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at step}{-\pgf at circ@res at step}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{-\pgf at circ@res at step}}
+ \pgfpathlineto{\pgfpoint{0}{-1.8\pgf at circ@res at step}}
+ \pgfpathclose
+ \pgfusepath{draw}
+
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+
+}
+
+% noiseless ground
+\pgfdeclareshape{nground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf at circ@res at step=\ctikzvalof{monopoles/ground/width}\pgf at circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf at circ@res at step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ %\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at step}{-\pgf at circ@res at step}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{-\pgf at circ@res at step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.8\pgf at circ@res at step}{-1.2\pgf at circ@res at step}}
+ \pgfpathlineto{\pgfpoint{.8\pgf at circ@res at step}{-1.2\pgf at circ@res at step}}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf at circ@res at step}{-1.4\pgf at circ@res at step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf at circ@res at step}{-1.4\pgf at circ@res at step}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf at circ@res at step}{-1.6\pgf at circ@res at step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf at circ@res at step}{-1.6\pgf at circ@res at step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{1.3\pgf at circ@res at step}{-1.6\pgf at circ@res at step}}
+ \pgfpatharc{0}{180}{1.3\pgf at circ@res at step}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \endpgfscope
+ }
+}
+
+% protective ground
+\pgfdeclareshape{pground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf at circ@res at step=\ctikzvalof{monopoles/ground/width}\pgf at circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf at circ@res at step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ %\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at step}{-\pgf at circ@res at step}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{-\pgf at circ@res at step}}
+ \pgfpathcircle{\pgfpoint{0pt}{-\pgf at circ@res at step}} {1.2\pgf at circ@res at step}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.8\pgf at circ@res at step}{-1.2\pgf at circ@res at step}}
+ \pgfpathlineto{\pgfpoint{.8\pgf at circ@res at step}{-1.2\pgf at circ@res at step}}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf at circ@res at step}{-1.4\pgf at circ@res at step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf at circ@res at step}{-1.4\pgf at circ@res at step}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf at circ@res at step}{-1.6\pgf at circ@res at step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf at circ@res at step}{-1.6\pgf at circ@res at step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \endpgfscope
+ }
+}
+
+% chassis ground
+\pgfdeclareshape{cground}{
+\anchor{center}{
+ \pgfpointorigin
+}
+\behindforegroundpath{
+ \pgf at circ@res at step=\ctikzvalof{monopoles/chassis/width}\pgf at circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf at circ@res at step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-1.5\pgf at circ@res at step}{-2\pgf at circ@res at step}}
+ \pgfpathlineto{\pgfpoint{-\pgf at circ@res at step}{-\pgf at circ@res at step}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at step}{-\pgf at circ@res at step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf at circ@res at step}{-2\pgf at circ@res at step}}
+ \pgfpathmoveto{\pgfpoint{0pt}{-\pgf at circ@res at step}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf at circ@res at step}{-2\pgf at circ@res at step}}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+% Contributed by Leonardo Azzinnari
+\pgfdeclareshape{tlinestub}{
+ \anchor{center}{\pgfpointorigin}
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+
+ \pgf at circ@res at step=\ctikzvalof{bipoles/tline/width} \pgf at circ@Rlen
+ \pgfpathmoveto{\pgfpoint{0.5\pgf at circ@res at step}{0.25\pgf at circ@res at step}}
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0.5\pgf at circ@res at step}{0pt}}
+ \pgfusepath{draw}
+ \pgfscope
+ \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}}
+ \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}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+
+
+
+\pgfdeclareshape{antenna}{
+\anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf at circ@res at step=\ctikzvalof{monopoles/antenna/width}\pgf at circ@Rlen
+ \pgf at x=5\pgf at circ@res at step%-0.5\pgflinewidth
+ \pgf at y=6\pgf at circ@res at step
+ }
+ \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@res at step=\ctikzvalof{monopoles/antenna/width}\pgf at circ@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}}
+
+ \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{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ }
+ }
+
+
+\pgfdeclareshape{txantenna}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf at circ@res at step=\ctikzvalof{monopoles/txantenna/width}\pgf at circ@Rlen
+ \pgf at x=5\pgf at circ@res at step%-0.5\pgflinewidth
+ \pgf at y=6\pgf at circ@res at step
+ }
+ \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@res at step=\ctikzvalof{monopoles/txantenna/width}\pgf at circ@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{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}
+
+ }
+ }
+
+
+\pgfdeclareshape{rxantenna}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf at circ@res at step=\ctikzvalof{monopoles/txantenna/width}\pgf at circ@Rlen
+ \pgf at x=5\pgf at circ@res at step%-0.5\pgflinewidth
+ \pgf at y=6\pgf at circ@res at step
+ }
+ \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@res at step=\ctikzvalof{monopoles/rxantenna/width}\pgf at circ@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{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}
+
+ }
+}
+
+% Vcc
+\pgfdeclareshape{vcc}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{text}{
+ \pgf at x=0pt
+ \pgf at y=\ctikzvalof{monopoles/vcc/width}\pgf at circ@Rlen
+ \pgf at y=2\pgf at y
+ \advance \pgf at y by 0.5\ht\pgfnodeparttextbox
+ \pgf at x=-.5\wd\pgfnodeparttextbox
+ }
+ \behindforegroundpath{
+ \pgf at circ@res at step=\ctikzvalof{monopoles/vcc/width}\pgf at circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{1.5\pgf at circ@res at step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}
+
+ \endpgfscope
+ }
+
+}
+
+% match
+\pgfdeclareshape{match}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{text}{
+ \pgf at x=\ctikzvalof{monopoles/match/width}\pgf at circ@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@res at step=\ctikzvalof{monopoles/match/width}\pgf at circ@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
+ }
+
+}
+
+% oscillator
+\pgfdeclareshape{oscillator}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{north}{
+ \pgf at x=\ctikzvalof{monopoles/oscillator/width}\pgf at circ@Rlen
+ \pgf at x=-0.5\pgf at x
+ \pgf at y=\ctikzvalof{monopoles/oscillator/width}\pgf at circ@Rlen
+ \pgf at y=0.5\pgf at y
+ }
+ \anchor{south}{
+ \pgf at x=\ctikzvalof{monopoles/oscillator/width}\pgf at circ@Rlen
+ \pgf at x=-0.5\pgf at x
+ \pgf at y=\ctikzvalof{monopoles/oscillator/width}\pgf at circ@Rlen
+ \pgf at y=-0.5\pgf at y
+ }
+ \anchor{east}{
+ \pgfpointorigin
+ \pgf at x=-\ctikzvalof{monopoles/oscillator/width}\pgf at circ@Rlen
+ }
+ \anchor{west}{
+ \pgfpointorigin
+ }
+ \anchor{text}{
+ \pgf at x=\ctikzvalof{monopoles/oscillator/width}\pgf at circ@Rlen
+ \pgf at x=-2\pgf at x
+ \advance \pgf at x by -.5\wd\pgfnodeparttextbox
+ \pgf at y=-\ctikzvalof{monopoles/oscillator/width}\pgf at circ@Rlen
+ \advance \pgf at y by -1.5\ht\pgfnodeparttextbox
+ }
+ \behindforegroundpath{
+ \pgf at circ@res at step=\ctikzvalof{monopoles/oscillator/width}\pgf at circ@Rlen
+ \pgf at circ@res at step=.5\pgf at circ@res at step
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw circle
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpoint{-\pgf at circ@res at step}{0}} {\pgf at circ@res at step}
+ \pgfusepath{draw}
+
+ % draw inner sine waves
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-1.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}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+}
+
+%%%---------- close: pgfcircmonopoles
+%%%%%%%%%%% Springe nach pgfcircbipoles
+%%%---------- open: pgfcircbipoles.tex
+% Copyright 2007-2009 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 file doc/LICENSE 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#1#2#3#4#5#6{
+ \pgfdeclareshape{#3shape}{
+
+ \savedanchor{\northeast}{
+ \pgf at y=#4\pgf at circ@Rlen
+ \pgf at y=.5\pgf at y
+ \pgf at x=#5\pgf at circ@Rlen
+ \pgf at x=.5\pgf at x
+ }
+ \savedanchor{\northeastborder}{
+ \pgf at y=#4\pgf at circ@Rlen
+ \pgf at y=.5\pgf at y
+ \pgf at y=\ctikzvalof{bipoles/border margin}\pgf at y
+ \pgf at x=#5\pgf at circ@Rlen
+ \pgf at x=.5\pgf at x
+ \pgf at x=\ctikzvalof{bipoles/border margin}\pgf at x
+ }
+ \savedanchor{\southwestborder}{
+ \pgf at y=-#2\pgf at circ@Rlen
+ \pgf at y=.5\pgf at y
+ \pgf at y=\ctikzvalof{bipoles/border margin}\pgf at y
+ \pgf at x=-#5\pgf at circ@Rlen
+ \pgf at x=.5\pgf at x
+ \pgf at x=\ctikzvalof{bipoles/border margin}\pgf at x
+ }
+ \savedanchor{\southwest}{
+ \pgf at y=-#2\pgf at circ@Rlen
+ \pgf at y=.5\pgf at y
+ \pgf at x=-#5\pgf at circ@Rlen
+ \pgf at x=.5\pgf at x
+ }
+ \savedanchor{\centerpoint}{
+ \pgf at circ@res at down=-#2\pgf at circ@Rlen
+ \pgf at circ@res at up=#4\pgf at circ@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}{
+ \ifpgf at circuit@bipole at reversed\southwest\else\northeast\fi
+ \pgf at x=0cm
+ }
+ \anchor{ne}{
+ \ifpgf at circuit@bipole at reversed\southwest\else\northeast\fi
+ }
+ \anchor{nw}{
+ \ifpgf at circuit@bipole at reversed\southwest\else\northeast\fi
+ \pgf at x=-\pgf at x
+ }
+ \anchor{e}{%
+ \ifpgf at circuit@bipole at reversed\else\southwest\northeast\fi
+ \pgf at y=0cm
+ }
+ \anchor{s}{%
+ \ifpgf at circuit@bipole at reversed\northeast\else\southwest\fi
+ \pgf at x=0cm
+ }
+ \anchor{se}{%
+ \ifpgf at circuit@bipole at reversed\northeast\else\southwest\fi
+ \pgf at x=-\pgf at x
+ }
+ \anchor{sw}{%
+ \ifpgf at circuit@bipole at reversed\northeast\else\southwest\fi
+ }
+ \anchor{w}{
+ \ifpgf at circuit@bipole at reversed\northeast\else\southwest\fi
+ \pgf at y=0cm
+ }
+ \anchor{north}{
+ \ifpgf at circuit@bipole at reversed\southwest\else\northeast\fi
+ \pgf at x=0cm
+ }
+ \anchor{east}{%
+ \ifpgf at circuit@bipole at reversed\southwest\else\northeast\fi
+ \pgf at y=0cm
+ }
+ \anchor{south}{%
+ \ifpgf at circuit@bipole at reversed\northeast\else\southwest\fi
+ \pgf at x=0cm
+ }
+ \anchor{west}{
+ \ifpgf at circuit@bipole at reversed\northeast\else\southwest\fi
+ \pgf at y=0cm
+ }
+ \anchor{right}{
+ \ifpgf at circuit@bipole at reversed\southwest\else\northeast\fi
+ \pgf at y=0cm
+ }
+ \anchor{above}{
+ \ifpgf at circuit@bipole at reversed\southwest\else\northeast\fi
+ \pgf at x=0cm
+ }
+ \anchor{left}{%
+ \ifpgf at circuit@bipole at reversed\northeast\else\southwest\fi
+ \pgf at y=0cm
+ }
+ \anchor{below}{%
+ \ifpgf at circuit@bipole at reversed\northeast\else\southwest\fi
+ \pgf at x=0cm
+ }
+ \anchor{a}{%
+ \ifpgf at circuit@bipole at reversed\southwest\else\northeast\fi
+ \pgf at y=0cm
+ }
+ \anchor{b} {
+ \ifpgf at circuit@bipole at reversed\northeast\else\southwest\fi
+ \pgf at y=0cm
+ }
+ \savedanchor{\textanchor}{%
+ \pgf at y=\ht\pgfnodeparttextbox
+ \pgf at x=-.5\wd\pgfnodeparttextbox
+ }
+ \anchor{text}{%
+ \textanchor
+ }
+ \anchorborder{%
+ \def\pgf at temp{false}
+ \ifpgf at circuit@bipole at reversed\pgf at temp
+ \pgf at circ@res at left=-\pgf at x
+ \pgf at circ@res at right=-\pgf at y
+ \else
+ \pgf at circ@res at left=\pgf at x
+ \pgf at circ@res at right=\pgf at y
+ \fi
+ \ifdim\pgf at circ@res at right>0cm
+ \pgfpointborderrectangle{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at right}}{\northeastborder}
+ \else
+ \southwestborder
+ \pgfpointborderrectangle{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at right}}{\pgfpoint{-\pgf at x}{-\pgf at y}}
+ \fi
+ }
+
+ #1
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/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
+
+ \pgfstartlinewidth=\pgflinewidth
+
+ #6
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ }
+ }
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Standard bipole shapes declarations
+
+%% Resistor
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/resistor/height}}{resistor}{\ctikzvalof{bipoles/resistor/height}}{\ctikzvalof{bipoles/resistor/width}}{
+ \pgf at circ@res at step = \ctikzvalof{bipoles/resistor/width}\pgf at circ@Rlen
+ \divide \pgf at circ@res at step by 12
+
+ \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
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \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}}
+ \pgfusepath{draw}
+}
+
+
+
+%% Variable resistor
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vresistor/height}}{vresistor}{\ctikzvalof{bipoles/vresistor/height}}{\ctikzvalof{bipoles/vresistor/width}}{
+ \pgf at circ@res at step = \ctikzvalof{bipoles/vresistor/width}\pgf at circ@Rlen
+ \divide \pgf at circ@res at step by 12
+ \def\myfrac{.5}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \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
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at other}{\myfrac\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}{\myfrac\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}{\myfrac\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}{\myfrac\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}{\myfrac\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}{\myfrac\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 right}{\pgf at circ@res at zero}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \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
+}
+
+
+
+%% Capacitor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/capacitor/height}}{capacitor}{\ctikzvalof{bipoles/capacitor/height}}{\ctikzvalof{bipoles/capacitor/width}}{
+ \pgf at circ@res at step = \ctikzvalof{bipoles/capacitor/width}\pgf at circ@Rlen
+ \divide \pgf at circ@res at step by 5
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}
+}
+
+
+%% Polar Capacitor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/pcapacitor/height}}{polarcapacitor}{\ctikzvalof{bipoles/pcapacitor/height}}{\ctikzvalof{bipoles/pcapacitor/width}}{
+ \pgf at circ@res at step = \ctikzvalof{bipoles/pcapacitor/width}\pgf at circ@Rlen
+ \divide \pgf at circ@res at step by 5
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}
+
+}
+
+%% Battery
+
+\pgfcircdeclarebipole{}{\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@Rlen
+ \divide \pgf at circ@res at step by 6
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \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}}
+
+ \pgfusepath{draw}
+}
+
+
+%% Battery 1
+
+\pgfcircdeclarebipole{}{\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}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \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}}
+
+ \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}
+}
+
+
+
+%% cute inductor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cuteinductor/height}}{cuteinductor}{\ctikzvalof{bipoles/cuteinductor/height}}{\ctikzvalof{bipoles/cuteinductor/width}}{
+ \pgf at circ@res at step=\ctikzvalof{bipoles/cuteinductor/width}\pgf at circ@Rlen
+ \divide \pgf at circ@res at step by \ctikzvalof{bipoles/cuteinductor/coils}
+
+ \pgfdecorationsegmentamplitude=\ctikzvalof{bipoles/cuteinductor/height}\pgf at circ@Rlen
+ \pgfdecorationsegmentamplitude=.5\pgfdecorationsegmentamplitude
+ \pgfdecorationsegmentlength = \pgf at circ@res at step
+ \pgfdecorationsegmentaspect=.6
+
+ \pgfdecoration{{coil}{\pgfdecoratedremainingdistance}}
+ \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}}
+ \endpgfdecoration
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{stroke}
+}
+
+
+
+%% american inductor
+
+\pgfcircdeclarebipole{}{\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@Rlen
+ \divide \pgf at circ@res at step by \ctikzvalof{bipoles/americaninductor/coils}
+
+ \pgfdecorationsegmentamplitude=\ctikzvalof{bipoles/americaninductor/height}\pgf at circ@Rlen
+ \pgfdecorationsegmentamplitude=.45\pgfdecorationsegmentamplitude
+ \pgfdecorationsegmentlength = 1.99\pgf at circ@res at step
+
+ \pgfdecoration{{bumps}{\pgfdecoratedremainingdistance}}
+ \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}}
+ \endpgfdecoration
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{stroke}
+}
+
+
+
+
+
+%% Independent voltage source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsource/height}}{vsource}{\ctikzvalof{bipoles/vsource/height}}{\ctikzvalof{bipoles/vsource/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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 left}{\pgf at circ@res at zero}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at zero}}
+ \pgfusepath{draw}
+}
+
+
+%% Independent voltage source - American style
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsourceam/height}}{vsourceAM}{\ctikzvalof{bipoles/vsourceam/height}}{\ctikzvalof{bipoles/vsourceam/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
+
+
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf at circ@res at down]{$+$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf at circ@res at up]{$-$}
+
+ \pgfusepath{draw}
+}
+
+
+
+%% Independent sinusoidal voltage source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsourcesin/height}}{vsourcesin}{\ctikzvalof{bipoles/vsourcesin/height}}{\ctikzvalof{bipoles/vsourcesin/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
+ \pgfusepath{draw}
+
+ \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
+}
+
+
+
+
+% contributed by Alistair Kwan
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsourcesquare/height}}{vsourcesquare}{\ctikzvalof{bipoles/vsourcesquare/height}}{\ctikzvalof{bipoles/vsourcesquare/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
+ \pgfusepath{draw}
+
+ \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
+}
+
+
+%% Independent current source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/isource/height}}{isource}{\ctikzvalof{bipoles/isource/height}}{\ctikzvalof{bipoles/isource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf 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}}
+ \pgfusepath{draw}
+}
+
+
+
+
+%% Independent current source - American
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/isourceam/height}}{isourceAM}{\ctikzvalof{bipoles/isourceam/height}}{\ctikzvalof{bipoles/isourceam/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
+ \pgfusepath{draw}
+
+ \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
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/isource/height}}{isourcesin}{\ctikzvalof{bipoles/isource/height}}{\ctikzvalof{bipoles/isource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
+ \pgfusepath{draw}
+
+ \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 voltage source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cvsource/height}}{cvsource}{\ctikzvalof{bipoles/cvsource/height}}{\ctikzvalof{bipoles/cvsource/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at zero}}
+ \pgfusepath{draw}
+}
+
+
+
+
+%% Controlled voltage source - American
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cvsourceam/height}}{cvsourceAM}{\ctikzvalof{bipoles/cvsourceam/height}}{\ctikzvalof{bipoles/cvsourceam/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf at circ@res at left]{$+$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf at circ@res at right]{$-$}
+ \pgfusepath{draw}
+}
+
+
+%% Controlled sinusoidal voltage source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cvsourcesin/height}}{cvsourcesin}{\ctikzvalof{bipoles/cvsourcesin/height}}{\ctikzvalof{bipoles/cvsourcesin/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+ \pgfusepath{draw}
+ \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
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cvsourcesin/height}}{cisourcesin}{\ctikzvalof{bipoles/cvsourcesin/height}}{\ctikzvalof{bipoles/cvsourcesin/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at zero}}
+ \pgfusepath{draw}
+ \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
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cisource/height}}{cisource}{\ctikzvalof{bipoles/cisource/height}}{\ctikzvalof{bipoles/cisource/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
+ \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
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cisourceam/height}}{cisourceAM}{\ctikzvalof{bipoles/cisourceam/height}}{\ctikzvalof{bipoles/cisourceam/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
+ \pgfusepath{draw}
+
+ \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{draw}}
+ \endpgfscope
+}
+
+%% Black generic diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fulldiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fullzdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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 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.2\pgf at circ@res at left}{\pgf at circ@res at up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Black Schottky diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fullsdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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-.8\pgf at circ@res at left}{.8\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-.8\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.2\pgf at circ@res at left}{\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-1.2\pgf at circ@res at left}{.8\pgf at circ@res at up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+%% Black tunnel diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fulltdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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-.8\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-.8\pgf at circ@res at left}{\pgf at circ@res at up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Black light emitting diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fulllediode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex'}
+ \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}
+
+}
+
+%% Black photodiode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fullpdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsstart{latex'}
+ \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}
+}
+
+%% Black varcap
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/varcap/height}}{fullvarcap}{\ctikzvalof{bipoles/varcap/height}}{\ctikzvalof{bipoles/varcap/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf at circ@res at left}
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-.8\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-.8\pgf at circ@res at left}{0pt}}
+ \pgfusepath{draw,fill}
+
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-.8\pgf at circ@res at left}{\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-.8\pgf at circ@res at left}{\pgf at circ@res at up}}
+ \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}}
+ \pgfusepath{draw}
+
+ \endpgfscope
+}
+
+%% Empty generic diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptydiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}
+ \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
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptyzdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}
+ \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 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.2\pgf at circ@res at left}{\pgf at circ@res at up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Empty Schottky diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptysdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}
+
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-.8\pgf at circ@res at left}{.8\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-.8\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.2\pgf at circ@res at left}{\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-1.2\pgf at circ@res at left}{.8\pgf at circ@res at up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+%% Empty tunnel diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptytdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}
+
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-.8\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-.8\pgf at circ@res at left}{\pgf at circ@res at up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Empty light emitting diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptylediode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}
+ \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}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex'}
+ \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}
+}
+
+%% Empty photodiode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptypdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}
+ \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}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsstart{latex'}
+ \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}
+}
+
+%% Empty varcap
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/varcap/height}}{emptyvarcap}{\ctikzvalof{bipoles/varcap/height}}{\ctikzvalof{bipoles/varcap/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf at circ@res at left}
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-.8\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-.8\pgf at circ@res at left}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right-.8\pgf at circ@res at left}{\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right-.8\pgf at circ@res at left}{\pgf at circ@res at up}}
+ \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}}
+ \pgfusepath{draw}
+
+ \endpgfscope
+}
+
+%% Closing SPST
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/interr/height 2}}{cspst}{\ctikzvalof{bipoles/interr/height}}{\ctikzvalof{bipoles/interr/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
+ \pgfpathmoveto{\pgfpoint{.9\pgf at circ@res at left}{.9\pgf at circ@res at up}}
+ \pgfpatharc{65}{25}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/interr/width}\pgf at circ@Rlen}
+ %\pgfsetarrowsend{latex'}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{.1\pgf at circ@res at right}{-.25\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint{.14\pgf at circ@res at right}{-.35\pgf at circ@res at up}}
+ \pgfsetarrowsend{latex'}
+ \pgfusepath{draw}
+
+}
+
+%% Opening SPST
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/interr/height 2}}{ospst}{\ctikzvalof{bipoles/interr/height}}{\ctikzvalof{bipoles/interr/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
+ \pgfpathmoveto{\pgfpoint{.3\pgf at circ@res at right}{.1\pgf at circ@res at down}}
+ \pgfpatharc{15}{50}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/interr/width}\pgf at circ@Rlen}
+ %\pgfpathlineto{\pgfpoint{.6\pgf at circ@res at right}{\pgf at circ@res at up}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{.85\pgf at circ@res at left}{1.25\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint{.87\pgf at circ@res at left}{1.26\pgf at circ@res at up}}
+ \pgfsetarrowsend{latex'}
+ \pgfusepath{draw}
+
+
+}
+
+
+%% Push Button
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/pushbutton/height 2}}{pushbutton}{\ctikzvalof{bipoles/pushbutton/height}}{\ctikzvalof{bipoles/pushbutton/width}}{
+
+ %\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% Ammeter
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/ammeter/height}}{ammeter}{\ctikzvalof{bipoles/ammeter/height}}{\ctikzvalof{bipoles/ammeter/width}}{
+ \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
+
+ \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}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{.9\pgf at circ@res at up}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{\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}}
+ \pgfusepath{draw}
+ \pgfsetarrowsend{}
+
+
+ \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}
+
+ \pgfnode{circle}{center}{\textbf{A}}{}{}
+}
+
+%% Voltmeter
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/voltmeter/height}}{voltmeter}{\ctikzvalof{bipoles/voltmeter/height}}{\ctikzvalof{bipoles/voltmeter/width}}{
+ \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
+
+ \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}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{.9\pgf at circ@res at up}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{\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}}
+ \pgfusepath{draw}
+ \pgfsetarrowsend{}
+
+
+ \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}
+
+ \pgfnode{circle}{center}{\textbf{V}}{}{}
+
+}
+
+%% Short circuit
+
+\pgfcircdeclarebipole{}{0}{short}{0}{0}{ }
+
+%% Open circuit
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/open/height}}{open}{\ctikzvalof{bipoles/open/height}}{\ctikzvalof{bipoles/open/width}}{
+
+}
+
+%% Generic bipole - used as resistor by some (bleah)
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/generic/height}}{generic}{\ctikzvalof{bipoles/generic/height}}{\ctikzvalof{bipoles/generic/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}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+}
+
+
+%% fuse
+
+\pgfcircdeclarebipole{}{\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}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+}
+
+
+
+%% Generic bipole, filled - used as inductor by some (bleah)
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/fullgeneric/height}}{fullgeneric}{\ctikzvalof{bipoles/fullgeneric/height}}{\ctikzvalof{bipoles/fullgeneric/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}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw,fill}
+}
+
+
+%% Generic asymmetric bipole
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/ageneric/height}}{ageneric}{\ctikzvalof{bipoles/ageneric/height}}{\ctikzvalof{bipoles/ageneric/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}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \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}
+}
+
+
+%% asymmetric fuse
+
+\pgfcircdeclarebipole{}{\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}
+
+ \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}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \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}
+}
+
+
+
+
+%% Memristor
+
+\pgfcircdeclarebipole{}{\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@Rlen
+ \divide \pgf at circ@res at step by 14
+
+ \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}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \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}
+}
+
+
+
+
+%% Generic empty tunable
+
+\pgfcircdeclarebipole{}{\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}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \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
+}
+
+%% Photoresistor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/photoresistor/height 2}}{photoresistor}{\ctikzvalof{bipoles/photoresistor/height}}{\ctikzvalof{bipoles/photoresistor/width}}{
+ \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}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \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
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/thermistor/height}}{thermistor}{\ctikzvalof{bipoles/thermistor/height}}{\ctikzvalof{bipoles/thermistor/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistor/main}\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistor/main}\pgf at circ@res at up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ %\pgfscope
+ \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}
+ %\endpgfscope
+}
+
+
+%% Thermistor PTC
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/thermistorptc/height 2}}{thermistorptc}{\ctikzvalof{bipoles/thermistorptc/height}}{\ctikzvalof{bipoles/thermistorptc/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorptc/main}\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorptc/main}\pgf at circ@res at up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \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]{\tiny$\vartheta$}
+ \pgfsetarrowsend{latex'}
+ \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
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/thermistorntc/height 2}}{thermistorntc}{\ctikzvalof{bipoles/thermistorntc/height}}{\ctikzvalof{bipoles/thermistorntc/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorntc/main}\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorntc/main}\pgf at circ@res at up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \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]{\tiny$\vartheta$}
+ \pgfsetarrowsend{latex'}
+ \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}
+}
+
+%% thermocouple
+\pgfcircdeclarebipole{}{\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}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}
+}
+
+%% Varistor
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/varistor/height}}{varistor}{\ctikzvalof{bipoles/varistor/height}}{\ctikzvalof{bipoles/varistor/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf at circ@res at left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/varistor/main}\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/varistor/main}\pgf at circ@res at up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \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]{{\tiny\textsf{U}}}
+}
+
+
+
+%% Generic full tunable
+
+\pgfcircdeclarebipole{}{\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}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw,fill}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \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
+}
+
+
+%% Variable Cute Inductor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vcuteinductor/height}}{vcuteinductor}{\ctikzvalof{bipoles/vcuteinductor/height}}{\ctikzvalof{bipoles/vcuteinductor/width}}{
+ \pgf at circ@res at step=\ctikzvalof{bipoles/vcuteinductor/width}\pgf at circ@Rlen
+ \divide \pgf at circ@res at step by \ctikzvalof{bipoles/vcuteinductor/coils}
+
+ \pgfdecorationsegmentamplitude=\ctikzvalof{bipoles/vcuteinductor/coil height}\pgf at circ@Rlen
+ \pgfdecorationsegmentamplitude=.5\pgfdecorationsegmentamplitude
+ \pgfdecorationsegmentlength = \pgf at circ@res at step
+ \pgfdecorationsegmentaspect=.6
+
+ \pgfdecoration{{coil}{\pgfdecoratedremainingdistance}}
+ \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}}
+ \endpgfdecoration
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{stroke}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\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}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+%% variable american inductor
+
+\pgfcircdeclarebipole{}{\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@Rlen
+ \divide \pgf at circ@res at step by \ctikzvalof{bipoles/vamericaninductor/coils}
+
+ \pgfdecorationsegmentamplitude=\ctikzvalof{bipoles/vamericaninductor/height}\pgf at circ@Rlen
+ \pgfdecorationsegmentamplitude=.45\pgfdecorationsegmentamplitude
+ \pgfdecorationsegmentamplitude=.45\pgfdecorationsegmentamplitude % per freccia
+ \pgfdecorationsegmentlength = 1.99\pgf at circ@res at step
+
+ \pgfdecoration{{bumps}{\pgfdecoratedremainingdistance}}
+ \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}}
+ \endpgfdecoration
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{stroke}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \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
+}
+
+
+
+
+%% Variable Capacitor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vcapacitor/height}}{vcapacitor}{\ctikzvalof{bipoles/vcapacitor/height}}{\ctikzvalof{bipoles/vcapacitor/width}}{
+ %\pgf at circ@res at step = \ctikzvalof{bipoles/vcapacitor/width}\pgf at circ@Rlen
+ \pgf at circ@res at step = \ctikzvalof{bipoles/vcapacitor/capacitor width} \pgf at circ@res at right
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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{latex'}
+ \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}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Handling of terminals
+
+
+%% Easily usable styles
+
+\ctikzset{*-/.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{*-o/.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=empty}}
+\ctikzset{*-*/.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=full}}
+\ctikzset{o-/.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{o-o/.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=empty}}
+\ctikzset{o-*/.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=full}}
+\ctikzset{-o/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=empty}}
+\ctikzset{-*/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=full}}
+
+\tikzset{reversed/.style = {\circuitikzbasekey/bipole/reversed=true}}
+
+
+%% The output routine
+
+\def\drawpoles{
+ \pgfextra{ \edef\pgf at circ@temp{\ctikzvalof{bipole/nodes/left}} \def\pgf at temp{empty} }
+ \ifx\pgf at temp\pgf at circ@temp
+ { (\tikztostart) node[ocirc] {} }
+ \else
+ \pgfextra{ \def\pgf at temp{full} }
+ \ifx\pgf at temp\pgf at circ@temp
+ { (\tikztostart) node[circ] {} }
+ \fi
+ \fi
+ \pgfextra{ \edef\pgf at circ@temp{\ctikzvalof{bipole/nodes/right}} \def\pgf at temp{empty} }
+ \ifx\pgf at temp\pgf at circ@temp
+ { (\tikztotarget) node[ocirc] {} }
+ \else
+ \pgfextra{ \def\pgf at temp{full} }
+ \ifx\pgf at temp\pgf at circ@temp
+ { (\tikztotarget) node[circ] {} }
+ \fi
+ \fi
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+%% Lamp
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/lamp/height}}{lamp}{\ctikzvalof{bipoles/lamp/height}}{\ctikzvalof{bipoles/lamp/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at left}{0}}
+ \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}
+}
+
+
+\pgfcircdeclarebipole{}{\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
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpoint{\pgf at circ@res at right-\pgf at circ@res at step}{0}}
+ {\pgfpoint{\pgf at circ@res at step}{0}}
+ {\pgfpoint{0}{-\pgf at circ@res at up}}
+ \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}}
+ \pgfusepath{draw}
+}
+
+
+
+
+%% SQUID added by Cor Molenaar 5 March 2010
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/squid/height}}{squid}{\ctikzvalof{bipoles/squid/height}}{\ctikzvalof{bipoles/squid/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/barrier/height}}{barrier}{\ctikzvalof{bipoles/barrier/height}}{\ctikzvalof{bipoles/barrier/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}
+}
+
+
+% Contributed by Danilo Piazzalunga
+
+\pgfdeclareshape{buffer}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf at y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/buffer/height}\pgf at y
+ \pgf at y=.5\pgf at y
+ \pgf at x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/buffer/width}\pgf at x
+ \pgf at x=.5\pgf at x
+ }
+ \anchor{south}{
+ \northwest
+ \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
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/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
+ \pgfsetlinewidth{2\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}}
+ \pgfusepath{draw}
+ \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}
+
+ }
+ }
+
+
+
+
+
+\pgfdeclareshape{plain amp}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf at y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/height}\pgf at y
+ \pgf at y=.5\pgf at y
+ \pgf at x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/width}\pgf at x
+ \pgf at x=.5\pgf at x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf at y=-\pgf at y
+ }
+ \savedanchor\left{%
+ \pgf at y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf at y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/height}\pgf at y
+ \pgf at y=.5\pgf at y
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf at y
+ \pgf at x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/width}\pgf at x
+ \pgf at x=.5\pgf at x
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf at y=-\pgf at y
+ }
+ \savedanchor\up{%
+ \pgf at y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/height}\pgf at y
+ \pgf at y=.5\pgf at y
+ \pgf at x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/width}\pgf at x
+ \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{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/port width}\pgf at circ@res at left}
+ {\pgf at circ@res at up}}
+ {\pgfpoint{.7\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
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/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
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/port width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf at circ@res at up}}
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/port width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf at circ@res at down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf at circ@res at right}{0pt}}
+
+ \pgfusepath{draw}
+
+
+ \pgfscope
+ \pgfsetlinewidth{2\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}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+
+
+ }
+ }
+
+%% Generic two port box
+\pgfcircdeclarebipole{}{\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@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
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
+ \pgfusepath{draw}
+
+ \ifpgf at circuit@inputarrow
+ {
+ \advance \pgf at circ@res at left by -.5\pgfkeysvalueof{/tikz/circuitikz/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}}
+
+}
+
+%% voltage controled oscillator
+\pgfcircdeclarebipole{}{\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@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
+
+ % draw circle
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpoint{0}{0}} {\pgf at circ@res at step}
+ \pgfusepath{draw}
+
+ \ifpgf at circuit@inputarrow
+ {
+ \advance \pgf at circ@res at left by -.5\pgfkeysvalueof{/tikz/circuitikz/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
+\pgfcircdeclarebipole{}{\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@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
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
+ \pgfusepath{draw}
+
+ \ifpgf at circuit@inputarrow
+ {
+ \advance \pgf at circ@res at left by -.5\pgfkeysvalueof{/tikz/circuitikz/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
+ \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}
+}
+
+%% highpass filter
+\pgfcircdeclarebipole{}{\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@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
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
+ \pgfusepath{draw}
+
+ \ifpgf at circuit@inputarrow
+ {
+ \advance \pgf at circ@res at left by -.5\pgfkeysvalueof{/tikz/circuitikz/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
+ \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
+\pgfcircdeclarebipole{}{\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@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
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
+ \pgfusepath{draw}
+
+ \ifpgf at circuit@inputarrow
+ {
+ \advance \pgf at circ@res at left by -.5\pgfkeysvalueof{/tikz/circuitikz/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
+ \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}
+}
+
+%% ADC
+\pgfcircdeclarebipole{}{\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@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
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
+ \pgfusepath{draw}
+
+ \ifpgf at circuit@inputarrow
+ {
+ \advance \pgf at circ@res at left by -.5\pgfkeysvalueof{/tikz/circuitikz/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
+ \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
+\pgfcircdeclarebipole{}{\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@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
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
+ \pgfusepath{draw}
+
+ \ifpgf at circuit@inputarrow
+ {
+ \advance \pgf at circ@res at left by -.5\pgfkeysvalueof{/tikz/circuitikz/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
+ \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
+\pgfcircdeclarebipole{}{\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@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
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
+ \pgfusepath{draw}
+
+ \ifpgf at circuit@inputarrow
+ {
+ \advance \pgf at circ@res at left by -.5\pgfkeysvalueof{/tikz/circuitikz/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
+\pgfcircdeclarebipole{}{\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@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
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
+ \pgfusepath{draw}
+
+ \ifpgf at circuit@inputarrow
+ {
+ \advance \pgf at circ@res at left by -.5\pgfkeysvalueof{/tikz/circuitikz/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
+\pgfcircdeclarebipole{}{
+ %\ifpgf at circuit@box
+ \ctikzvalof{bipoles/twoport/width}
+ %\else
+ % \ctikzvalof{bipoles/amp/width}
+ %\fi
+ }{amp}{
+ %\ifpgf at circuit@box
+ \ctikzvalof{bipoles/twoport/width}
+ %\else
+ % \ctikzvalof{bipoles/amp/width}
+ % \fi
+ }{
+ % \ifpgf at circuit@box
+ \ctikzvalof{bipoles/twoport/width}
+ % \else
+ % \ctikzvalof{bipoles/amp/width}
+ % \fi
+ }{
+ \pgf at circ@res at step = \ctikzvalof{bipoles/amp/width}\pgf at circ@Rlen
+
+
+ % draw outer box
+ %\ifpgf at circuit@box
+ % \pgfnode{box}{center}{}{pgf at box}{\pgfusepath{draw}}
+ %\fi
+ % draw outer box
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
+ \pgfusepath{draw}
+
+ % draw input arrow
+ \ifpgf at circuit@inputarrow
+ {
+ \advance \pgf at circ@res at left by -.5\pgfkeysvalueof{/tikz/circuitikz/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
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.5\pgf at circ@res at left}{0.75\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint{0.63\pgf at circ@res at right}{0}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf at circ@res at left}{0.75\pgf at circ@res at down}}
+ \pgfpathclose
+ \pgfusepath{draw}
+}
+
+
+%% variable amplifier
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vamp/width}}{vamp}{\ctikzvalof{bipoles/vamp/width}}{\ctikzvalof{bipoles/vamp/width}}{
+ \pgf at circ@res at step = \ctikzvalof{bipoles/vamp/width}\pgf at circ@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
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
+ \pgfusepath{draw}
+
+ \ifpgf at circuit@inputarrow
+ {
+ \advance \pgf at circ@res at left by -.5\pgfkeysvalueof{/tikz/circuitikz/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
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.5\pgf at circ@res at left}{0.75\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint{0.63\pgf at circ@res at right}{0}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf at circ@res at left}{0.75\pgf at circ@res at down}}
+ \pgfpathclose
+ \pgfusepath{draw}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{0.75\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.7\pgf at circ@res at up}}
+ \pgfusepath{draw}
+}
+
+%% pi attenuator
+\pgfcircdeclarebipole{}{\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@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
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
+ \pgfusepath{draw}
+
+ \ifpgf at circuit@inputarrow
+ {
+ \advance \pgf at circ@res at left by -.5\pgfkeysvalueof{/tikz/circuitikz/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
+ \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
+\pgfcircdeclarebipole{}{\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@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
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
+ \pgfusepath{draw}
+
+ \ifpgf at circuit@inputarrow
+ {
+ \advance \pgf at circ@res at left by -.5\pgfkeysvalueof{/tikz/circuitikz/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
+ \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
+\pgfcircdeclarebipole{}{\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@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
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
+ \pgfusepath{draw}
+
+ \ifpgf at circuit@inputarrow
+ {
+ \advance \pgf at circ@res at left by -.5\pgfkeysvalueof{/tikz/circuitikz/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
+ \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
+\pgfcircdeclarebipole{}{\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@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
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
+ \pgfusepath{draw}
+
+ \ifpgf at circuit@inputarrow
+ {
+ \advance \pgf at circ@res at left by -.5\pgfkeysvalueof{/tikz/circuitikz/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
+ \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
+\pgfcircdeclarebipole{}{\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@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
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
+ \pgfusepath{draw}
+
+ \ifpgf at circuit@inputarrow
+ {
+ \advance \pgf at circ@res at left by -.5\pgfkeysvalueof{/tikz/circuitikz/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
+\pgfcircdeclarebipole{}{\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@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
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
+ \pgfusepath{draw}
+
+ \ifpgf at circuit@inputarrow
+ {
+ \advance \pgf at circ@res at left by -.5\pgfkeysvalueof{/tikz/circuitikz/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
+\pgfcircdeclarebipole{}{\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@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
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}}
+ \pgfusepath{draw}
+
+ \ifpgf at circuit@inputarrow
+ {
+ \advance \pgf at circ@res at left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf at inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % draw inner stuff
+ \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@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@Rlen / \ctikzvalof{bipoles/resistor/width}}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{emptydiodeshape}{center}{}{pgf at emptydiode}{\pgfusepath{fill}}
+ \fi
+
+}
+
+
+
+
+%% european gas filled surge arrester
+
+\pgfcircdeclarebipole{}{\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}}{
+
+ %\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}{\pgf at circ@res at up}}{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/european gas filled surge arrester/inside}\pgf at circ@res at left}{0pt}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \endpgfscope
+}
+
+
+
+
+%% american gas filled surge arrester
+
+\pgfcircdeclarebipole{}{\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}}{
+ %\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
+
+ \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}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{.9\pgf at circ@res at up}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+
+ \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}
+
+ \pgfnode{circle}{center}{}{}{}
+
+ \pgfscope
+ \pgfsetarrowsend{latex}
+
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at zero}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/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{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/inside}\pgf at circ@res at left}{\pgf at circ@res at zero}}
+ \pgfusepath{draw}
+ \endpgfscope{}
+
+ %\pgftransformshift{\pgfpoint{.25\pgf at circ@res at left}{.45\pgf at circ@res at down}}
+ %\pgfnode{circ}{center}{}{}{}
+ %\pgftransformshift{}
+ \pgfcircle{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/dot x}\pgf at circ@res at left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/dot y}\pgf at circ@res at down}}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/size}\pgf at circ@res at down}
+ \pgfusepath{fill}
+}
+
+
+
+
+
+
+%%%---------- close: pgfcircbipoles
+%%%%%%%%%%% Springe nach pgfcirctripoles
+%%%---------- open: pgfcirctripoles.tex
+% Copyright 2007-2009 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 file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Tripoles
+
+
+\pgfdeclareshape{mixer}
+{
+ \savedanchor\northwest{
+ \pgf at y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/mixer/width}\pgf at y
+ \pgf at y=.5\pgf at y
+ \pgf at x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/mixer/width}\pgf at x
+ \pgf at x=.5\pgf at x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf at y=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{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{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf at circ@res at step=\ctikzvalof{tripoles/mixer/width}\pgf at circ@Rlen
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer circle
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf at circ@res at step}
+ \pgfusepath{draw}
+
+ % draw inner stuff
+ \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}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{adder}
+{
+ \savedanchor\northwest{
+ \pgf at y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/adder/width}\pgf at y
+ \pgf at y=.5\pgf at y
+ \pgf at x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/adder/width}\pgf at x
+ \pgf at x=.5\pgf at x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf at y=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{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{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf at circ@res at step=\ctikzvalof{tripoles/adder/width}\pgf at circ@Rlen
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer circle
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf at circ@res at step}
+ \pgfusepath{draw}
+
+ % draw inner stuff
+ \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}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+
+
+ \pgfdeclareshape{spdt}
+ {
+ \savedanchor\northwest{%
+ \pgf at y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/spdt/height}\pgf at y
+ \pgf at y=.5\pgf at y
+ \pgf at x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/spdt/width}\pgf at x
+ \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{\pgfkeysvalueof{/tikz/circuitikz/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 = \pgfkeysvalueof{/tikz/circuitikz/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}}
+ }
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+ }
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Logic ports
+%%
+
+
+
+
+
+
+\long\def\pgfcircdeclarelogicport#1#2{
+ \pgfdeclareshape{american #1 port}
+ {
+ \savedanchor\northwest{%
+ \pgf at y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/height}\pgf at y
+ \pgf at y=.5\pgf at y
+ \pgf at x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/width}\pgf at x
+ \pgf at x=.5\pgf at x
+ }
+ \savedanchor\left{%
+ \pgf at y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf at y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/height}\pgf at y
+ \pgf at y=.5\pgf at y
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/input height}\pgf at y
+ \pgf at x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/width}\pgf at x
+ \pgf at x=.5\pgf at x
+ }
+ \anchor{in 1}{
+ \inOne
+ }
+ \anchor{in}{
+ \inOne
+ }
+ \anchor{in 2}{
+ \inOne
+ \pgf at y=-\pgf at y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf at y=0pt
+ \pgf at x=-\pgf at x
+ }
+ \anchor{center}{
+ \northwest
+ \pgf at y=0pt
+ \pgf at x=-.8\pgf at x
+ }
+ \anchor{east}{
+ \left
+ \pgf at x=-.8\pgf at x
+ }
+ \anchor{west}{
+ \left
+ }
+ \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{\pgfkeysvalueof{/tikz/circuitikz/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
+
+ }
+ }
+}
+
+
+\pgfcircdeclarelogicport{and}{
+ \pgfpathmoveto{\pgfpoint
+ {\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/input height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/input height}\pgf at circ@res at up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/input height}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/input height}\pgf at circ@res at down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf at circ@res at right}
+ {0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf at circ@res at left}
+ {\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf at circ@res at left}
+ {\pgf at circ@res at down}}
+ \pgfpathcurveto
+ {\pgfpoint{.0\pgf at circ@res at left}{\pgf at circ@res at down}}
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf at circ@res at right}
+ {.5\pgf at circ@res at down}}
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf at circ@res at right}
+ {0pt}}
+ \pgfpathcurveto
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf at circ@res at right}
+ {.5\pgf at circ@res at up}}
+ {\pgfpoint{.0\pgf at circ@res at left}{\pgf at circ@res at up}}
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf at circ@res at left}
+ {\pgf at circ@res at up}}
+ \pgfusepath{draw}
+}
+
+
+
+\pgfcircdeclarelogicport{nand}{
+ \pgfpathmoveto{\pgfpoint
+ {\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/input height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/input height}\pgf at circ@res at up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/input height}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/input height}\pgf at circ@res at down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf at circ@res at right}
+ {0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{2\pgflinewidth}
+
+ \pgf at circ@res at step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/circle width}\pgf at circ@res at right
+ \pgf at circ@res at other = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf at circ@res at right
+
+ \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}}
+ \pgfpathcurveto
+ {\pgfpoint{.0\pgf at circ@res at left}{\pgf at circ@res at down}}
+ {\pgfpoint{\pgf at circ@res at other-\pgf at circ@res at step}{.5\pgf at circ@res at down}}
+ {\pgfpoint{\pgf at circ@res at other-\pgf at circ@res at step}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf at circ@res at other-\pgf at circ@res at step}{.5\pgf at circ@res at up}}
+ {\pgfpoint{.0\pgf at circ@res at left}{\pgf at circ@res at up}}
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf at circ@res at left}
+ {\pgf at circ@res at up}}
+ \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}}
+
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclarelogicport{nor}{
+ \pgfpathmoveto{\pgfpoint
+ {\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input skip})*\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input height}\pgf at circ@res at up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input height}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input skip})*\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input height}\pgf at circ@res at down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}\pgf at circ@res at right}
+ {0pt}}
+
+ \pgfusepath{draw}
+
+ \pgf at circ@res at other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}\pgf at circ@res at right
+ \pgf at circ@res at step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/circle width}\pgf at circ@res at right
+
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at other}{\pgf at circ@res at up}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/aaa}\pgf at circ@res at left}{\pgf at circ@res at up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/bbb}\pgf at circ@res at left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ccc}\pgf at circ@res at up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/bbb}\pgf at circ@res at left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/bbb}\pgf at circ@res at left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ccc}\pgf at circ@res at down}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/aaa}\pgf at circ@res at left}{\pgf at circ@res at down}}
+ {\pgfpoint{-\pgf at circ@res at other}{\pgf at circ@res at down}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ddd}\pgf at circ@res at left}{\pgf at circ@res at down}}
+ {\pgfpoint{\pgf at circ@res at other-\pgf at circ@res at step}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ccc}\pgf at circ@res at down}}
+ {\pgfpoint{\pgf at circ@res at other-\pgf at circ@res at step}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf at circ@res at other-\pgf at circ@res at step}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ccc}\pgf at circ@res at up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ddd}\pgf at circ@res at left}{\pgf at circ@res at up}}
+ {\pgfpoint{-\pgf at circ@res at other}{\pgf at circ@res at up}}
+
+ \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}}
+
+ \pgfusepath{draw}
+}
+
+
+
+
+\pgfcircdeclarelogicport{or}{
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input skip})*\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input height}\pgf at circ@res at up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input height}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input skip})*\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input height}\pgf at circ@res at down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}\pgf at circ@res at right}
+ {0pt}}
+
+ \pgfusepath{draw}
+ \pgf at circ@res at other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}\pgf at circ@res at right
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at other}{\pgf at circ@res at up}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/aaa}\pgf at circ@res at left}{\pgf at circ@res at up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/bbb}\pgf at circ@res at left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ccc}\pgf at circ@res at up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/bbb}\pgf at circ@res at left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/bbb}\pgf at circ@res at left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ccc}\pgf at circ@res at down}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/aaa}\pgf at circ@res at left}{\pgf at circ@res at down}}
+ {\pgfpoint{-\pgf at circ@res at other}{\pgf at circ@res at down}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ddd}\pgf at circ@res at left}{\pgf at circ@res at down}}
+ {\pgfpoint{\pgf at circ@res at other}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ccc}\pgf at circ@res at down}}
+ {\pgfpoint{\pgf at circ@res at other}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf at circ@res at other}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ccc}\pgf at circ@res at up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ddd}\pgf at circ@res at left}{\pgf at circ@res at up}}
+ {\pgfpoint{-\pgf at circ@res at other}{\pgf at circ@res at up}}
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclarelogicport{xor}{
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input skip})*\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input height}\pgf at circ@res at up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input height}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input skip})*\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input height}\pgf at circ@res at down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}\pgf at circ@res at right}
+ {0pt}}
+
+ \pgfusepath{draw}
+ \pgf at circ@res at other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}\pgf at circ@res at right
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at other}{\pgf at circ@res at up}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/aaa}\pgf at circ@res at left}{\pgf at circ@res at up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf at circ@res at left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf at circ@res at up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf at circ@res at left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf at circ@res at left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf at circ@res at down}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/aaa}\pgf at circ@res at left}{\pgf at circ@res at down}}
+ {\pgfpoint{-\pgf at circ@res at other}{\pgf at circ@res at down}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ddd}\pgf at circ@res at left}{\pgf at circ@res at down}}
+ {\pgfpoint{\pgf at circ@res at other}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf at circ@res at down}}
+ {\pgfpoint{\pgf at circ@res at other}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf at circ@res at other}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf at circ@res at up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ddd}\pgf at circ@res at left}{\pgf at circ@res at up}}
+ {\pgfpoint{-\pgf at circ@res at other}{\pgf at circ@res at up}}
+
+ \def\pgf at circ@temp{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/distance}\pgf at circ@res at right+}
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@temp-\pgf at circ@res at other}{\pgf at circ@res at up}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgf at circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/aaa}\pgf at circ@res at left}{.95*\pgf at circ@res at up}}
+ {\pgfpoint{\pgf at circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf at circ@res at left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf at circ@res at up}}
+ {\pgfpoint{\pgf at circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf at circ@res at left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf at circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf at circ@res at left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf at circ@res at down}}
+ {\pgfpoint{\pgf at circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/aaa}\pgf at circ@res at left}{.95*\pgf at circ@res at down}}
+ {\pgfpoint{\pgf at circ@temp-\pgf at circ@res at other}{.95*\pgf at circ@res at down}}
+
+ \pgfusepath{draw}
+}
+
+
+
+\pgfcircdeclarelogicport{xnor}{
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input skip})*\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input height}\pgf at circ@res at up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input height}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input skip})*\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input height}\pgf at circ@res at down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}\pgf at circ@res at right}
+ {0pt}}
+
+ \pgfusepath{draw}
+ \pgf at circ@res at other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}\pgf at circ@res at right
+ \pgf at circ@res at step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/circle width}\pgf at circ@res at right
+
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf at circ@res at other}{\pgf at circ@res at up}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/aaa}\pgf at circ@res at left}{\pgf at circ@res at up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf at circ@res at left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf at circ@res at up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf at circ@res at left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf at circ@res at left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf at circ@res at down}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/aaa}\pgf at circ@res at left}{\pgf at circ@res at down}}
+ {\pgfpoint{-\pgf at circ@res at other}{\pgf at circ@res at down}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ddd}\pgf at circ@res at left}{\pgf at circ@res at down}}
+ {\pgfpoint{\pgf at circ@res at other-\pgf at circ@res at step}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf at circ@res at down}}
+ {\pgfpoint{\pgf at circ@res at other-\pgf at circ@res at step}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf at circ@res at other-\pgf at circ@res at step}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf at circ@res at up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ddd}\pgf at circ@res at left}{\pgf at circ@res at up}}
+ {\pgfpoint{-\pgf at circ@res at other}{\pgf at circ@res at up}}
+
+ \def\pgf at circ@temp{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/distance}\pgf at circ@res at right+}
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@temp-\pgf at circ@res at other}{\pgf at circ@res at up}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgf at circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/aaa}\pgf at circ@res at left}{.95*\pgf at circ@res at up}}
+ {\pgfpoint{\pgf at circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf at circ@res at left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf at circ@res at up}}
+ {\pgfpoint{\pgf at circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf at circ@res at left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf at circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf at circ@res at left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf at circ@res at down}}
+ {\pgfpoint{\pgf at circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/aaa}\pgf at circ@res at left}{.95*\pgf at circ@res at down}}
+ {\pgfpoint{\pgf at circ@temp-\pgf at circ@res at other}{.95*\pgf at circ@res at down}}
+
+
+ \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}}
+
+ \pgfusepath{draw}
+}
+
+
+\pgfdeclareshape{american not port}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf at y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/height}\pgf at y
+ \pgf at y=.5\pgf at y
+ \pgf at x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/width}\pgf at x
+ \pgf at x=.5\pgf at x
+ }
+ \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{center}{
+ \pgfpointorigin
+ }
+ \anchor{east}{
+ \left
+ \pgf at x=-.8\pgf at x
+ }
+ \anchor{west}{
+ \left
+ }
+ \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{\pgfkeysvalueof{/tikz/circuitikz/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 = \pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/circle width}\pgf at circ@res at right
+
+ \pgfscope
+ \pgfsetlinewidth{2\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}}
+ \pgfusepath{draw}
+ \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}}
+ \pgfusepath{draw}
+ \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}
+
+ }
+ }
+
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% #1 - name
+% #2 - text inside
+% #3 - number of inputs
+% #4 - is it a not
+
+\long\def\pgfcircdeclareeurologicport#1#2#3#4{
+ \pgfdeclareshape{european #1 port}
+ {
+ \savedanchor\northwest{%
+ \pgf at y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/height}\pgf at y
+ \pgf at y=.5\pgf at y
+ \pgf at x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/width}\pgf at x
+ \pgf at x=.5\pgf at x
+ }
+ \savedanchor\left{%
+ \pgf at y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf at y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/height}\pgf at y
+ \pgf at y=.5\pgf at y
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf at y
+ \pgf at x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/width}\pgf at x
+ \pgf at x=.5\pgf at x
+ }
+ \anchor{in}{
+ \inOne
+ }
+ \anchor{in 1}{
+ \inOne
+ }
+ \anchor{in 2}{
+ \inOne
+ \pgf at y=-\pgf at y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf at y=0pt
+ \pgf at x=-\pgf at x
+ }
+ \anchor{center}{
+ \northwest
+ \pgf at y=0pt
+ \pgf at x=-.8\pgf at x
+ }
+ \anchor{east}{
+ \left
+ \pgf at x=-.8\pgf at x
+ }
+ \anchor{west}{
+ \left
+ }
+ \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{\pgfkeysvalueof{/tikz/circuitikz/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
+ \def\pgf at temp{1}
+ \def\pgf at circ@temp{#3}
+ \ifx\pgftemp\pgf at circ@temp % one input
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{0pt}}
+ \pgfpathlineto{
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf at circ@res at left}{0pt}}
+ \else % two inputs
+ \pgfpathmoveto{
+ \pgfpoint{\pgf at circ@res at left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf at circ@res at up}}
+ \pgfpathlineto{
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf at circ@res at up}}
+ %
+ \pgfpathmoveto{
+ \pgfpoint{\pgf at circ@res at left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf at circ@res at down}}
+ \pgfpathlineto{
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf at circ@res at down}}
+ \fi%
+ %
+ %
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+ \pgfpathlineto{
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf at circ@res at right}{0pt}}
+ %
+ \edef\pgf at temp{not}
+ \edef\pgf at circ@temp{#4}
+ \ifx\pgf at temp\pgf at circ@temp % is a not
+ \pgfpathmoveto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/not width}\pgf at circ@res at right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf at circ@res at right}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/not height}\pgf at circ@res at up}}
+ \fi
+ %
+ \pgfusepath{draw}
+ %
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgftext{#2}
+ %
+ %
+ %
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathrectanglecorners
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf at circ@res at left}{\pgf at circ@res at up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf at circ@res at right}{\pgf at circ@res at down}}
+ \pgfusepath{draw}
+%
+%
+ }
+ }
+}
+
+
+
+\pgfcircdeclareeurologicport{and}{$\&$}{2}{}
+\pgfcircdeclareeurologicport{or}{$\ge 1$}{2}{}
+\pgfcircdeclareeurologicport{xor}{$=1$}{2}{}
+\pgfcircdeclareeurologicport{not}{$1$}{1}{not}
+\pgfcircdeclareeurologicport{nand}{$\&$}{2}{not}
+\pgfcircdeclareeurologicport{nor}{$\ge 1$}{2}{not}
+\pgfcircdeclareeurologicport{xnor}{$=1$}{2}{not}
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\long\def\pgfcircdeclaretransistor#1#2#3{
+ \pgfdeclareshape{#1}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northeast{% upper right
+ \pgf at y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/height}\pgf at y
+ \pgf at y=.5\pgf at y
+ \pgf at x=0pt
+ }
+% \savedanchor\northeast{%
+% \pgf at y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+% \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/height}\pgf at y
+% \pgf at y=.5\pgf at y
+% \pgf at x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+% \pgf at x=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/width}\pgf at x
+% }
+ \savedanchor\left{%center left
+ \pgf at y=0pt
+ \pgf at x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/width}\pgf at x
+ }
+ \anchor{text}{
+ \northeast
+ \pgfpoint
+ {12\pgf at circ@res at right +0.2*(\pgf at circ@res at right-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf at circ@res at left)}
+ {0.6\pgf at y}
+ }
+ %
+ % pseudo-bipole
+ \anchor{left}{ % south
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+ \anchor{right}{
+ \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}{
+ \pgf at x=0pt
+ \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
+ }
+
+ #2
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ %
+ %
+ \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
+ %
+ #3
+ %
+ }
+ }
+}
+
+
+
+
+
+
+\long\def\pgfcircdeclaremos#1#2#3{
+ \pgfcircdeclaretransistor{#1}{
+ \anchor{G}{
+ \left
+ }
+ \anchor{gate}{
+ \left
+ }
+ \anchor{B}{
+ \left
+ \pgf at x=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf at x
+ }
+ \anchor{base}{
+ \left
+ \pgf at x=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf at x
+ }
+ #2
+ }
+ {#3}
+}
+
+
+
+
+
+
+
+
+
+\pgfcircdeclaremos{nmos}{
+ \anchor{D}{
+ \northeast
+ }
+ \anchor{drain}{
+ \northeast
+ }
+ \anchor{S}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+ \anchor{source}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+}{%
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf at circ@res at up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base height}\pgf at circ@res at down}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf at circ@res at down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \ifpgf at circuit@mos at arrows
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf at circ@res at left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf at circ@res at down}%
+ }{%
+ \pgfpoint
+ {\pgf at circ@res at right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf at circ@res at down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \fi
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/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}{\pgf at circ@res at up+\pgf at circ@res at down}}
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclaremos{pmos}{
+ \anchor{S}{
+ \northeast
+ }
+ \anchor{source}{
+ \northeast
+ }
+ \anchor{D}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+ \anchor{drain}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+}{%
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf at circ@res at up}}
+ \pgfusepath{draw}
+
+ \ifpgf at circuit@mos at arrows
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.4}{%
+ \pgfpoint%
+ {\pgf at circ@res at right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf at circ@res at up}%
+ }{%
+ \pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf at circ@res at left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf at circ@res at up}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \fi
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base height}\pgf at circ@res at down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf at circ@res at down}}
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/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}{\pgf at circ@res at up+\pgf at circ@res at down}}
+ \pgfusepath{draw}
+
+ \pgfpathcircle{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf at circ@res at left - \pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}
+ {\pgf at circ@res at up+\pgf at circ@res at down}}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}
+ \pgfusepath{draw,fill}
+
+}
+
+
+
+
+
+
+
+\pgfcircdeclaretransistor{pnp}{
+ \anchor{E}{
+ \northeast
+ }
+ \anchor{emitter}{
+ \northeast
+ }
+ \anchor{B}{
+ \left
+ }
+ \anchor{base}{
+ \left
+ }
+ \anchor{C}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+ \anchor{collector}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+}{
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/gate height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/gate height 2}\pgf at circ@res at up}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/base height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/base height}\pgf at circ@res at down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/gate height 2}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/gate height}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\pgf at circ@res at right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/gate height}\pgf at circ@res at up}%
+ }{%
+ \pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/gate width}\pgf at circ@res at left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/gate height 2}\pgf at circ@res at up}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/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}{\pgf at circ@res at up+\pgf at circ@res at down}}
+ \pgfusepath{draw}
+}
+
+
+
+
+
+
+\pgfcircdeclaretransistor{npn}{
+ \anchor{C}{
+ \northeast
+ }
+ \anchor{collector}{
+ \northeast
+ }
+ \anchor{B}{
+ \left
+ }
+ \anchor{base}{
+ \left
+ }
+ \anchor{E}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+ \anchor{emitter}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+}{%
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/gate height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/gate height 2}\pgf at circ@res at up}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/base height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/base height}\pgf at circ@res at down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/gate height 2}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/gate height}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/gate width}\pgf at circ@res at left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/gate height 2}\pgf at circ@res at down}%
+ }{%
+ \pgfpoint{\pgf at circ@res at right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/gate height}\pgf at circ@res at down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/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}{\pgf at circ@res at up+\pgf at circ@res at down}}
+ \pgfusepath{draw}
+
+
+}
+
+
+
+\pgfcircdeclaretransistor{pigbt}{
+ \anchor{E}{
+ \northeast
+ }
+ \anchor{emitter}{
+ \northeast
+ }
+ \anchor{B}{
+ \left
+ }
+ \anchor{base}{
+ \left
+ }
+ \anchor{C}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+ \anchor{collector}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+}{
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate height 2}\pgf at circ@res at up}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base height}\pgf at circ@res at down}}
+ %\pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base height}\pgf at circ@res at down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate height 2}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate height}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\pgf at circ@res at right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate height}\pgf at circ@res at up}%
+ }{%
+ \pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base width}\pgf at circ@res at left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate height 2}\pgf at circ@res at up}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/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}{\pgf at circ@res at up+\pgf at circ@res at down}}
+ \pgfusepath{draw}
+
+
+}
+
+
+
+\pgfcircdeclaretransistor{nigbt}{
+ \anchor{C}{
+ \northeast
+ }
+ \anchor{collector}{
+ \northeast
+ }
+ \anchor{B}{
+ \left
+ }
+ \anchor{base}{
+ \left
+ }
+ \anchor{E}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+ \anchor{emitter}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+}{
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate height 2}\pgf at circ@res at up}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base height}\pgf at circ@res at down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base height}\pgf at circ@res at down}}
+ %\pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate height 2}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate height}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base width}\pgf at circ@res at left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate height 2}\pgf at circ@res at down}%
+ }{%
+ \pgfpoint{\pgf at circ@res at right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate height}\pgf at circ@res at down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/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}{\pgf at circ@res at up+\pgf at circ@res at down}}
+ \pgfusepath{draw}
+
+
+}
+
+
+
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Contrib
+
+
+%%
+% IGFET (e.g. MOSFET)
+\long\def\pgfcircdeclarefet#1#2#3{
+ \pgfcircdeclaretransistor{#1}{
+ \anchor{B}{
+ \left
+ \pgf at x=\pgf at circ@res at right
+ }
+ \anchor{base}{
+ \left
+ \pgf at x=\pgf at circ@res at right
+ }
+ #2
+ }
+ {#3}
+}
+
+
+
+\pgfcircdeclarefet{nfet}{
+ \anchor{D}{
+ \northeast
+ }
+ \anchor{drain}{
+ \northeast
+ }
+ \anchor{S}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+ \anchor{source}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+ \anchor{G}{
+ \left
+ }
+ \anchor{gate}{
+ \left
+ }
+
+}{%
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/gate height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/gate height}\pgf at circ@res at up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base height}\pgf at circ@res at up*0.45}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base height}\pgf at circ@res at up*0.25}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base height}\pgf at circ@res at down*0.25}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base height}\pgf at circ@res at down*0.45}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base height}\pgf at circ@res at down}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/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}
+ {\pgf at circ@res at up+\pgf at circ@res at down}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/gate height}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/gate height}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/gate height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/gate height}\pgf at circ@res at down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint
+ {\pgf at circ@res at right}%
+ {\pgf at circ@res at up+\pgf at circ@res at down}%
+ }{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base width}\pgf at circ@res at left}%
+ {\pgf at circ@res at up+\pgf at circ@res at down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/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}{\pgf at circ@res at up+\pgf at circ@res at down}}
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclarefet{pfet}{
+ \anchor{D}{
+ \northeast
+ }
+ \anchor{drain}{
+ \northeast
+ }
+ \anchor{S}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+ \anchor{source}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+ \anchor{G}{
+ \left
+ }
+ \anchor{gate}{
+ \left
+ }
+
+}{%
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/gate height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/gate height}\pgf at circ@res at up}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base height}\pgf at circ@res at up*0.45}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base height}\pgf at circ@res at up*0.25}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base height}\pgf at circ@res at down*0.25}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base height}\pgf at circ@res at down*0.45}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base height}\pgf at circ@res at down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/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}
+ {\pgf at circ@res at up+\pgf at circ@res at down}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/gate height}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/gate height}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/gate height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/gate height}\pgf at circ@res at down}}
+ %\pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint
+ {\pgf at circ@res at right}%
+ {\pgf at circ@res at up+\pgf at circ@res at down}%
+ }{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base width}\pgf at circ@res at left}%
+ {\pgf at circ@res at up+\pgf at circ@res at down}%
+ }
+ \pgftransformrotate{180}
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/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}{\pgf at circ@res at up+\pgf at circ@res at down}}
+ \pgfusepath{draw}
+}
+
+
+
+% N-CHANNEL IGFET ENHANCEMENT TYPE
+\pgfcircdeclarefet{nigfete}{
+ \anchor{D}{
+ \northeast
+ }
+ \anchor{drain}{
+ \northeast
+ }
+ \anchor{S}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+ \anchor{source}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+ \anchor{G}{
+ \northeast
+ \pgf at circ@res at step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf at y
+ \left
+ \pgf at y=-\pgf at circ@res at step
+ }
+ \anchor{gate}{
+ \northeast
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf at y
+ }
+}{%
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+ % DRAIN CONNECTION
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf at circ@res at up}}
+ % DRAIN
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf at circ@res at up}}
+
+ % GATE, ENHANCEMENT TYPE (DASHED)
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base height}\pgf at circ@res at up*0.45}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base height}\pgf at circ@res at up*0.25}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base height}\pgf at circ@res at down*0.25}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base height}\pgf at circ@res at down*0.45}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base height}\pgf at circ@res at down}}
+
+ % BULK
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/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}
+ {\pgf at circ@res at up+\pgf at circ@res at down}}
+
+ % SOURCE
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/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}}
+ \pgfusepath{draw}
+
+ % GATE
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf at circ@res at down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ % ARROW
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint
+ {\pgf at circ@res at right}%
+ {\pgf at circ@res at up+\pgf at circ@res at down}%
+ }{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base width}\pgf at circ@res at left}%
+ {\pgf at circ@res at up+\pgf at circ@res at down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ % GATE CONNECTION
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf at circ@res at down}}
+ \pgfusepath{draw}
+}
+
+% N-CHANNEL IGFET DEPLETION TYPE
+\pgfcircdeclarefet{nigfetd}{
+ \anchor{D}{
+ \northeast
+ }
+ \anchor{drain}{
+ \northeast
+ }
+ \anchor{S}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+ \anchor{source}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+ \anchor{G}{
+ \northeast
+ \pgf at circ@res at step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf at y
+ \left
+ \pgf at y=-\pgf at circ@res at step
+ }
+ \anchor{gate}{
+ \northeast
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf at y
+ }
+
+}{%
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+ % DRAIN CONNECTION
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/gate height}\pgf at circ@res at up}}
+ % DRAIN
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/gate height}\pgf at circ@res at up}}
+
+ % GATE, DEPLETION TYPE
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/base height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/base height}\pgf at circ@res at down}}
+
+ % BULK
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/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}
+ {\pgf at circ@res at up+\pgf at circ@res at down}}
+
+ % SOURCE
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/gate height}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/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}}
+ \pgfusepath{draw}
+
+ % GATE
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/gate height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/gate height}\pgf at circ@res at down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ % ARROW
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint
+ {\pgf at circ@res at right}%
+ {\pgf at circ@res at up+\pgf at circ@res at down}%
+ }{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/base width}\pgf at circ@res at left}%
+ {\pgf at circ@res at up+\pgf at circ@res at down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ % GATE CONNECTION
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/gate height}\pgf at circ@res at down}}
+ %\pgfpathlineto{\pgfpoint{\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}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/gate height}\pgf at circ@res at down}}
+ \pgfusepath{draw}
+}
+
+% P-CHANNEL IGFET ENHANCEMENT TYPE
+\pgfcircdeclarefet{pigfete}{
+ \anchor{D}{
+ \northeast
+ }
+ \anchor{drain}{
+ \northeast
+ }
+ \anchor{S}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+ \anchor{source}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+ \anchor{G}{
+ \northeast
+ \pgf at circ@res at step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf at y
+ \left
+ \pgf at y=-\pgf at circ@res at step
+ }
+ \anchor{gate}{
+ \northeast
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf at y
+ }
+}{%
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+ % DRAIN CONNECTION
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/gate height}\pgf at circ@res at up}}
+ % DRAIN
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/gate height}\pgf at circ@res at up}}
+ \pgfusepath{draw}
+
+ % GATE, DASHED, BOLD
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base height}\pgf at circ@res at up*0.45}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base height}\pgf at circ@res at up*0.25}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base height}\pgf at circ@res at down*0.25}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base height}\pgf at circ@res at down*0.45}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base height}\pgf at circ@res at down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ % BULK
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/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}
+ {\pgf at circ@res at up+\pgf at circ@res at down}}
+
+ % SOURCE
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/gate height}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/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}}
+ \pgfusepath{draw}
+
+ % GATE
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/gate height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/gate height}\pgf at circ@res at down}}
+ %\pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ % ARROW
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ % Arrow has to be rotated, as this is a p-channel fet
+ \pgftransformrotate{180}
+ \pgftransformlineattime{-.6}{%
+ \pgfpoint
+ {\pgf at circ@res at right}%
+ {\pgf at circ@res at up+\pgf at circ@res at down}%
+ }{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base width}\pgf at circ@res at left}%
+ {\pgf at circ@res at up+\pgf at circ@res at down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ % GATE CONNECTION (in line with source)
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/gate height}\pgf at circ@res at down}}
+ %\pgfpathlineto{\pgfpoint{\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}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/gate height}\pgf at circ@res at down}}
+ \pgfusepath{draw}
+}
+
+% P-CHANNEL IGFET DEPLETION TYPE
+\pgfcircdeclarefet{pigfetd}{
+ \anchor{D}{
+ \northeast
+ }
+ \anchor{drain}{
+ \northeast
+ }
+ \anchor{S}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+ \anchor{source}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+ \anchor{G}{
+ \northeast
+ \pgf at circ@res at step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf at y
+ \left
+ \pgf at y=-\pgf at circ@res at step
+ }
+ \anchor{gate}{
+ \northeast
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf at y
+ }
+}{%
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+ % DRAIN CONNECTION
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/gate height}\pgf at circ@res at up}}
+ % DRAIN
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/gate height}\pgf at circ@res at up}}
+
+ \pgfusepath{draw}
+
+
+ % GATE DEPLETION TYPE
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/base height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/base height}\pgf at circ@res at down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ % BULK
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/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}
+ {\pgf at circ@res at up+\pgf at circ@res at down}}
+
+
+ % SOURCE
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/gate height}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/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}}
+ \pgfusepath{draw}
+
+ % GATE
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/gate height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/gate height}\pgf at circ@res at down}}
+ %\pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ % ARROW
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ % PFET!
+ \pgftransformrotate{180}
+ \pgftransformlineattime{-.6}{%
+ \pgfpoint
+ {\pgf at circ@res at right}%
+ {\pgf at circ@res at up+\pgf at circ@res at down}%
+ }{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base width}\pgf at circ@res at left}%
+ {\pgf at circ@res at up+\pgf at circ@res at down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ % GATE CONNECTION
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/gate height}\pgf at circ@res at down}}
+ %\pgfpathlineto{\pgfpoint{\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}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/gate height}\pgf at circ@res at down}}
+ \pgfusepath{draw}
+}
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% Contrib Danilo Piazzalunga
+
+
+
+
+
+
+\pgfcircdeclaretransistor{njfet}{
+ \anchor{G}{
+ \left
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/height}\pgf at y
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf at y
+ \pgf at y=-.5\pgf at y
+ }
+ \anchor{gate}{
+ \left
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/height}\pgf at y
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf at y
+ \pgf at y=-.5\pgf at y
+ }
+ \anchor{D}{
+ \northeast
+ }
+ \anchor{drain}{
+ \northeast
+ }
+ \anchor{S}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+ \anchor{source}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+}{%
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf at circ@res at up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/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}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height}\pgf at circ@res at down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint{\pgf at circ@res at left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf at circ@res at down}%
+ }{%
+ \pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf at circ@res at left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf at circ@res at down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf at circ@res at down}}
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclaretransistor{pjfet}{
+ \anchor{G}{
+ \left
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/height}\pgf at y
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf at y
+ \pgf at y=.5\pgf at y
+ }
+ \anchor{gate}{
+ \left
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/height}\pgf at y
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf at y
+ \pgf at y=.5\pgf at y
+ }
+ \anchor{S}{
+ \northeast
+ }
+ \anchor{source}{
+ \northeast
+ }
+ \anchor{D}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+ \anchor{drain}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+}{%
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf at circ@res at up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/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}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height}\pgf at circ@res at down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.4}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf at circ@res at left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf at circ@res at up}%
+ }{%
+ \pgfpoint{\pgf at circ@res at left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf at circ@res at up}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf at circ@res at up}}
+ \pgfusepath{draw}
+}
+
+
+
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+
+
+
+% ISFET
+\pgfcircdeclarefet{isfet}{
+ \anchor{D}{
+ \northeast
+ }
+ \anchor{drain}{
+ \northeast
+ }
+ \anchor{S}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+ \anchor{source}{
+ \northeast
+ \pgf at y=-\pgf at y
+ }
+}{%
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+ % DRAIN CONNECTION
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf at circ@res at up}}
+ % DRAIN
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf at circ@res at up}}
+ \pgfusepath{draw}
+
+ % GATE, DEPLETION TYPE
+ \pgfscope %% added
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base height}\pgf at circ@res at down}}
+ \pgfsetlinewidth{2\pgflinewidth} %% added
+ \pgfusepath{draw} %% added
+ \endpgfscope %% added
+
+ % BULK
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/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}
+ {\pgf at circ@res at up+\pgf at circ@res at down}}
+
+ % SOURCE
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}
+ {\pgfkeysvalueof{/tikz/circuitikz/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}}
+ \pgfusepath{draw}
+
+ % GATE
+ %\pgfscope
+ %\pgfpathmoveto{\pgfpoint
+ % {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate width}\pgf at circ@res at left}
+ % {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf at circ@res at up}}
+ %\pgfpathlineto{\pgfpoint
+ % {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate width}\pgf at circ@res at left}
+ % {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf at circ@res at down}}
+ %\pgfsetlinewidth{2\pgflinewidth}
+ %\pgfusepath{draw}
+ %\endpgfscope
+
+ % ARROW
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint
+ {\pgf at circ@res at right}%
+ {\pgf at circ@res at up+\pgf at circ@res at down}%
+ }{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf at circ@res at left}%
+ {\pgf at circ@res at up+\pgf at circ@res at down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfusepath{draw}
+
+ % Wavy lines
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves x sep}\pgf at circ@res at up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves y sep}\pgf at circ@res at up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf at circ@res at up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf at circ@res at up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf at circ@res at up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf at circ@res at up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf at circ@res at up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf at circ@res at up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf at circ@res at up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf at circ@res at up}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves x sep}\pgf at circ@res at up}{0cm}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf at circ@res at up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf at circ@res at up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf at circ@res at up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf at circ@res at up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf at circ@res at up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf at circ@res at up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf at circ@res at up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf at circ@res at up}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves x sep}\pgf at circ@res at up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves y sep}\pgf at circ@res at up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf at circ@res at up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf at circ@res at up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf at circ@res at up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf at circ@res at up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf at circ@res at up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf at circ@res at up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf at circ@res at up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf at circ@res at up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+%% Black thyristor
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{anode}{
+ \ifpgf at circuit@bipole at reversed\northeast\else\southwest\fi
+ \pgf at y=0cm
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{cathode}{
+ \ifpgf at circuit@bipole at reversed\southwest\else\northeast\fi
+ \pgf at y=0cm
+ }
+}{\ctikzvalof{tripoles/thyristor/height 2}}{thyristor}{\ctikzvalof{tripoles/thyristor/height}}{\ctikzvalof{tripoles/thyristor/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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 triac
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{anode}{
+ \ifpgf at circuit@bipole at reversed\northeast\else\southwest\fi
+ \pgf at y=0cm
+ }
+ \anchor{cathode}{
+ \ifpgf at circuit@bipole at reversed\southwest\else\northeast\fi
+ \pgf at y=0cm
+ }
+}{\ctikzvalof{tripoles/triac/height}}{triac}{\ctikzvalof{tripoles/triac/height}}{\ctikzvalof{tripoles/triac/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}
+
+ \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}
+
+}
+
+
+
+
+
+
+
+
+
+\pgfcircdeclarebipole{
+ \anchor{out 1}{
+ \ifpgf at circuit@bipole at reversed\southwest\else\northeast\fi
+ \pgf at y=0cm
+ }
+ \anchor{out 2}{
+ \ifpgf at circuit@bipole at reversed\southwest\else\northeast\fi
+ \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}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\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}
+}
+
+
+
+
+
+
+
+
+
+
+\pgfdeclareshape{op amp}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf at y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf at y
+ \pgf at y=.5\pgf at y
+ \pgf at x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf at x
+ \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
+ }
+ \savedanchor\inOne{%
+ \pgf at y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf at y
+ \pgf at y=.5\pgf at y
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf at y
+ \pgf at x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf at x
+ \pgf at x=.5\pgf at x
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf at y=-\pgf at y
+ }
+ \savedanchor\up{%
+ \pgf at y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf at y
+ \pgf at y=.5\pgf at y
+ \pgf at x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf at x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf at x
+ \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{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf at circ@res at left}
+ {\pgf at circ@res at up}}
+ {\pgfpoint{.7\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
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/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
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf at circ@res at up}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf at circ@res at left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf at circ@res at up}]{\scriptsize\ $-$}
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf at circ@res at down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf at circ@res at left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf at circ@res at down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf at circ@res at left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf at circ@res at down}]{\scriptsize\ $+$}
+
+ \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf at circ@res at right}{0pt}}
+
+ \pgfusepath{draw}
+
+
+ \pgfscope
+ \pgfsetlinewidth{2\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}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+
+
+ }
+ }
+
+
+
+
+%% Potentiometer
+\pgfcircdeclarebipole{
+ \anchor{wiper}{
+ \northeast
+ \pgfpoint{0pt}{\pgf at y}
+ }
+ \anchor{W}{
+ \northeast
+ \pgfpoint{0pt}{\pgf at y}
+ }
+}{\ctikzvalof{bipoles/potentiometer/height 2}}{potentiometer}{\ctikzvalof{bipoles/potentiometer/height}}{\ctikzvalof{bipoles/potentiometer/width}}{
+ \pgf at circ@res at step = \ctikzvalof{bipoles/potentiometer/width}\pgf at circ@Rlen
+ \divide \pgf at circ@res at step by 12
+
+ \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
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \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 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 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 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 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 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}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ %\pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf at circ@res at up}}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf at circ@res at down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+
+
+%% Generic tunable
+
+\pgfcircdeclarebipole{
+ \anchor{wiper}{
+ \northeast
+ \pgfpoint{0pt}{\pgf at y}
+ }
+}{\ctikzvalof{bipoles/generic potentiometer/height 2}}{genericpotentiometer}{\ctikzvalof{bipoles/generic potentiometer/height}}{\ctikzvalof{bipoles/generic potent