% 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.


\NeedsTeXFormat{LaTeX2e}

\def\pgfcircversion{0.2.1}

\ProvidesPackage{circuitikz}%
        [2009/04/17 The CircuiTikz circuit drawing package version \pgfcircversion]

%% Version 2.0 of pgf/TikZ is required
\RequirePackage{tikz}
\RequirePackage{xstring}
\usetikzlibrary{calc}
\usepgflibrary{decorations.pathmorphing}


%% Options

\DeclareOption{fulldiode}{
	\ctikzset{full diode=true}
}

\DeclareOption{emptydiode}{
	\ctikzset{full diode=false}
}

\DeclareOption{europeanvoltage}{
	\ctikzset{european voltage=true}
}

\DeclareOption{americanvoltage}{
	\ctikzset{european voltage=false}
}

\DeclareOption{europeancurrent}{
	\ctikzset{european current=true}
}

\DeclareOption{americancurrent}{
	\ctikzset{european current=false}
}

\DeclareOption{europeanvoltage}{
	\ctikzset{european voltage=true}
}

\DeclareOption{americanresistor}{
	\ctikzset{european resistor=false}
}

\DeclareOption{europeanresistor}{
	\ctikzset{european resistor=true}
}

\DeclareOption{americaninductor}{
	\ctikzset{european inductor=false}
}

\DeclareOption{europeaninductor}{
	\ctikzset{european inductor=true}
}

\DeclareOption{european}{
	\ctikzset{european voltage=true} \ctikzset{european current=true} \ctikzset{european inductor=true} \ctikzset{european resistor=true}
}

\DeclareOption{american}{
	\ctikzset{european voltage=false} \ctikzset{european current=false} \ctikzset{european resistor=false} \ctikzset{european inductor=false}
}

\DeclareOption{siunitx}{
	\pgf@circ@siunitxtrue
}

\DeclareOption{nosiunitx}{
	\pgf@circ@siunitxfalse
}

\DeclareOption{arrowmos}{
	\pgf@circuit@mos@arrowstrue
}

\DeclareOption{noarrowmos}{
	\pgf@circuit@mos@arrowsfalse
}


%% Keys

\newcommand{\pgf@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}}

\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@circ@Rlen 
\ctikzset{bipoles/resistor/height/.initial=.3}
\ctikzset{bipoles/resistor/width/.initial=.8}
\ctikzset{bipoles/potentiometer/height/.initial=.6}
\ctikzset{bipoles/potentiometer/width/.initial=.8}
\ctikzset{bipoles/inductor/height/.initial=.3}
\ctikzset{bipoles/inductor/width/.initial=.8}
\ctikzset{bipoles/inductor/coils/.initial=6}
\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/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/battery/height/.initial=.6}
\ctikzset{bipoles/battery/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=.08}
\ctikzset{bipoles/generic/height/.initial=.30}
\ctikzset{bipoles/generic/width/.initial=.80}
\ctikzset{bipoles/ageneric/height/.initial=.30}
\ctikzset{bipoles/ageneric/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/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}

\newif\ifpgf@circuit@mos@arrows
\ctikzset{tripoles/mos style/.is choice}
\ctikzset{tripoles/mos style/no arrows/.code={\pgf@circuit@mos@arrowsfalse}}
\ctikzset{tripoles/mos style/arrows/.code={\pgf@circuit@mos@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=.6}
\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=.6}

