summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/circuitikz
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/generic/circuitikz')
-rw-r--r--Master/texmf-dist/tex/generic/circuitikz/pgfcirc.defines.tex15
-rw-r--r--Master/texmf-dist/tex/generic/circuitikz/pgfcircbipoles.tex105
-rw-r--r--Master/texmf-dist/tex/generic/circuitikz/pgfcirclabel.tex2
-rw-r--r--Master/texmf-dist/tex/generic/circuitikz/pgfcirctripoles.tex168
4 files changed, 243 insertions, 47 deletions
diff --git a/Master/texmf-dist/tex/generic/circuitikz/pgfcirc.defines.tex b/Master/texmf-dist/tex/generic/circuitikz/pgfcirc.defines.tex
index 218f3777827..9c49d71525c 100644
--- a/Master/texmf-dist/tex/generic/circuitikz/pgfcirc.defines.tex
+++ b/Master/texmf-dist/tex/generic/circuitikz/pgfcirc.defines.tex
@@ -208,6 +208,17 @@
}
% use \pgf@circ@setlinewidth{none}{\pgflinewidth} if there is no legacy case
\ctikzset{none/thickness/.initial=1.0} % do not touch
+
+% set thickness relative to current thickness if exists class and key
+\def\pgf@circ@set@relative@thickness#1{%
+ \ifdefined\ctikzclass
+ \pgfkeysifdefined{\circuitikzbasekey/\ctikzclass/#1}
+ {% yes, it's defined
+ \pgfsetlinewidth{\ctikzvalof{\ctikzclass/#1}\pgflinewidth}%
+ }{}
+ \fi
+}
+
%%>>>
%% font changes compatible with plain/LaTeX/ConTeXt%<<<1
@@ -635,14 +646,17 @@
\ctikzset{resistors/scale/.initial=1.0}
\ctikzset{resistors/fill/.initial=none}
\ctikzset{resistors/thickness/.initial=none}
+\ctikzset{resistors/modifier thickness/.initial=1}% relative to main thickness
\ctikzset{capacitors/scale/.initial=1.0}
\ctikzset{capacitors/fill/.initial=none}
\ctikzset{capacitors/thickness/.initial=none}
+\ctikzset{capacitors/modifier thickness/.initial=1}
\ctikzset{inductors/scale/.initial=1.0}
\ctikzset{inductors/fill/.initial=none}
\ctikzset{inductors/thickness/.initial=none}
+\ctikzset{inductors/modifier thickness/.initial=1}
\ctikzset{diodes/scale/.initial=1.0}
\ctikzset{diodes/fill/.initial=none}
@@ -689,6 +703,7 @@
\ctikzset{transistors/scale/.initial=1.0}
\ctikzset{transistors/fill/.initial=none}
\ctikzset{transistors/thickness/.initial=none}
+\ctikzset{transistors/modifier thickness/.initial=1}% relative to main thickness
\ctikzset{tubes/scale/.initial=1.0}
\ctikzset{tubes/fill/.initial=none}
diff --git a/Master/texmf-dist/tex/generic/circuitikz/pgfcircbipoles.tex b/Master/texmf-dist/tex/generic/circuitikz/pgfcircbipoles.tex
index 78dd1379fbe..445a14d639d 100644
--- a/Master/texmf-dist/tex/generic/circuitikz/pgfcircbipoles.tex
+++ b/Master/texmf-dist/tex/generic/circuitikz/pgfcircbipoles.tex
@@ -22,6 +22,7 @@
\pgf@circ@declare@family@arrows{tunable}
\pgf@circ@declare@family@arrows{wiper}
\pgf@circ@declare@family@arrows{switch}
+
%>>>
@@ -282,6 +283,7 @@
\pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
\pgf@circ@draworfill
\pgfscope
+ \pgf@circ@set@relative@thickness{modifier thickness}
\pgfcirc@set@arrows{tunable}{}{latexslim}
\ifpgf@circ@fixtunable@dir
\pgfpathmoveto{\pgfpoint{.5\pgf@circ@res@left}{\pgf@circ@res@down}}
@@ -370,6 +372,8 @@
\endpgfscope
}
+
+
%% Thermistor
\pgfcircdeclarebipolescaled{resistors}
{% anchor for labelling the type of dependency
@@ -385,18 +389,14 @@
{\ctikzvalof{bipoles/thermistor/height}}
{\ctikzvalof{bipoles/thermistor/width}}
{
- \pgfscope
\pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\ctikzvalof{bipoles/thermistor/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\ctikzvalof{bipoles/thermistor/main}\pgf@circ@res@up}}
\pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
\pgf@circ@draworfill
- \endpgfscope
-
- %\pgfscope
+ \pgf@circ@set@relative@thickness{modifier thickness}
\pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{-\pgf@circ@res@down}}
\pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{1.2\pgf@circ@res@down}}
\pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{1.2\pgf@circ@res@down}}
\pgfusepath{draw}
- %\endpgfscope
}
%% Thermistor PTC
@@ -411,11 +411,12 @@
\pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\ctikzvalof{bipoles/thermistorptc/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\ctikzvalof{bipoles/thermistorptc/main}\pgf@circ@res@up}}
\pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
\pgf@circ@draworfill
+ \pgf@circ@set@relative@thickness{modifier thickness}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfusepath{draw}
\endpgfscope
- \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}}
- \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{-\pgf@circ@res@up}}
- \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}}
- \pgfusepath{draw}
\pgfsetlinewidth{\pgfstartlinewidth}
\pgftext[top,x=.85\pgf@circ@res@left,y=.75\pgf@circ@res@down]{\pgf@circ@font@tiny$\vartheta$}
@@ -440,13 +441,13 @@
\pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\ctikzvalof{bipoles/thermistorntc/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\ctikzvalof{bipoles/thermistorntc/main}\pgf@circ@res@up}}
\pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
\pgf@circ@draworfill
+ \pgf@circ@set@relative@thickness{modifier thickness}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfusepath{draw}
\endpgfscope
- \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}}
- \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{-\pgf@circ@res@up}}
- \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}}
- \pgfusepath{draw}
-
\pgfsetlinewidth{\pgfstartlinewidth}
\pgftext[top,x=.85\pgf@circ@res@left,y=.75\pgf@circ@res@down]{\pgf@circ@font@tiny$\vartheta$}
\pgfsetarrowsend{latexslim}
@@ -472,13 +473,13 @@
\pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\ctikzvalof{bipoles/varistor/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\ctikzvalof{bipoles/varistor/main}\pgf@circ@res@up}}
\pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
\pgf@circ@draworfill
+ \pgf@circ@set@relative@thickness{modifier thickness}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
\endpgfscope
- \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{-\pgf@circ@res@down}}
- \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
- \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
- \pgfusepath{draw}
-
\pgftext[top,x=.65\pgf@circ@res@left,y=1.2\pgf@circ@res@down]{{\pgf@circ@font@tiny\textsf{U}}}
}
@@ -579,6 +580,7 @@
\pgf@circ@zigzag{.5}
\pgfscope
+ \pgf@circ@set@relative@thickness{modifier thickness}
\pgfcirc@set@arrows{tunable}{}{latexslim}
\ifpgf@circ@fixtunable@dir
\pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@other}{\pgf@circ@res@down}}
@@ -617,6 +619,7 @@
\pgfscope
%\pgfsetlinewidth{\pgfstartlinewidth}
+ \pgf@circ@set@relative@thickness{modifier thickness}
\pgfcirc@set@arrows{wiper}{}{latexslim}
\pgfextractx{\pgf@circ@res@other}{\wiper}
\pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
@@ -642,6 +645,7 @@
\pgf@circ@zigzag{.5}
\pgfscope
+ \pgf@circ@set@relative@thickness{modifier thickness}
\pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@other}{\pgf@circ@res@up}}
\pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@other}{\pgf@circ@res@down}}
\pgfpathlineto{\pgfpoint{-.9\pgf@circ@res@other}{\pgf@circ@res@down}}
@@ -770,6 +774,7 @@
\pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
\pgfusepath{draw}
\pgfscope
+ \pgf@circ@set@relative@thickness{modifier thickness}
\pgfpathmoveto{\pgfpoint{2.6\pgf@circ@res@right}{\pgf@circ@res@up}}
\pgfpathlineto{\pgfpoint{-2.6\pgf@circ@res@right}{1.2\pgf@circ@res@down}}
\pgfpathlineto{\pgfpoint{-4.4\pgf@circ@res@right}{1.2\pgf@circ@res@down}}
@@ -880,6 +885,7 @@
\pgfusepath{draw}
\pgfscope
+ \pgf@circ@set@relative@thickness{modifier thickness}
\pgfcirc@set@arrows{tunable}{}{latexslim}
\ifpgf@circ@fixtunable@dir
\pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
@@ -931,6 +937,47 @@
\pgf@circ@draworfill
\endpgfscope
}
+
+% Ferroelectric capacitor, suggested by Mayeul Cantan
+% (see https://github.com/circuitikz/circuitikz/issues/515)
+\pgfcircdeclarebipolescaled{capacitors}
+{
+ \anchor{curve right}{\southwest\pgf@x=-1.8\pgf@x\pgf@y=\pgf@y}%
+ \anchor{curve left}{\southwest\pgf@x=1.8\pgf@x\pgf@y=-\pgf@y}%
+ \anchor{kink right}{\southwest\pgf@x=-1.8\pgf@x\pgf@y=0.5\pgf@y}%
+ \anchor{kink left}{\southwest\pgf@x=1.8\pgf@x\pgf@y=-0.5\pgf@y}%
+ \pgfcirc@border@extend@full{1.8}{1}{1.8}{1}
+}
+{\ctikzvalof{bipoles/capacitor/height}}
+{ferrocap}
+{\ctikzvalof{bipoles/capacitor/height}}
+{\ctikzvalof{bipoles/capacitor/width}}
+{
+ \pgfscope
+ \pgfpathrectanglecorners
+ {\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgf@circ@maybefill
+ \endpgfscope
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgf@circ@set@relative@thickness{modifier thickness}
+ \pgfsetcornersarced{\pgfpoint{0.2\pgf@circ@res@right}{0.2\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{-1.8\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-1.8\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.8\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{1.8\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
% %>>>
%% Paths for capacitors%<<<
@@ -950,6 +997,8 @@
\pgfcirc@style@to@style{piezoelectric}{PZ}
\pgfcirc@activate@bipole{l}{capacitivesens}{capacitivesens}{capacitive sensor}
\pgfcirc@style@to@style{capacitive sensor}{sC}
+\pgfcirc@activate@bipole@simple{l}{ferrocap}
+\pgfcirc@style@to@style{ferrocap}{feC}
% %>>>
%%%%%%%%%%%%%%%
@@ -1125,6 +1174,7 @@
\pgfsetbeveljoin
\pgfusepath{stroke}
\pgfscope
+ \pgf@circ@set@relative@thickness{modifier thickness}
\pgfpathmoveto{\pgfpoint{.8\pgf@circ@res@right}{2\pgf@circ@res@up}}
\pgfpathlineto{\pgfpoint{-.8\pgf@circ@res@right}{2.6\pgf@circ@res@down}}
\pgfpathlineto{\pgfpoint{-1.6\pgf@circ@res@right}{2.6\pgf@circ@res@down}}
@@ -1224,6 +1274,7 @@
{(\ctikzvalof{bipoles/vcuteinductor/width}*\scaledRlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/vcuteinductor/coils}-1)*2*\pgf@circ@res@other)/\ctikzvalof{bipoles/vcuteinductor/coils}/2}
\pgfscope
+ \pgf@circ@set@relative@thickness{modifier thickness}
\pgfcirc@set@arrows{tunable}{}{latexslim}
\pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
\pgfpathlineto{\pgfpoint{.4\pgf@circ@res@right}{\pgf@circ@res@up}}
@@ -1320,6 +1371,7 @@
\pgfsetbeveljoin
\pgfusepath{stroke}
\pgfscope
+ \pgf@circ@set@relative@thickness{modifier thickness}
\pgfpathmoveto{\pgfpoint{.8\pgf@circ@res@right}{2\pgf@circ@res@up}}
\pgfpathlineto{\pgfpoint{-.8\pgf@circ@res@right}{2.6\pgf@circ@res@down}}
\pgfpathlineto{\pgfpoint{-1.6\pgf@circ@res@right}{2.6\pgf@circ@res@down}}
@@ -1371,6 +1423,7 @@
\pgfusepath{stroke}
\pgfscope
+ \pgf@circ@set@relative@thickness{modifier thickness}
\pgfcirc@set@arrows{tunable}{}{latexslim}
\pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
\pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@left}{\pgf@circ@res@up}}
@@ -1412,12 +1465,13 @@
\pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
\pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
\pgfusepath{draw,fill}
- %\pgfscope
- \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{-2\pgf@circ@res@down}}
- \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{2\pgf@circ@res@down}}
- \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{2\pgf@circ@res@down}}
- \pgfusepath{draw}
- %\endpgfscope
+ \pgfscope
+ \pgf@circ@set@relative@thickness{modifier thickness}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{-2\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{2\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{2\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
}
%% Generic full tunable
@@ -1445,6 +1499,7 @@
\pgfusepath{draw,fill}
\pgfscope
+ \pgf@circ@set@relative@thickness{modifier thickness}
\pgfcirc@set@arrows{tunable}{}{latexslim}
\ifpgf@circ@fixtunable@dir
\pgfpathmoveto{\pgfpoint{.5\pgf@circ@res@left}{\pgf@circ@res@down}}
diff --git a/Master/texmf-dist/tex/generic/circuitikz/pgfcirclabel.tex b/Master/texmf-dist/tex/generic/circuitikz/pgfcirclabel.tex
index 8e2b4372c68..89539ee6e9b 100644
--- a/Master/texmf-dist/tex/generic/circuitikz/pgfcirclabel.tex
+++ b/Master/texmf-dist/tex/generic/circuitikz/pgfcirclabel.tex
@@ -32,8 +32,6 @@
\ctikzset{label distance/.initial={0pt}}
\ctikzset{annotation distance/.initial={0pt}}
-\tikzset{label distance/.code={\ctikzset{label distance={#1}}}}
-\tikzset{annotation distance/.code={\ctikzset{annotation distance={#1}}}}
%% Options
\ctikzset{label/.style = { l={#1} } }
diff --git a/Master/texmf-dist/tex/generic/circuitikz/pgfcirctripoles.tex b/Master/texmf-dist/tex/generic/circuitikz/pgfcirctripoles.tex
index 1fa81e73262..e013c51c3b3 100644
--- a/Master/texmf-dist/tex/generic/circuitikz/pgfcirctripoles.tex
+++ b/Master/texmf-dist/tex/generic/circuitikz/pgfcirctripoles.tex
@@ -2881,6 +2881,15 @@
\ctikzset{no schottky base/.add code={}{\pgf@circuit@bpt@schottkyfalse}}
\ctikzset{tripoles/schottky base size/.initial=0.05}
+% Option to add ferroelectric symbol
+\newif\ifpgf@circuit@tr@ferroel
+\pgf@circuit@tr@ferroelfalse
+\pgfkeys{/tikz/ferroel gate/.add code={}{\pgf@circuit@tr@ferroeltrue}}
+\ctikzset{ferroel gate/.add code={}{\pgf@circuit@tr@ferroeltrue}}
+\pgfkeys{/tikz/no ferroel gate/.add code={}{\pgf@circuit@tr@ferroelfalse}}
+\ctikzset{no ferroel gate/.add code={}{\pgf@circuit@tr@ferroelfalse}}
+
+
% Option draw bpt without base connection
\newif\ifpgf@circuit@bpt@drawbase
\pgf@circuit@bpt@drawbasetrue
@@ -2990,7 +2999,7 @@
\ctikzset{tripoles/hemt/conn height/.initial=0}
\ctikzset{tripoles/hemt/height/.initial=1.1}
\ctikzset{tripoles/hemt/base width/.initial=.5}
-\ctikzset{tripoles/hemt/gate width/.initial=.62}
+\ctikzset{tripoles/hemt/gate width/.initial=.5}% the horizontal position is the same
\ctikzset{tripoles/hemt/bodydiode scale/.initial=.3}
\ctikzset{tripoles/hemt/bodydiode distance/.initial=.3}
\ctikzset{tripoles/hemt/bodydiode conn/.initial=.6}
@@ -3221,6 +3230,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/base width/.initial=.5}
\ctikzset{tripoles/njfet/conn height/.initial=.35}
\ctikzset{tripoles/njfet/height/.initial=1.1}
\ctikzset{tripoles/njfet/bodydiode scale/.initial=.3}
@@ -3232,6 +3242,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/base width/.initial=.5}
\ctikzset{tripoles/pjfet/conn height/.initial=.35}
\ctikzset{tripoles/pjfet/height/.initial=1.1}
\ctikzset{tripoles/pjfet/bodydiode scale/.initial=.3}
@@ -3354,6 +3365,82 @@
\fi
}
+% add a ferroelectric squish to transistors
+
+\def\pgfcirc@ferroelectric#1#2{% #1 -> transistor type, #2 horizontal enlargment (prop to ...@left),
+ \ifpgf@circuit@tr@ferroel\pgfscope
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgf@circ@set@relative@thickness{modifier thickness}
+ % base-gate center and width of the sigmoid
+ \pgfmathsetlength{\pgf@circ@res@other}
+ {0.5*(\ctikzvalof{tripoles/#1/gate width}+\ctikzvalof{tripoles/#1/base width}-(#2))*\pgf@circ@res@left}
+ \pgfmathsetlength{\pgf@circ@res@temp}
+ {1.2*abs(\ctikzvalof{tripoles/#1/gate width}-\ctikzvalof{tripoles/#1/base width}+0.5*(#2))*\pgf@circ@res@left}
+ \pgfsetcornersarced{\pgfpoint{-0.2\pgf@circ@res@temp}{-0.2\pgf@circ@res@temp}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@other+\pgf@circ@res@temp}
+ {1.1*\ctikzvalof{tripoles/#1/base height}*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgf@circ@res@other+\pgf@circ@res@temp}
+ {0.5*\ctikzvalof{tripoles/#1/base height}*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgf@circ@res@other-\pgf@circ@res@temp}
+ {0.5*\ctikzvalof{tripoles/#1/base height}*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgf@circ@res@other-\pgf@circ@res@temp}
+ {1.1*\ctikzvalof{tripoles/#1/base height}*\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope\fi
+}
+
+\ctikzset{tr gap fill/.initial=none}
+\tikzset{tr gap fill/.style={\circuitikzbasekey/tr gap fill={#1}}}
+% fill the gap in relevant transistors
+\def\pgfcirc@fillgategap#1{% #1 transistor type
+ \edef\@@@none{none}\edef\@@@color{\ctikzvalof{tr gap fill}}% always exists
+ \ifx\@@@none\@@@color\relax\else
+ \begingroup % save the value of @res: other, step, temp
+ \edef\@@@doit{1}% draw it, set to zero if we give up
+ % ok, we have the color here. we have to get center position, with and height
+ % normally is gate height; but in igbt is outer base height (grrrr)
+ \pgfkeysifdefined{\circuitikzbasekey/tripoles/#1/outer base height}{
+ % yes, it's an IGBT
+ \pgfmathsetlength{\pgf@circ@res@other}{\ctikzvalof{tripoles/#1/outer base height}*\pgf@circ@res@up}
+ }{
+ %no. Let's try with gate height
+ \pgfkeysifdefined{\circuitikzbasekey/tripoles/#1/gate height}{
+ % yes, go for it
+ \pgfmathsetlength{\pgf@circ@res@other}{\ctikzvalof{tripoles/#1/gate height}*\pgf@circ@res@up}
+ }{
+ %no, give up, let value to 0
+ \edef\@@@doit{0}
+ }
+ }
+ % now we have to find x1 and x2: these are base width and gate width
+ % if do not have one of that, bail out.
+ \pgfkeysifdefined{\circuitikzbasekey/tripoles/#1/gate width}{
+ \pgfmathsetlength{\pgf@circ@res@temp}{\ctikzvalof{tripoles/#1/gate width}*\pgf@circ@res@left}
+ }{
+ \edef\@@@doit{0}
+ }
+ \pgfkeysifdefined{\circuitikzbasekey/tripoles/#1/base width}{
+ \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{tripoles/#1/base width}*\pgf@circ@res@left}
+ }{
+ \edef\@@@doit{0}
+ }
+ % if found, draw it.
+ \ifnum\@@@doit>0\relax
+ \pgfscope
+ \pgfsetfillcolor{\@@@color}
+ \pgfsetcolor{\@@@color}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@other}}{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@other}}
+ \pgfusepath{fill, draw}
+ \endpgfscope
+ \fi
+ \endgroup
+ \fi
+}
+
\long\def\pgfcircdeclaretransistor#1#2#3{
\pgfdeclareshape{#1}
{
@@ -3418,6 +3505,22 @@
\anchor{circle center}{
\pgf@y=0pt\pgf@x=\circleleft\advance\pgf@x by\circleradius
}
+ \savedanchor{\centergap}{% this is the center position between gate and base
+ % get "left"
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@xa=-\ctikzvalof{tripoles/#1/width}\pgf@circ@scaled@Rlen
+ \pgfkeysifdefined{\circuitikzbasekey/tripoles/#1/gate width}{
+ % yes, we have a separated gate
+ \pgfmathsetlength{\pgf@x}
+ {0.5*(\ctikzvalof{tripoles/#1/gate width}+\ctikzvalof{tripoles/#1/base width})*\pgf@xa}
+ }{
+ % no, use just the base
+ \pgfmathsetlength{\pgf@x}
+ {\ctikzvalof{tripoles/#1/base width}*\pgf@xa}
+ }
+ \pgf@y=0pt\relax
+ }
+ \anchor{centergap}{\centergap}
\anchor{center}{
\pgfpointorigin
}
@@ -4272,6 +4375,8 @@
{
% add the circle if requested (before everything else, so we can fill it)
\pgfcirc@transistorcircle
+ % fill the gap color if requested
+ \pgfcirc@fillgategap{#1}
%draw upper connection
\pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
\pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
@@ -4563,6 +4668,8 @@
}{%
% add the circle if requested (before everything else, so we can fill it)
\pgfcirc@transistorcircle
+ % fill the gap color if requested
+ \pgfcirc@fillgategap{nmos}
\pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
\pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
@@ -4636,6 +4743,8 @@
{\pgf@circ@res@up+\pgf@circ@res@down}}
\pgfusepath{draw}
\fi
+
+ \pgfcirc@ferroelectric{nmos}{0}
}
\pgfcircdeclaretransistor{pmos}{
@@ -4650,6 +4759,9 @@
}{%
% add the circle if requested (before everything else, so we can fill it)
\pgfcirc@transistorcircle
+ % fill the gap color if requested
+ \pgfcirc@fillgategap{nmos}
+
\pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
\pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
{\ctikzvalof{tripoles/pmos/gate height}\pgf@circ@res@up}}
@@ -4738,6 +4850,8 @@
\fi
\pgfusepath{draw,fill}
\fi
+
+ \pgfcirc@ferroelectric{pmos}{0}
}
%%% depletion MOSFET (simplified symbols)
@@ -4782,6 +4896,8 @@
% draw depletion channel
% add the circle if requested (before everything else, so we can fill it)
\pgfcirc@transistorcircle
+ % fill the gap color if requested
+ \pgfcirc@fillgategap{nmos}
\pgfscope
\pgfpathrectanglecorners
{\pgfpoint
@@ -4864,6 +4980,8 @@
{\pgf@circ@res@up+\pgf@circ@res@down}}
\pgfusepath{draw}
\fi
+
+ \pgfcirc@ferroelectric{nmosd}{\ctikzvalof{tripoles/nmosd/depletion width}}
}
\pgfcircdeclaretransistor{pmosd}{
@@ -4884,6 +5002,8 @@
}{%
% add the circle if requested (before everything else, so we can fill it)
\pgfcirc@transistorcircle
+ % fill the gap color if requested
+ \pgfcirc@fillgategap{nmos}
% draw depletion channel
\pgfscope
\pgfpathrectanglecorners
@@ -4983,6 +5103,8 @@
\fi
\pgfusepath{draw,fill}
\fi
+
+ \pgfcirc@ferroelectric{pmosd}{\ctikzvalof{tripoles/pmosd/depletion width}}
}
%% HEMT FET Transistor
\pgfcircdeclaretransistor{hemt}{
@@ -5023,17 +5145,21 @@
\pgfusepath{draw}
\endpgfscope
- \pgfpathmoveto{\pgfpoint
- {\ctikzvalof{tripoles/hemt/base width}\pgf@circ@res@left}
- {\pgf@circ@res@up+\pgf@circ@res@down}}
- \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}}
- \pgfusepath{draw}
+ \ifpgf@circuit@bpt@drawgate
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/hemt/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \fi
}
\long\def\drawfetcore#1{
\pgftransformationadjustments
% add the circle if requested (before everything else, so we can fill it)
\pgfcirc@transistorcircle
+ % fill the gap color if requested
+ \pgfcirc@fillgategap{#1}
%top connection
\pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
@@ -5132,21 +5258,23 @@
\pgfnode{trarrow}{\@@anchor}{}{}{\pgfusepath{stroke}}
\endpgfscope
-% GATE CONNECTION
-\ifpgf@circuit@bpt@drawgate
- \ifpgf@circuit@trans@ntype
- \pgfpathmoveto{\pgfpoint
- {\ctikzvalof{tripoles/#1/gate width}\pgf@circ@res@left}
- {\ctikzvalof{tripoles/#1/conn height}\pgf@circ@res@down}}
- \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\ctikzvalof{tripoles/#1/conn height}\pgf@circ@res@down}}
- \else
- \pgfpathmoveto{\pgfpoint
- {\ctikzvalof{tripoles/#1/gate width}\pgf@circ@res@left}
- {-\ctikzvalof{tripoles/#1/conn height}\pgf@circ@res@down}}
- \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{-\ctikzvalof{tripoles/#1/conn height}\pgf@circ@res@down}}
+ % GATE CONNECTION
+ \ifpgf@circuit@bpt@drawgate
+ \ifpgf@circuit@trans@ntype
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/gate width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/#1/conn height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\ctikzvalof{tripoles/#1/conn height}\pgf@circ@res@down}}
+ \else
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/gate width}\pgf@circ@res@left}
+ {-\ctikzvalof{tripoles/#1/conn height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{-\ctikzvalof{tripoles/#1/conn height}\pgf@circ@res@down}}
+ \fi
+ \pgfusepath{draw}
\fi
- \pgfusepath{draw}
-\fi
+
+ \pgfcirc@ferroelectric{#1}{0}
}