diff options
author | Karl Berry <karl@freefriends.org> | 2021-04-20 20:09:13 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-04-20 20:09:13 +0000 |
commit | 4e4deceb7fcf63bfb6953bf55d36f212fec27128 (patch) | |
tree | b77e54a6b25314e0c3482ba684a695cdf9ae3e4c /Master/texmf-dist/tex/generic | |
parent | 983cea5710f0c6824e67126545c1c80523538bc5 (diff) |
circuitikz (20apr21)
git-svn-id: svn://tug.org/texlive/trunk@58923 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic')
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} } |