\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/and port/width/.initial=1.1}
\ctikzset{tripoles/and port/height/.initial=.8}
\ctikzset{tripoles/and port/port width/.initial=.7}
\ctikzset{tripoles/and port/input height/.initial=.5}
\ctikzset{tripoles/nand port/width/.initial=1.1}
\ctikzset{tripoles/nand port/height/.initial=.8}
\ctikzset{tripoles/nand port/port width/.initial=.7}
\ctikzset{tripoles/nand port/circle width/.initial=.15}
\ctikzset{tripoles/nand port/input height/.initial=.5}
\ctikzset{tripoles/or port/width/.initial=1.1}
\ctikzset{tripoles/or port/height/.initial=.8}
\ctikzset{tripoles/or port/port width/.initial=.7}
\ctikzset{tripoles/or port/input height/.initial=.5}
\ctikzset{tripoles/or port/input skip/.initial=.25}
\ctikzset{tripoles/or port/aaa/.initial=.6}
\ctikzset{tripoles/or port/bbb/.initial=.4} 
\ctikzset{tripoles/or port/ccc/.initial=.5} 
\ctikzset{tripoles/or port/ddd/.initial=.0}
\ctikzset{tripoles/nor port/width/.initial=1.1}
\ctikzset{tripoles/nor port/height/.initial=.8}
\ctikzset{tripoles/nor port/port width/.initial=.7}
\ctikzset{tripoles/nor port/input height/.initial=.5}
\ctikzset{tripoles/nor port/input skip/.initial=.25}
\ctikzset{tripoles/nor port/circle width/.initial=.15}
\ctikzset{tripoles/nor port/aaa/.initial=.6}
\ctikzset{tripoles/nor port/bbb/.initial=.4} 
\ctikzset{tripoles/nor port/ccc/.initial=.5} 
\ctikzset{tripoles/nor port/ddd/.initial=.0}
\ctikzset{tripoles/xor port/width/.initial=1.1}
\ctikzset{tripoles/xor port/height/.initial=.8}
\ctikzset{tripoles/xor port/port width/.initial=.7}
\ctikzset{tripoles/xor port/input height/.initial=.5}
\ctikzset{tripoles/xor port/input skip/.initial=.15}
\ctikzset{tripoles/xor port/distance/.initial=.1} 
\ctikzset{tripoles/xor port/aaa/.initial=.6}
\ctikzset{tripoles/xor port/bbb/.initial=.4} 
\ctikzset{tripoles/xor port/ccc/.initial=.5} 
\ctikzset{tripoles/xor port/ddd/.initial=.0}
\ctikzset{tripoles/xnor port/width/.initial=1.1}
\ctikzset{tripoles/xnor port/height/.initial=.8}
\ctikzset{tripoles/xnor port/port width/.initial=.7}
\ctikzset{tripoles/xnor port/input height/.initial=.5}
\ctikzset{tripoles/xnor port/input skip/.initial=.15}
\ctikzset{tripoles/xnor port/distance/.initial=.1} 
\ctikzset{tripoles/xnor port/aaa/.initial=.6}
\ctikzset{tripoles/xnor port/bbb/.initial=.4} 
\ctikzset{tripoles/xnor port/ccc/.initial=.5} 
\ctikzset{tripoles/xnor port/ddd/.initial=.0}
\ctikzset{tripoles/xnor port/circle width/.initial=.15}
\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{quadpoles/transformer/width/.initial=1.5}
\ctikzset{quadpoles/transformer/height/.initial=1.5}
\ctikzset{quadpoles/gyrator/width/.initial=1.5}
\ctikzset{quadpoles/gyrator/height/.initial=1.5}

\ctikzset{bipole/.is family}
\ctikzset{bipole/direction/.initial = 0}
\ctikzset{bipole/kind/.initial = }
\ctikzset{bipole/name/.initial = }
\newif\ifpgf@circuit@bipole@reversed
\ctikzset{bipole/reversed/.is if=pgf@circuit@bipole@reversed}
\newif\ifpgf@circuit@bipole@isvoltage
\ctikzset{bipole/is voltage/.is if=pgf@circuit@bipole@isvoltage}
\newif\ifpgf@circuit@bipole@iscurrent
\ctikzset{bipole/is current/.is if=pgf@circuit@bipole@iscurrent}

\ctikzset{bipole/voltage/.is family}
\newif\ifpgf@circuit@bipole@voltage@backward
\ctikzset{bipole/voltage/direction/.is choice}
\ctikzset{bipole/voltage/direction/forward/.code={\pgf@circuit@bipole@voltage@backwardfalse}}
\ctikzset{bipole/voltage/direction/backward/.code={\pgf@circuit@bipole@voltage@backwardtrue}}
\newif\ifpgf@circuit@bipole@voltage@below
\ctikzset{bipole/voltage/position/.is choice}
\ctikzset{bipole/voltage/position/above/.code={\pgf@circuit@bipole@voltage@belowfalse}}
\ctikzset{bipole/voltage/position/below/.code={\pgf@circuit@bipole@voltage@belowtrue}}

\ctikzset{bipole/voltage/label/unit/.initial=}
\ctikzset{bipole/voltage/label/name/.initial=}

