% Copyright 2018 by Mark Wibrow % % 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/generic/pgf/licenses/LICENSE for more details. \usepgflibrary{shapes.gates.logic}% \pgfkeys{/pgf/.cd, and gate IEC symbol/.initial=$\char`\&$, nand gate IEC symbol/.initial=$\char`\&$, or gate IEC symbol/.initial=$\geq1$, nor gate IEC symbol/.initial=$\geq1$, xor gate IEC symbol/.initial={$=1$}, xnor gate IEC symbol/.initial={$=1$}, not gate IEC symbol/.initial=1, buffer gate IEC symbol/.initial=1, logic gate IEC symbol align/.initial=top, logic gate IEC symbol color/.initial=% no value }% \pgfkeys{/pgf/logic gate IEC symbol align/.cd, top/.code=\pgftransformyshift{\innerhalfheight}, bottom/.code=\pgftransformyshift{-\innerhalfheight}, left/.code=\pgftransformxshift{-\innerhalfwidth}, right/.code=\pgftransformxshift{\innerhalfwidth}, }% \def\pgf@lib@sh@logicgates@IEC@foregroundpath#1{% \dimensions% {% \pgftransformshift{\centerpoint}% \edef\pgf@lib@sh@temp{\pgfkeysvalueof{/pgf/logic gate IEC symbol align}}% \edef\pgf@lib@sh@@temp{/pgf/logic gate IEC symbol align/.cd, \pgf@lib@sh@temp}% \expandafter\pgfkeys\expandafter{\pgf@lib@sh@@temp}% \expandafter\pgftext\expandafter[\pgf@lib@sh@temp]{% \pgfkeysgetvalue{/pgf/logic gate IEC symbol color}{\pgf@lib@sh@temp}% \ifx\pgf@lib@sh@temp\pgfutil@empty% \else% \expandafter\color\expandafter{\pgf@lib@sh@temp}% \fi% \pgfkeysvalueof{/pgf/#1 gate IEC symbol}% }% }% }% \def\pgf@lib@sh@logicgates@dimensions@IEC#1{% \pgf@x.5\wd\pgfnodeparttextbox% \pgf@y.5\ht\pgfnodeparttextbox% \advance\pgf@y.5\dp\pgfnodeparttextbox% % % Adjust for the width of the gate symbol. % \setbox\pgf@hbox\hbox{% % wrap in `\pgfinterruptpicture' to restore font, like how `\pgfnode` sets % `\pgfnodeparttextbox` \pgfinterruptpicture {\pgfkeysvalueof{/pgf/#1 gate IEC symbol}}% add braces as color-aftergroup-fix TT \endpgfinterruptpicture }% \pgf@xa.5\wd\pgf@hbox% \pgf@ya.5\ht\pgf@hbox% \advance\pgf@ya.5\dp\pgf@hbox% \ifdim\pgf@x<\pgf@xa% \pgf@x\pgf@xa% \fi% \ifdim\pgf@y<\pgf@ya% \pgf@y\pgf@ya% \fi% \pgfmathaddtolength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}% \pgfmathaddtolength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}% % % Adjust for minimum height and width. % \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}% \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}% \ifdim\pgf@x<.5\pgf@xa% \pgf@x.5\pgf@xa% \fi% \ifdim\pgf@y<.5\pgf@ya% \pgf@y.5\pgf@ya% \fi% % % Adjust the height for the number of inputs. % \c@pgf@counta\pgf@lib@sh@logicgate@numinputs% \advance\c@pgf@counta1\relax% \pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/logic gate inverted radius}}% \pgf@yb2.0\pgf@yb% \advance\pgf@yb\pgflinewidth% \pgfmathsetlength\pgf@yc{\pgfkeysvalueof{/pgf/logic gate input sep}}% \edef\inputsep{\the\pgf@yc}% \addtosavedmacro\inputsep% \ifdim\pgf@yb<\pgf@yc% \pgf@yb\pgf@yc% \fi% \multiply\pgf@yb\c@pgf@counta% \ifdim\pgf@y<.5\pgf@yb% \pgf@y.5\pgf@yb% \fi% % \pgf@xa\pgf@x% \pgfmathaddtolength\pgf@xa{-\pgfkeysvalueof{/pgf/inner xsep}}% \edef\innerhalfwidth{\the\pgf@xa}% \addtosavedmacro\innerhalfwidth% % \pgf@ya\pgf@y% \pgfmathaddtolength\pgf@ya{-\pgfkeysvalueof{/pgf/inner ysep}}% \edef\innerhalfheight{\the\pgf@ya}% \addtosavedmacro\innerhalfheight% % % Take into account the outer sep. % \pgfmathaddtolength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}% \pgfmathaddtolength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}% % \edef\halfwidth{\the\pgf@x}% \edef\halfheight{\the\pgf@y}% \addtosavedmacro\halfwidth% \addtosavedmacro\halfheight% }% \def\pgf@lib@sh@logicgate@IEC@inputanchor#1{% \dimensions% \centerpoint% \advance\pgf@x-\halfwidth% \expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-#1\endcsname% \advance\pgf@x-\invertedradius% \advance\pgf@x-\outerinvertedradius% \fi% % \pgfutil@tempdima\halfheight% \multiply\pgfutil@tempdima2\relax% \c@pgf@counta\numinputs% \advance\c@pgf@counta1\relax% \divide\pgfutil@tempdima\c@pgf@counta% \multiply\pgfutil@tempdima#1\relax% \advance\pgf@y\halfheight% \advance\pgf@y-\pgfutil@tempdima% }% % Shape and gate IEC % \pgfdeclareshape{and gate IEC}{% \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@and gate IEC\endcsname{% \pgf@lib@sh@logicgate@parseinputs{1024}% Maximum 1024 (!) inputs. % \pgfmathloop% \ifnum\pgfmathcounter>\pgf@lib@sh@logicgate@numinputs% \else% \pgfutil@ifundefined{pgf@anchor@and gate IEC@input \pgfmathcounter}{% \expandafter\xdef\csname pgf@anchor@and gate IEC@input \pgfmathcounter\endcsname{% \noexpand\pgf@lib@sh@logicgate@IEC@inputanchor{\pgfmathcounter}% }% }{}% \repeatpgfmathloop% \ifnum\pgf@lib@sh@logicgate@numinputs<2\relax% \pgferror{An and gate must have at least two inputs}% \fi% }% \savedmacro\numinputs{\let\numinputs\pgf@lib@sh@logicgate@numinputs}% \saveddimen\invertedradius{% \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}% }% \saveddimen\outerinvertedradius{% \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}% \advance\pgf@x.5\pgflinewidth% }% \savedmacro\dimensions{% \pgf@lib@sh@logicgates@dimensions@IEC{and}% }% \savedanchor\centerpoint{% \pgf@x.5\wd\pgfnodeparttextbox% \pgf@y.5\ht\pgfnodeparttextbox% \advance\pgf@y-.5\dp\pgfnodeparttextbox% }% \savedanchor\midpoint{% \pgf@x.5\wd\pgfnodeparttextbox% \pgfmathsetlength\pgf@y{+0.5ex}% }% \savedanchor\basepoint{% \pgf@x.5\wd\pgfnodeparttextbox% \pgf@y0pt% }% \anchor{center}{\centerpoint}% \anchor{mid}{\midpoint}% \anchor{mid west}{% \dimensions% \midpoint% \advance\pgf@x-\halfwidth}% \anchor{mid east}{% \dimensions% \midpoint% \advance\pgf@x\halfwidth}% \anchor{base}{\basepoint}% \anchor{base west}{% \dimensions% \basepoint% \advance\pgf@x-\halfwidth}% \anchor{base east}{% \dimensions% \basepoint% \advance\pgf@x\halfwidth}% \anchor{north}{\dimensions\centerpoint\advance\pgf@y\halfheight}% \anchor{south}{\dimensions\centerpoint\advance\pgf@y-\halfheight}% \anchor{east}{\dimensions\centerpoint\advance\pgf@x\halfwidth}% \anchor{west}{\dimensions\centerpoint\advance\pgf@x-\halfwidth}% \anchor{north east}{\dimensions\centerpoint\advance\pgf@x\halfwidth\advance\pgf@y\halfheight}% \anchor{north west}{\dimensions\centerpoint\advance\pgf@x-\halfwidth\advance\pgf@y\halfheight}% \anchor{south east}{\dimensions\centerpoint\advance\pgf@x\halfwidth\advance\pgf@y-\halfheight}% \anchor{south west}{\dimensions\centerpoint\advance\pgf@x-\halfwidth\advance\pgf@y-\halfheight}% \anchor{output}{\dimensions\centerpoint\advance\pgf@x\halfwidth}% \backgroundpath{% \dimensions% \pgf@xc\halfwidth% \pgf@yc\halfheight% \pgfmathaddtolength\pgf@xc{-\pgfkeysvalueof{/pgf/outer xsep}}% \pgfmathaddtolength\pgf@yc{-\pgfkeysvalueof{/pgf/outer xsep}}% {% \pgftransformshift{\centerpoint}% \pgfpathrectangle{\pgfqpoint{-\pgf@xc}{-\pgf@yc}}% {% \pgf@xc2.0\pgf@xc% \pgf@yc2.0\pgf@yc% \pgfqpoint{\pgf@xc}{\pgf@yc}% }% \pgfpathclose% % % Draw inputs. % \pgf@xc-\halfwidth% \advance\pgf@xc-\invertedradius% \pgf@yc\halfheight% \pgfutil@tempdima2.0\pgf@yc% \c@pgf@counta\numinputs% \advance\c@pgf@counta1\relax% \divide\pgfutil@tempdima\c@pgf@counta% \pgfmathloop% \ifnum\pgfmathcounter>\numinputs% \else% \advance\pgf@yc-\pgfutil@tempdima% \expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-\pgfmathcounter\endcsname% {% \pgfpathcircle{\pgfqpoint{\pgf@xc}{\pgf@yc}}{\invertedradius}% }% \fi% \repeatpgfmathloop% }% }% \foregroundpath{\pgf@lib@sh@logicgates@IEC@foregroundpath{and}}% \anchorborder{% \pgfextract@process\externalpoint{}% \dimensions% \pgfpointadd{\centerpoint}{\pgfpointborderrectangle{\externalpoint}{\pgfqpoint{\halfwidth}{\halfheight}}}% }% }% % Shape nand gate IEC % \pgfdeclareshape{nand gate IEC}{% \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@nand gate IEC\endcsname{% \pgf@lib@sh@logicgate@parseinputs{1024}% Maximum 1024 (!) inputs. % \pgfmathloop% \ifnum\pgfmathcounter>\pgf@lib@sh@logicgate@numinputs% \else% \pgfutil@ifundefined{pgf@anchor@nand gate IEC@input \pgfmathcounter}{% \expandafter\xdef\csname pgf@anchor@nand gate IEC@input \pgfmathcounter\endcsname{% \noexpand\pgf@lib@sh@logicgate@IEC@inputanchor{\pgfmathcounter}% }% }{}% \repeatpgfmathloop% \ifnum\pgf@lib@sh@logicgate@numinputs<2\relax% \pgferror{A nand gate must have at least two inputs}% \fi% }% \savedmacro\numinputs{\let\numinputs\pgf@lib@sh@logicgate@numinputs}% \saveddimen\invertedradius{% \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}% }% \saveddimen\outerinvertedradius{% \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}% \advance\pgf@x.5\pgflinewidth% }% \savedmacro\dimensions{% \pgf@lib@sh@logicgates@dimensions@IEC{nand}% }% \savedanchor\centerpoint{% \pgf@x.5\wd\pgfnodeparttextbox% \pgf@y.5\ht\pgfnodeparttextbox% \advance\pgf@y-.5\dp\pgfnodeparttextbox% }% \savedanchor\midpoint{% \pgf@x.5\wd\pgfnodeparttextbox% \pgfmathsetlength\pgf@y{+0.5ex}% }% \savedanchor\basepoint{% \pgf@x.5\wd\pgfnodeparttextbox% \pgf@y0pt% }% \inheritanchor[from=and gate IEC]{center}% \inheritanchor[from=and gate IEC]{mid}% \inheritanchor[from=and gate IEC]{mid west}% \inheritanchor[from=and gate IEC]{mid east}% \inheritanchor[from=and gate IEC]{base}% \inheritanchor[from=and gate IEC]{base west}% \inheritanchor[from=and gate IEC]{base east}% \inheritanchor[from=and gate IEC]{north}% \inheritanchor[from=and gate IEC]{south}% \inheritanchor[from=and gate IEC]{east}% \inheritanchor[from=and gate IEC]{west}% \inheritanchor[from=and gate IEC]{north east}% \inheritanchor[from=and gate IEC]{north west}% \inheritanchor[from=and gate IEC]{south east}% \inheritanchor[from=and gate IEC]{south west}% \anchor{output}{% \csname pgf@anchor@and gate IEC@east\endcsname% \advance\pgf@x\invertedradius% \advance\pgf@x\outerinvertedradius% }% \backgroundpath{% \csname pgf@sh@bg@and gate IEC\endcsname% \pgfpathcircle{% \centerpoint% \advance\pgf@x\halfwidth% \advance\pgf@x\invertedradius% }{+\invertedradius}% }% \foregroundpath{\pgf@lib@sh@logicgates@IEC@foregroundpath{nand}}% \inheritanchorborder[from=and gate IEC]% }% % Shape or gate IEC % \pgfdeclareshape{or gate IEC}{% \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@or gate IEC\endcsname{% \pgf@lib@sh@logicgate@parseinputs{1024}% Maximum 1024 (!) inputs. % \pgfmathloop% \ifnum\pgfmathcounter>\pgf@lib@sh@logicgate@numinputs% \else% \pgfutil@ifundefined{pgf@anchor@or gate IEC@input \pgfmathcounter}{% \expandafter\xdef\csname pgf@anchor@or gate IEC@input \pgfmathcounter\endcsname{% \noexpand\pgf@lib@sh@logicgate@IEC@inputanchor{\pgfmathcounter}% }% }{}% \repeatpgfmathloop% \ifnum\pgf@lib@sh@logicgate@numinputs<2\relax% \pgferror{An or gate must have at least two inputs}% \fi% }% \savedmacro\numinputs{\let\numinputs\pgf@lib@sh@logicgate@numinputs}% \saveddimen\invertedradius{% \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}% }% \saveddimen\outerinvertedradius{% \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}% \advance\pgf@x.5\pgflinewidth% }% \savedmacro\dimensions{% \pgf@lib@sh@logicgates@dimensions@IEC{or}% }% \savedanchor\centerpoint{% \pgf@x.5\wd\pgfnodeparttextbox% \pgf@y.5\ht\pgfnodeparttextbox% \advance\pgf@y-.5\dp\pgfnodeparttextbox% }% \savedanchor\midpoint{% \pgf@x.5\wd\pgfnodeparttextbox% \pgfmathsetlength\pgf@y{+0.5ex}% }% \savedanchor\basepoint{% \pgf@x.5\wd\pgfnodeparttextbox% \pgf@y0pt% }% \inheritanchor[from=and gate IEC]{center}% \inheritanchor[from=and gate IEC]{mid}% \inheritanchor[from=and gate IEC]{mid west}% \inheritanchor[from=and gate IEC]{mid east}% \inheritanchor[from=and gate IEC]{base}% \inheritanchor[from=and gate IEC]{base west}% \inheritanchor[from=and gate IEC]{base east}% \inheritanchor[from=and gate IEC]{north}% \inheritanchor[from=and gate IEC]{south}% \inheritanchor[from=and gate IEC]{east}% \inheritanchor[from=and gate IEC]{west}% \inheritanchor[from=and gate IEC]{north east}% \inheritanchor[from=and gate IEC]{north west}% \inheritanchor[from=and gate IEC]{south east}% \inheritanchor[from=and gate IEC]{south west}% \inheritanchor[from=and gate IEC]{output}% \inheritbackgroundpath[from=and gate IEC]% \foregroundpath{\pgf@lib@sh@logicgates@IEC@foregroundpath{or}}% \inheritanchorborder[from=and gate IEC]% }% % Shape nor gate IEC % \pgfdeclareshape{nor gate IEC}{% \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@nor gate IEC\endcsname{% \pgf@lib@sh@logicgate@parseinputs{1024}% Maximum 1024 (!) inputs. % \pgfmathloop% \ifnum\pgfmathcounter>\pgf@lib@sh@logicgate@numinputs% \else% \pgfutil@ifundefined{pgf@anchor@nor gate IEC@input \pgfmathcounter}{% \expandafter\xdef\csname pgf@anchor@nor gate IEC@input \pgfmathcounter\endcsname{% \noexpand\pgf@lib@sh@logicgate@IEC@inputanchor{\pgfmathcounter}% }% }{}% \repeatpgfmathloop% \ifnum\pgf@lib@sh@logicgate@numinputs<2\relax% \pgferror{A nor gate must have at least two inputs}% \fi% }% \savedmacro\numinputs{\let\numinputs\pgf@lib@sh@logicgate@numinputs}% \saveddimen\invertedradius{% \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}% }% \saveddimen\outerinvertedradius{% \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}% \advance\pgf@x.5\pgflinewidth% }% \savedmacro\dimensions{% \pgf@lib@sh@logicgates@dimensions@IEC{nor}% }% \savedanchor\centerpoint{% \pgf@x.5\wd\pgfnodeparttextbox% \pgf@y.5\ht\pgfnodeparttextbox% \advance\pgf@y-.5\dp\pgfnodeparttextbox% }% \savedanchor\midpoint{% \pgf@x.5\wd\pgfnodeparttextbox% \pgfmathsetlength\pgf@y{+0.5ex}% }% \savedanchor\basepoint{% \pgf@x.5\wd\pgfnodeparttextbox% \pgf@y0pt% }% \inheritanchor[from=and gate IEC]{center}% \inheritanchor[from=and gate IEC]{mid}% \inheritanchor[from=and gate IEC]{mid west}% \inheritanchor[from=and gate IEC]{mid east}% \inheritanchor[from=and gate IEC]{base}% \inheritanchor[from=and gate IEC]{base west}% \inheritanchor[from=and gate IEC]{base east}% \inheritanchor[from=and gate IEC]{north}% \inheritanchor[from=and gate IEC]{south}% \inheritanchor[from=and gate IEC]{east}% \inheritanchor[from=and gate IEC]{west}% \inheritanchor[from=and gate IEC]{north east}% \inheritanchor[from=and gate IEC]{north west}% \inheritanchor[from=and gate IEC]{south east}% \inheritanchor[from=and gate IEC]{south west}% \inheritanchor[from=nand gate IEC]{output}%% \inheritbackgroundpath[from=nand gate IEC]% \foregroundpath{\pgf@lib@sh@logicgates@IEC@foregroundpath{nor}}% \inheritanchorborder[from=and gate IEC]% }% % Shape xor gate IEC % \pgfdeclareshape{xor gate IEC}{% \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@xor gate IEC\endcsname{% \pgf@lib@sh@logicgate@parseinputs{2}% Maximum 1024 (!) inputs. % \pgfmathloop% \ifnum\pgfmathcounter>\pgf@lib@sh@logicgate@numinputs% \else% \pgfutil@ifundefined{pgf@anchor@xor gate IEC@input \pgfmathcounter}{% \expandafter\xdef\csname pgf@anchor@xor gate IEC@input \pgfmathcounter\endcsname{% \noexpand\pgf@lib@sh@logicgate@IEC@inputanchor{\pgfmathcounter}% }% }{}% \repeatpgfmathloop% \ifnum\pgf@lib@sh@logicgate@numinputs<2\relax% \pgferror{An xor gate must have two inputs}% \fi% }% \savedmacro\numinputs{\let\numinputs\pgf@lib@sh@logicgate@numinputs}% \saveddimen\invertedradius{% \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}% }% \saveddimen\outerinvertedradius{% \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}% \advance\pgf@x.5\pgflinewidth% }% \savedmacro\dimensions{% \pgf@lib@sh@logicgates@dimensions@IEC{xor}% }% \savedanchor\centerpoint{% \pgf@x.5\wd\pgfnodeparttextbox% \pgf@y.5\ht\pgfnodeparttextbox% \advance\pgf@y-.5\dp\pgfnodeparttextbox% }% \savedanchor\midpoint{% \pgf@x.5\wd\pgfnodeparttextbox% \pgfmathsetlength\pgf@y{+0.5ex}% }% \savedanchor\basepoint{% \pgf@x.5\wd\pgfnodeparttextbox% \pgf@y0pt% }% \inheritanchor[from=and gate IEC]{center}% \inheritanchor[from=and gate IEC]{mid}% \inheritanchor[from=and gate IEC]{mid west}% \inheritanchor[from=and gate IEC]{mid east}% \inheritanchor[from=and gate IEC]{base}% \inheritanchor[from=and gate IEC]{base west}% \inheritanchor[from=and gate IEC]{base east}% \inheritanchor[from=and gate IEC]{north}% \inheritanchor[from=and gate IEC]{south}% \inheritanchor[from=and gate IEC]{east}% \inheritanchor[from=and gate IEC]{west}% \inheritanchor[from=and gate IEC]{north east}% \inheritanchor[from=and gate IEC]{north west}% \inheritanchor[from=and gate IEC]{south east}% \inheritanchor[from=and gate IEC]{south west}% \inheritanchor[from=and gate IEC]{output}% \inheritbackgroundpath[from=and gate IEC]% \foregroundpath{\pgf@lib@sh@logicgates@IEC@foregroundpath{xor}}% \inheritanchorborder[from=and gate IEC]% }% % Shape xnor gate IEC % \pgfdeclareshape{xnor gate IEC}{% \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@xnor gate IEC\endcsname{% \pgf@lib@sh@logicgate@parseinputs{1024}% Maximum 1024 (!) inputs. % \pgfmathloop% \ifnum\pgfmathcounter>\pgf@lib@sh@logicgate@numinputs% \else% \pgfutil@ifundefined{pgf@anchor@xnor gate IEC@input \pgfmathcounter}{% \expandafter\xdef\csname pgf@anchor@xnor gate IEC@input \pgfmathcounter\endcsname{% \noexpand\pgf@lib@sh@logicgate@IEC@inputanchor{\pgfmathcounter}% }% }{}% \repeatpgfmathloop% \ifnum\pgf@lib@sh@logicgate@numinputs<2\relax% \pgferror{A xnor gate must have two inputs}% \fi% }% \savedmacro\numinputs{\let\numinputs\pgf@lib@sh@logicgate@numinputs}% \saveddimen\invertedradius{% \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}% }% \saveddimen\outerinvertedradius{% \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}% \advance\pgf@x.5\pgflinewidth% }% \savedmacro\dimensions{% \pgf@lib@sh@logicgates@dimensions@IEC{xnor}% }% \savedanchor\centerpoint{% \pgf@x.5\wd\pgfnodeparttextbox% \pgf@y.5\ht\pgfnodeparttextbox% \advance\pgf@y-.5\dp\pgfnodeparttextbox% }% \savedanchor\midpoint{% \pgf@x.5\wd\pgfnodeparttextbox% \pgfmathsetlength\pgf@y{+0.5ex}% }% \savedanchor\basepoint{% \pgf@x.5\wd\pgfnodeparttextbox% \pgf@y0pt% }% \inheritanchor[from=and gate IEC]{center}% \inheritanchor[from=and gate IEC]{mid}% \inheritanchor[from=and gate IEC]{mid west}% \inheritanchor[from=and gate IEC]{mid east}% \inheritanchor[from=and gate IEC]{base}% \inheritanchor[from=and gate IEC]{base west}% \inheritanchor[from=and gate IEC]{base east}% \inheritanchor[from=and gate IEC]{north}% \inheritanchor[from=and gate IEC]{south}% \inheritanchor[from=and gate IEC]{east}% \inheritanchor[from=and gate IEC]{west}% \inheritanchor[from=and gate IEC]{north east}% \inheritanchor[from=and gate IEC]{north west}% \inheritanchor[from=and gate IEC]{south east}% \inheritanchor[from=and gate IEC]{south west}% \inheritanchor[from=nand gate IEC]{output}% \inheritbackgroundpath[from=nand gate IEC]% \foregroundpath{\pgf@lib@sh@logicgates@IEC@foregroundpath{xnor}}% \inheritanchorborder[from=and gate IEC]% }% % Shape buffer gate IEC % \pgfdeclareshape{buffer gate IEC}{% \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@buffer gate IEC\endcsname{% \pgf@lib@sh@logicgate@parseinputs{1}% Maximum 1 input. % \expandafter\gdef\csname pgf@anchor@buffer gate IEC@input\endcsname{% \pgf@lib@sh@logicgate@IEC@inputanchor{1}% }% \ifnum\pgf@lib@sh@logicgate@numinputs=0\relax% \pgferror{A buffer gate must have one inputs}% \fi% }% \savedmacro\numinputs{\let\numinputs\pgf@lib@sh@logicgate@numinputs}% \saveddimen\invertedradius{% \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}% }% \saveddimen\outerinvertedradius{% \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}% \advance\pgf@x.5\pgflinewidth% }% \savedmacro\dimensions{% \pgf@lib@sh@logicgates@dimensions@IEC{xor}% }% \savedanchor\centerpoint{% \pgf@x.5\wd\pgfnodeparttextbox% \pgf@y.5\ht\pgfnodeparttextbox% \advance\pgf@y-.5\dp\pgfnodeparttextbox% }% \savedanchor\midpoint{% \pgf@x.5\wd\pgfnodeparttextbox% \pgfmathsetlength\pgf@y{+0.5ex}% }% \savedanchor\basepoint{% \pgf@x.5\wd\pgfnodeparttextbox% \pgf@y0pt% }% \inheritanchor[from=and gate IEC]{center}% \inheritanchor[from=and gate IEC]{mid}% \inheritanchor[from=and gate IEC]{mid west}% \inheritanchor[from=and gate IEC]{mid east}% \inheritanchor[from=and gate IEC]{base}% \inheritanchor[from=and gate IEC]{base west}% \inheritanchor[from=and gate IEC]{base east}% \inheritanchor[from=and gate IEC]{north}% \inheritanchor[from=and gate IEC]{south}% \inheritanchor[from=and gate IEC]{east}% \inheritanchor[from=and gate IEC]{west}% \inheritanchor[from=and gate IEC]{north east}% \inheritanchor[from=and gate IEC]{north west}% \inheritanchor[from=and gate IEC]{south east}% \inheritanchor[from=and gate IEC]{south west}% \inheritanchor[from=and gate IEC]{output}% \inheritbackgroundpath[from=and gate IEC]% \foregroundpath{\pgf@lib@sh@logicgates@IEC@foregroundpath{buffer}}% \inheritanchorborder[from=and gate IEC]% }% % Shape not gate IEC % \pgfdeclareshape{not gate IEC}{% \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@not gate IEC\endcsname{% \pgf@lib@sh@logicgate@parseinputs{1}% % \pgfutil@ifundefined{pgf@anchor@not gate IEC@input}{% \expandafter\gdef\csname pgf@anchor@not gate IEC@input\endcsname{% \pgf@lib@sh@logicgate@IEC@inputanchor{1}% }}{}% \ifnum\pgf@lib@sh@logicgate@numinputs=0\relax% \pgferror{A not gate must have one input}% \fi% }% \savedmacro\numinputs{\let\numinputs\pgf@lib@sh@logicgate@numinputs}% \saveddimen\invertedradius{% \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}% }% \saveddimen\outerinvertedradius{% \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}% \advance\pgf@x.5\pgflinewidth% }% \savedmacro\dimensions{% \pgf@lib@sh@logicgates@dimensions@IEC{not}% }% \savedanchor\centerpoint{% \pgf@x.5\wd\pgfnodeparttextbox% \pgf@y.5\ht\pgfnodeparttextbox% \advance\pgf@y-.5\dp\pgfnodeparttextbox% }% \savedanchor\midpoint{% \pgf@x.5\wd\pgfnodeparttextbox% \pgfmathsetlength\pgf@y{+0.5ex}% }% \savedanchor\basepoint{% \pgf@x.5\wd\pgfnodeparttextbox% \pgf@y0pt% }% \inheritanchor[from=and gate IEC]{center}% \inheritanchor[from=and gate IEC]{mid}% \inheritanchor[from=and gate IEC]{mid west}% \inheritanchor[from=and gate IEC]{mid east}% \inheritanchor[from=and gate IEC]{base}% \inheritanchor[from=and gate IEC]{base west}% \inheritanchor[from=and gate IEC]{base east}% \inheritanchor[from=and gate IEC]{north}% \inheritanchor[from=and gate IEC]{south}% \inheritanchor[from=and gate IEC]{east}% \inheritanchor[from=and gate IEC]{west}% \inheritanchor[from=and gate IEC]{north east}% \inheritanchor[from=and gate IEC]{north west}% \inheritanchor[from=and gate IEC]{south east}% \inheritanchor[from=and gate IEC]{south west}% \inheritanchor[from=nand gate IEC]{output}% \inheritbackgroundpath[from=nand gate IEC]% \foregroundpath{\pgf@lib@sh@logicgates@IEC@foregroundpath{not}}% \inheritanchorborder[from=and gate IEC]% }% \endinput