\ctikzset{bipole/current/.is family}
\newif\ifpgf@circuit@bipole@current@backward
\ctikzset{bipole/current/direction/.is choice}
\ctikzset{bipole/current/direction/forward/.code={\pgf@circuit@bipole@current@backwardfalse}}
\ctikzset{bipole/current/direction/backward/.code={\pgf@circuit@bipole@current@backwardtrue}}
\newif\ifpgf@circuit@bipole@current@before
\ctikzset{bipole/current/x position/.is choice}
\ctikzset{bipole/current/x position/after/.code={\pgf@circuit@bipole@current@beforefalse}}
\ctikzset{bipole/current/x position/before/.code={\pgf@circuit@bipole@current@beforetrue}}
\newif\ifpgf@circuit@bipole@current@below
\ctikzset{bipole/current/y position/.is choice}
\ctikzset{bipole/current/y position/above/.code={\pgf@circuit@bipole@current@belowfalse}}
\ctikzset{bipole/current/y position/below/.code={\pgf@circuit@bipole@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@circuit@europeanvoltage
\ctikzset{european voltage/.is if=pgf@circuit@europeanvoltage}
\newif\ifpgf@circuit@europeancurrent
\ctikzset{european current/.is if=pgf@circuit@europeancurrent}
\newif\ifpgf@circuit@europeanresistor
\ctikzset{european resistor/.is if=pgf@circuit@europeanresistor}
\newif\ifpgf@circuit@europeaninductor
\ctikzset{european inductor/.is if=pgf@circuit@europeaninductor}
\newif\ifpgf@circuit@fulldiode
\ctikzset{full diode/.is if=pgf@circuit@fulldiode}
\ctikzset{thickness/.initial=2}
\ctikzset{color/.initial=black}
\pgfkeys{/tikz/color/.add code={}{\ctikzset{color=#1}}}

\tikzset{european voltage/.code= {\ctikzset{european voltage=true} } }
\tikzset{european current/.code= {\ctikzset{european current=true} } }
\tikzset{american voltage/.code= {\ctikzset{european voltage=false} } }
\tikzset{american current/.code= {\ctikzset{european current=false} } }
\tikzset{european inductor/.code= {\ctikzset{european inductor=true} } }
\tikzset{european resistor/.code= {\ctikzset{european resistor=true} } }
\tikzset{american inductor/.code= {\ctikzset{european inductor=false} } }
\tikzset{american resistor/.code= {\ctikzset{european resistor=false} } }
\tikzset{american/.code= {\ctikzset{european current=false} \ctikzset{european voltage=false} \ctikzset{european resistor=false} \ctikzset{european inductor=false}} }
\tikzset{european/.code= {\ctikzset{european current=true} \ctikzset{european voltage=true} \ctikzset{european resistor=true} \ctikzset{european inductor=true}} }
\tikzset{full diode/.code= {\ctikzset{full diode=true} } }
\tikzset{empty diode/.code= {\ctikzset{full diode=false} } }

\newif\ifpgf@circ@siunitx
\newif\ifpgf@circ@siunitx@res

\ctikzset{voltage/.is family}
\ctikzset{voltage/distance from node/.initial=.5} %\pgf@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}

\ctikzset{current/.is family}
\ctikzset{current/distance/.initial = .5}



%% dependencies


\input pgfcircutils.sty
\input pgfcircmath.sty

\input pgfcircshapes.sty
\input pgfcircmonopoles.sty
\input pgfcircbipoles.sty
\input pgfcirctripoles.sty
\input pgfcircquadpoles.sty

\input pgfcirclabel.sty
\input pgfcircvoltage.sty
\input pgfcirccurrent.sty



\ExecuteOptions{european current, european voltage, american resistor, american inductor, nosiunitx, noarrowmos}

\ProcessOptions

\ifpgf@circ@siunitx
	\RequirePackage{siunitx}
\fi



%%%%%%%%%%%%
%% Dimensions

% coordinate bipoli
\newdimen\pgf@circ@res@up \newdimen\pgf@circ@res@down \newdimen\pgf@circ@res@zero
\newdimen\pgf@circ@res@left \newdimen\pgf@circ@res@right
\newdimen\pgf@circ@res@other
\newdimen\pgf@circ@res@step

% thickness iniziale
\newdimen \pgfstartlinewidth

\pgf@circ@Rlen = \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}


% Initialize paths
\def\pgfcircresetpath{
	\ctikzset{bipole/name=, bipole/direction=, bipole/label/name=, bipole/label/position=90, 
		bipole/reversed=false, bipole/kind=,
	  	bipole/voltage/direction=backward, bipole/voltage/label/name=, bipole/voltage/position=below,
	  	bipole/nodes/left=none, bipole/nodes/right=none, bipole/is voltage=false,
		bipole/is current=false, bipole/current/label/name=, bipole/current/x position=after,
		bipole/current/y position=above, bipole/current/direction=forward   }
}


%% Generic bipole path
\def\pgf@circ@bipole@path#1#2{
	\pgfextra{
		\pgf@circ@Rlen = \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
		\ctikzset{bipole/kind = #1}
		\def\pgf@temp{open}
		\def\pgf@circ@temp{#1}
		\pgfmathrandominteger{\pgf@circ@rand}{1000}{9999}
		\ctikzset{bipole/name = #2\pgf@circ@rand}
	}
	\ifpgf@circuit@bipole@reversed
		(\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}end) {}
		(\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}start) {} 	
	\else
		(\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}start) {}
		(\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}end) {} 
	\fi
	\pgfextra{
		\pgf@circ@slope{\pgfpointanchor{\ctikzvalof{bipole/name}start}{center}}
					   {\pgfpointanchor{\ctikzvalof{bipole/name}end}{center}}
		\edef\pgf@circ@direction{\pgfmathresult}
		\ctikzset{bipole/direction = \pgfmathresult}		
	}
	($(\tikztostart)!.5!(\tikztotarget)$) 
		node[#1shape, rotate=\pgf@circ@direction] (\ctikzvalof{bipole/name}) {}
	\ifx\pgf@temp\pgf@circ@temp  % if it is an open
	\else
		(\ctikzvalof{bipole/name}start.center) -- (\ctikzvalof{bipole/name}.left) 
		(\ctikzvalof{bipole/name}.right)  -- (\ctikzvalof{bipole/name}end.center) 
	\fi
	\pgf@circ@ifkeyempty{bipole/label/name}\else
	\pgf@circ@drawlabel\fi
	\drawpoles
	\pgf@circ@ifkeyempty{bipole/voltage/label/name}\else\pgf@circ@drawvoltage\fi
	\pgf@circ@ifkeyempty{bipole/current/label/name}\else\pgf@circ@drawcurrent\fi
	% reset
	\pgfextra{
		\pgfcircresetpath
	}  
	(\tikztotarget) 	\tikztonodes  % e si continua
}


%% Path definitions

\def\pgf@circ@resistor@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{generic}{#1}\else\pgf@circ@bipole@path{resistor}{#1}\fi}
\def\pgf@circ@potentiometer@path#1{\pgf@circ@bipole@path{potentiometer}{#1}}
\def\pgf@circ@capacitor@path#1{\pgf@circ@bipole@path{capacitor}{#1}}
\def\pgf@circ@battery@path#1{\pgf@circ@bipole@path{battery}{#1}}
\def\pgf@circ@inductor@path#1{\ifpgf@circuit@europeaninductor\pgf@circ@bipole@path{fullgeneric}{#1}\else\pgf@circ@bipole@path{inductor}{#1}\fi}
\def\pgf@circ@lamp@path#1{\pgf@circ@bipole@path{lamp}{#1}}
\def\pgf@circ@vsource@path#1{\pgf@circ@bipole@path{vsource}{#1}}
\def\pgf@circ@vsourceam@path#1{\pgf@circ@bipole@path{vsourceAM}{#1}}
\def\pgf@circ@vsourcesin@path#1{\pgf@circ@bipole@path{vsourcesin}{#1}}
\def\pgf@circ@isource@path#1{\pgf@circ@bipole@path{isource}{#1}}
\def\pgf@circ@isourcesin@path#1{\pgf@circ@bipole@path{isourcesin}{#1}}
\def\pgf@circ@isourceam@path#1{\pgf@circ@bipole@path{isourceAM}{#1}}
\def\pgf@circ@cvsource@path#1{\pgf@circ@bipole@path{cvsource}{#1}}
\def\pgf@circ@cvsourceam@path#1{\pgf@circ@bipole@path{cvsourceAM}{#1}}
\def\pgf@circ@cvsourcesin@path#1{\pgf@circ@bipole@path{cvsourcesin}{#1}}
\def\pgf@circ@cisource@path#1{\pgf@circ@bipole@path{cisource}{#1}}
\def\pgf@circ@cisourceam@path#1{\pgf@circ@bipole@path{cisourceAM}{#1}}
\def\pgf@circ@cisourcesin@path#1{\pgf@circ@bipole@path{cisourcesin}{#1}}
\def\pgf@circ@fulldiode@path#1{\pgf@circ@bipole@path{fulldiode}{#1}}
\def\pgf@circ@fullzdiode@path#1{\pgf@circ@bipole@path{fullzdiode}{#1}}
\def\pgf@circ@fullsdiode@path#1{\pgf@circ@bipole@path{fullsdiode}{#1}}
\def\pgf@circ@fulltdiode@path#1{\pgf@circ@bipole@path{fulltdiode}{#1}}
\def\pgf@circ@fulllediode@path#1{\pgf@circ@bipole@path{fulllediode}{#1}}
\def\pgf@circ@fullpdiode@path#1{\pgf@circ@bipole@path{fullpdiode}{#1}}
\def\pgf@circ@fullvarcap@path#1{\pgf@circ@bipole@path{fullvarcap}{#1}}
\def\pgf@circ@emptydiode@path#1{\pgf@circ@bipole@path{emptydiode}{#1}}
\def\pgf@circ@emptyzdiode@path#1{\pgf@circ@bipole@path{emptyzdiode}{#1}}
\def\pgf@circ@emptysdiode@path#1{\pgf@circ@bipole@path{emptysdiode}{#1}}
\def\pgf@circ@emptytdiode@path#1{\pgf@circ@bipole@path{emptytdiode}{#1}}
\def\pgf@circ@emptylediode@path#1{\pgf@circ@bipole@path{emptylediode}{#1}}
\def\pgf@circ@emptypdiode@path#1{\pgf@circ@bipole@path{emptypdiode}{#1}}
\def\pgf@circ@emptyvarcap@path#1{\pgf@circ@bipole@path{emptyvarcap}{#1}}
\def\pgf@circ@short@path#1{\pgf@circ@bipole@path{short}{#1}}
\def\pgf@circ@cspst@path#1{\pgf@circ@bipole@path{cspst}{#1}}
\def\pgf@circ@ospst@path#1{\pgf@circ@bipole@path{ospst}{#1}}
\def\pgf@circ@open@path#1{\pgf@circ@bipole@path{open}{#1}}
\def\pgf@circ@generic@path#1{\pgf@circ@bipole@path{generic}{#1}}
\def\pgf@circ@ageneric@path#1{\pgf@circ@bipole@path{ageneric}{#1}}
\def\pgf@circ@fullgeneric@path#1{\pgf@circ@bipole@path{fullgeneric}{#1}}
\def\pgf@circ@ammeter@path#1{\pgf@circ@bipole@path{ammeter}{#1}}
\def\pgf@circ@voltmeter@path#1{\pgf@circ@bipole@path{voltmeter}{#1}}
\def\pgf@circ@empty@path#1{}


%% Styles

\tikzset{resistor/.style= {to path=\pgf@circ@resistor@path, l=#1}}
\tikzset{ammeter/.style= {to path=\pgf@circ@ammeter@path, l=#1}}
\tikzset{voltmeter/.style= {to path=\pgf@circ@voltmeter@path, l=#1}}
\tikzset{potentiometer/.style = {to path=\pgf@circ@potentiometer@path, l=#1}}
\tikzset{capacitor/.style = {to path=\pgf@circ@capacitor@path, l=#1}}
\tikzset{battery/.style = {to path=\pgf@circ@battery@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
\tikzset{inductor/.style = {to path=\pgf@circ@inductor@path, l=#1}}
\tikzset{european voltage source/.style = {to path=\pgf@circ@vsource@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
\tikzset{american voltage source/.style = {to path=\pgf@circ@vsourceam@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
\tikzset{european current source/.style = {to path=\pgf@circ@isource@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
\tikzset{american current source/.style = {to path=\pgf@circ@isourceam@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
\tikzset{european controlled voltage source/.style = {to path=\pgf@circ@cvsource@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
\tikzset{american controlled voltage source/.style = {to path=\pgf@circ@cvsourceam@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
\tikzset{european controlled current source/.style = {to path=\pgf@circ@cisource@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
\tikzset{american controlled current source/.style = {to path=\pgf@circ@cisourceam@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
\tikzset{sinusoidal voltage source/.style = {to path=\pgf@circ@vsourcesin@path, \circuitikzbasekey/bipole/is voltage=true, v=#1 }}
\tikzset{sinusoidal current source/.style = {to path=\pgf@circ@isourcesin@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
\tikzset{controlled sinusoidal voltage source/.style = {to path=\pgf@circ@cvsourcesin@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
\tikzset{controlled sinusoidal current source/.style = {to path=\pgf@circ@cisourcesin@path, \circuitikzbasekey/bipole/is current=true, i=#1}}

\tikzset{voltage source/.style = {\ifpgf@circuit@europeanvoltage european \else american \fi voltage source, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
\tikzset{current source/.style = {\ifpgf@circuit@europeancurrent european \else american \fi current source, \circuitikzbasekey/bipole/is current=true, i=#1}}
\tikzset{controlled voltage source/.style = {\ifpgf@circuit@europeanvoltage european \else american \fi controlled voltage source, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
\tikzset{controlled current source/.style = {\ifpgf@circuit@europeancurrent european \else american \fi controlled current source, \circuitikzbasekey/bipole/is current=true, i=#1}}


\tikzset{generic/.style = {to path=\pgf@circ@generic@path, l=#1}}
\tikzset{ageneric/.style = {to path=\pgf@circ@ageneric@path, l=#1}}
\tikzset{fullgeneric/.style = {to path=\pgf@circ@fullgeneric@path, l=#1}}
\tikzset{short/.style = {to path=\pgf@circ@short@path}}
\tikzset{open/.style = {to path=\pgf@circ@open@path}}

\tikzset{lamp/.style = {to path=\pgf@circ@lamp@path}}

\tikzset{full diode/.style = {to path=\pgf@circ@fulldiode@path}}
\tikzset{full Schottky diode/.style = {to path=\pgf@circ@fullsdiode@path}}
\tikzset{full Zener diode/.style = {to path=\pgf@circ@fullzdiode@path}}
\tikzset{full tunnel diode/.style = {to path=\pgf@circ@fulltdiode@path}}
\tikzset{full photodiode/.style = {to path=\pgf@circ@fullpdiode@path}}
\tikzset{full led/.style = {to path=\pgf@circ@fulllediode@path}}
\tikzset{full varcap/.style = {to path=\pgf@circ@fullvarcap@path}}

\tikzset{empty diode/.style = {to path=\pgf@circ@emptydiode@path}}
\tikzset{empty Schottky diode/.style = {to path=\pgf@circ@emptysdiode@path}}
\tikzset{empty Zener diode/.style = {to path=\pgf@circ@emptyzdiode@path}}
\tikzset{empty tunnel diode/.style = {to path=\pgf@circ@emptytdiode@path}}
\tikzset{empty photodiode/.style = {to path=\pgf@circ@emptypdiode@path}}
\tikzset{empty led/.style = {to path=\pgf@circ@emptylediode@path}}
\tikzset{empty varcap/.style = {to path=\pgf@circ@emptyvarcap@path}}

	\tikzset{Schottky diode/.style = {\ifpgf@circuit@fulldiode full \else empty \fi Schottky diode}}
	\tikzset{Zener diode/.style = {\ifpgf@circuit@fulldiode full \else empty \fi Zener diode}}
	\tikzset{tunnel diode/.style = {\ifpgf@circuit@fulldiode full \else empty \fi tunnel diode}}
	\tikzset{photodiode/.style = {\ifpgf@circuit@fulldiode full \else empty \fi photodiode}}
	\tikzset{led/.style = {\ifpgf@circuit@fulldiode full \else empty \fi led}}
	\tikzset{varcap/.style = {\ifpgf@circuit@fulldiode full \else empty \fi varcap}}
	\tikzset{diode/.style = {\ifpgf@circuit@fulldiode full \else empty \fi diode}}

\tikzset{closing switch/.style = {to path=\pgf@circ@cspst@path, l=#1}}
\tikzset{opening switch/.style = {to path=\pgf@circ@ospst@path, l=#1}}

\tikzset{ammeter/.style = {to path=\pgf@circ@ammeter@path}}
\tikzset{voltmeter/.style = {to path=\pgf@circ@voltmeter@path}}

% short forms
\tikzset{vsource/.style = {voltage source = #1}}
\tikzset{isource/.style = {current source = #1}}
\tikzset{cisource/.style = {controlled current source = #1}}
\tikzset{cvsource/.style = {controlled  voltage source = #1}}
\tikzset{vsourcesin/.style = {sinusoidal  voltage source = #1}}
\tikzset{isourcesin/.style = {sinusoidal current source = #1}}
\tikzset{cisourcesin/.style = {controlled sinusoidal current source = #1}}
\tikzset{cvsourcesin/.style = {controlled sinusoidal  voltage source = #1}}

\tikzset{controlled vsource/.style = {controlled voltage source = #1}}
\tikzset{controlled isource/.style = {controlled current source = #1}}
\tikzset{controlled vsourcesin/.style = {controlled sinusoidal  voltage source = #1}}
\tikzset{controlled isourcesin/.style = {controlled sinusoidal current source = #1}}

\tikzset{R/.style= {resistor = #1}}
\tikzset{pR/.style= {potentiometer = #1}}
\tikzset{C/.style = {capacitor = #1}}
\tikzset{L/.style = {inductor = #1}}
\tikzset{V/.style = {voltage source = #1}}
\tikzset{cV/.style = {controlled voltage source = #1}}
\tikzset{sV/.style = {sinusoidal voltage source = #1}}
\tikzset{csV/.style = {controlled sinusoidal voltage source = #1}}
\def\pgf@temp#1{ 
	\tikzset{V#1/.style = {voltage source, v#1=##1} } 
	\tikzset{cV#1/.style = {controlled  voltage source, v#1=##1} } 
	\tikzset{sV#1/.style = {sinusoidal  voltage source, v#1=##1} } 
	\tikzset{csV#1/.style = {controlled sinusoidal voltage source, v#1=##1} } 
}
\pgf@temp{_>} \pgf@temp{_<} \pgf@temp{^>} \pgf@temp{^<} 
\pgf@temp{>} \pgf@temp{<} \pgf@temp{^} \pgf@temp{_} 
\tikzset{I/.style = {current source = #1}}
\tikzset{cI/.style = {controlled current source = #1}}
\tikzset{sI/.style = {sinusoidal current source = #1}}
\tikzset{csI/.style = {controlled sinusoidal current source = #1}}
\def\pgf@temp#1{ 
	\tikzset{I#1/.style = {current source, i#1=##1} } 
	\tikzset{cI#1/.style = {controlled current source, i#1=##1} } 
	\tikzset{sI#1/.style = {sinusoidal current source, i#1=##1} } 
	\tikzset{csI#1/.style = {controlled sinusoidal current source, i#1=##1} } 
}
\pgf@temp{_>} \pgf@temp{_<} \pgf@temp{^>} \pgf@temp{^<} 
\pgf@temp{>_} \pgf@temp{<_} \pgf@temp{>^} \pgf@temp{<^} 
\pgf@temp{>} \pgf@temp{<} \pgf@temp{^} \pgf@temp{_} 
\tikzset{Do/.style = {empty diode}}
\tikzset{tDo/.style = {empty tunnel diode}}
\tikzset{zDo/.style = {empty Zener diode}}
\tikzset{sDo/.style = {empty Schottky diode}}
\tikzset{pDo/.style = {empty photodiode}}
\tikzset{leDo/.style = {empty led}}
\tikzset{VCo/.style = {empty varcap}}
\tikzset{D*/.style = {full diode}}
\tikzset{tD*/.style = {full tunnel diode}}
\tikzset{zD*/.style = {full Zener diode}}
\tikzset{sD*/.style = {full Schottky diode}}
\tikzset{pD*/.style = {full photodiode}}
\tikzset{leD*/.style = {full led}}
\tikzset{VC*/.style = {full varcap}}
\tikzset{D/.style = {diode}}
\tikzset{tD/.style = {tunnel diode}}
\tikzset{zD/.style = {Zener diode}}
\tikzset{sD/.style = {Schottky diode}}
\tikzset{pD/.style = {photodiode}}
\tikzset{leD/.style = {led}}
\tikzset{VC/.style = {varcap}}

\tikzset{cspst/.style = {closing switch = #1}}
\tikzset{ospst/.style = {opening switch = #1}}

%% The environment

\newenvironment{circuitikz}{
\begin{tikzpicture}}{\end{tikzpicture}}

\endinput

