From 6b10e9901a24325e837f0fdc2cbce8f43f18ccff Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Tue, 2 Jan 2024 03:04:28 +0000 Subject: CTAN sync 202401020304 --- graphics/circuit_macros/doc/defines.tex | 3951 +++++++++++++++++-------------- 1 file changed, 2164 insertions(+), 1787 deletions(-) (limited to 'graphics/circuit_macros/doc/defines.tex') diff --git a/graphics/circuit_macros/doc/defines.tex b/graphics/circuit_macros/doc/defines.tex index 7f3ceea1b3..0c9c67bfbf 100644 --- a/graphics/circuit_macros/doc/defines.tex +++ b/graphics/circuit_macros/doc/defines.tex @@ -11,7 +11,7 @@ %\newcommand{\macx}[2]{% % \phantomsection\pdfbookmark[subsection]{#1}{#2}#1} -\newcommand{\macrodef}[5]{%\begin{samepage}% +\newcommand{\macrodef}[5]{%\begin{minipage}[b]{\textwidth}% \phantomsection\pdfbookmark[subsubsection]{#1}{#2}% \setbox\Defbox=\hbox{\tt #1#3}% \ifdim\wd\Defbox>\textwidth% @@ -19,9 +19,10 @@ \ifdim\wd\Defbox>\leftwid% \box\Defbox\hfill\break\hspace*{\leftwid}% \else\hbox to \leftwid{\box\Defbox\hfill}\fi% + \nopagebreak \hbox to \libwid{#4\hfill}\parbox[t]{\rightwid}% {\raggedright #5}% -% \end{samepage}% + %\end{minipage}% \vspace{\parsep}\\}% \newcommand{\seesect}[1]{ (\SR{#1})} @@ -34,6 +35,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\raggedbottom \vspace{\abovedisplayskip} \noindent \LR{A} \LR{B} \LR{C} \LR{D} \LR{E} \LR{F} \LR{G} \LR{H} \LR{I} \LR{J} @@ -42,101 +44,113 @@ \\ \Letter{A}% -\macrodef{above\_}{above_}{} - {gen} - {string position above relative to current direction} -\macrodef{abs\_}{abs_}{({\sl number})} - {gen} - {absolute value function} -\macrodef{ACsymbol}{ACsymbol}{(at {\sl position, len, ht,} - [n:][A]U|D|L|R|{\sl degrees}) } - {cct} +\macrodef{above\_}{above_}{}% + {gen}% + {string position above relative to current direction}% +\macrodef{abs\_}{abs_}{({\sl number})}% + {gen}% + {absolute value function}% +\macrodef{ACsymbol}{ACsymbol}{(at {\sl position, len, ht,}% + [n:][A]U|D|L|R|{\sl degrees}) }% + {cct}% {draw a stack of $n$ (default 1) AC symbols - ( 1-cycle sine waves); If arg 4 contains A, two arcs + (1-cycle sine waves); If arg 4 contains A, two arcs are used. The current drawing direction is default, otherwise Up, Down, Left, Right, or at {\sl degrees} slant; \seesect{Twoterminal:} e.g.,\\ - {\tt ebox; $\lbrace$ACsymbol(at last [],{,}dimen\_/8)$\rbrace$}} -\macrodef{adc}{adc}{({\sl width,height,nIn,nN,nOut,nS})} - {cct} - {ADC with defined width, height, and number of inputs {\tt In$i$}, - top terminals {\tt N$i$}, ouputs {\tt Out$i$}, - and bottom terminals~{\tt S$i$}} -\macrodef{addtaps}{addtaps}{[{\sl arrowhd} + {\tt ebox; $\lbrace$ACsymbol(at last [],{,}dimen\_/8)$\rbrace$}}% +\macrodef{adc}{adc}{({\sl width,height,nIn,nN,nOut,nS})}% + {cct}% + {Analog-digital converter with defined width, height, and number of + inputs {\tt In$i$}, top terminals {\tt N$i$}, ouputs {\tt Out$i$}, + and bottom terminals~{\tt S$i$}}% +\macrodef{addtaps}{addtaps}{[{\sl arrowhd}% | type={\sl arrowhd};name={\sl Name}], - {\sl fraction, length, fraction, length,} $\cdots$)} - {cct} + {\sl fraction, length, fraction, length,} $\cdots$)}% + {cct}% {Add taps to the previous two-terminal element. - {\sl arrowhd} = blank or one of {\tt . - <- -> <->}. + {\sl arrowhd} is blank or one of {\tt . - <- -> <->}. Each fraction determines the position along the element body of the tap. A negative length draws the tap to the right of the current direction; positive length to the left. Tap names are Tap1, Tap2, $\cdots$ by default or Name1, Name2, $\cdots$ if specified - \seesect{Composite:}} -\macrodef{along\_}{along_}{({\sl linear object name})} - {gen} - {short for {\tt between {\sl name}.start and {\sl name}.end}} -\macrodef{Along\_}{Along_}{({\sl LinearObj,distance,}[R])} - {gen} + \seesect{Composite:}}% +\macrodef{along\_}{along_}{({\sl linear object name})}% + {gen}% + {short for {\tt between {\sl name}.start and {\sl name}.end}}% +\macrodef{Along\_}{Along_}{({\sl LinearObj,distance,}[R])}% + {gen}% {Position arg2 (default all the way) along a linear object - from {\tt .start} to {\tt .end} - (from {\tt .end} to {\tt .start} if arg3={\tt R}) } -\macrodef{amp}{amp}{(\linespec,{\sl size})} - {cct} - {amplifier\seesect{Twoterminal:}} + from {\tt .start} to {\tt .end}% + (from {\tt .end} to {\tt .start} if arg3={\tt R}) }% +\macrodef{amp}{amp}{(\linespec, {\sl size}, {\sl attributes})}% + {cct}% + {amplifier\seesect{Twoterminal:}}% \macrodef{And, Or, Not, Nand, Nor, Xor, Nxor, Buffer}% - {And, Or, Not, Nand, Nor, Xor, Nxor, Buffer}{} - {log} - {Wrappers of {\tt AND\_gate}, $\ldots$ for use in the {\tt Autologix} - macro} -\macrodef{AND\_gate}{AND_gate}{({\sl n},N)} - {log} - {basic `and' gate, 2 or {\sl n\/} inputs; {\tt N}=negated input. - Otherwise, arg1 can be a sequence of letters {\tt P|N} - to define normal or negated inputs - \seesect{Logicgates:}} -\macrodef{AND\_gen}{AND_gen}{($n$,{\sl chars},[{\sl wid},[{\sl ht}]])} - {log} + {And, Or, Not, Nand, Nor, Xor, Nxor, Buffer}{}% + {log}% + {Wrappers of {\tt AND\_gate}, $\ldots$ for use in the {\tt Autologix}% + macro}% +\macrodef{AND\_gate}{AND_gate}{({\tt {\sl n}, [N][B], + [{\sl wid}, [{\sl ht}]], {\sl attributes}})}% + {log}% + {`and' gate, 2 or {\sl n\/} inputs ($0 \leq n \leq 16$) drawn in the + current direction; + {\tt N}: negated inputs; {\tt B}: box shape. + Alternatively, {\tt AND\_gate({\sl chars}, [B], {\sl wid}, + {\sl ht}, {\sl attributes})}, where + arg1 is a sequence of letters {\tt P|N} to define + normal or negated inputs. + \seesect{Logicgates:}}% +\macrodef{AND\_gen}{AND_gen}{($n$, {\sl chars}, [{\sl wid}, [{\sl ht}]], + {\sl attributes})}% + {log}% {general AND gate: $n$=number of inputs $(0\leq n\leq 16)$; - {\sl chars:} + {\sl chars:}% B=base and straight sides; A=Arc; [N]NE,[N]SE,[N]I,[N]N,[N]S=inputs or circles; [N]O=output; C=center. - Otherwise, arg1 can be a sequence of letters {\tt P|N} - to define normal or negated inputs.} -\macrodef{AND\_ht}{AND_ht}{} - {log} - {height of basic `and' and `or' gates in {\tt L\_unit}s} -\macrodef{AND\_wd}{AND_wd}{} - {log} - {width of basic `and' and `or' gates in {\tt L\_unit}s} + Otherwise, arg1 can be a sequence of letters {\tt P|N}% + to define normal or negated inputs; arg2 is as above except that + {\tt [N]I} is ignored. Arg 5 contains body attributes.}% +\macrodef{AND\_ht}{AND_ht}{}% + {log}% + {height of basic `and' and `or' gates in {\tt L\_unit}s}% +\macrodef{AND\_wd}{AND_wd}{}% + {log}% + {width of basic `and' and `or' gates in {\tt L\_unit}s}% \macrodef{antenna}{antenna}{% - (at {\sl location}, T, A|L|T|S|D|P|F, U|D|L|R|{\sl degrees})} - {cct} - {antenna, without stem for nonblank 2nd arg; {\tt A}=aerial, - {\tt L}=loop, {\tt T}=triangle, {\tt S}=diamond, {\tt D}=dipole, - {\tt P}=phased, {\tt F}=fork; - up, down, left, right, or angle from horizontal (default 90) - \seesect{Composite:}} + (at {\sl location}, T, A|L|T|S|D|P|F, U|D|L|R|{\sl degrees})}% + {cct}% + {antenna, without stem for nonblank 2nd arg; arg3 is\\ + {\tt A}: aerial (default),\\ + {\tt L}: loop,\\ + {\tt T}: triangle,\\ + {\tt S}: diamond,\\ + {\tt D}: dipole,\\ + {\tt P}: phased,\\ + {\tt F}: fork;\\ + arg4 specifies Up, Down, Left, Right, or angle from horizontal (default 90) + \seesect{Composite:}}% \macrodef{arca}{arca}{({\sl absolute chord linespec}, ccw|cw, {\sl radius}, - {\sl modifiers}) } - {gen} - {arc with acute angle (obtuse if radius is negative), drawn in a [ ] block} + {\sl modifiers}) }% + {gen}% + {arc with acute angle (obtuse if radius is negative), drawn in a [ ] block}% \macrodef{ArcAngle}{ArcAngle}{({\sl position, position, position, radius, - modifiers, label}) } - {gen} + modifiers, label}) }% + {gen}% {Arc angle symbol drawn ccw at arg2. Arg4 is the radius from arg2; arg5 contains line attributes, e.g., {\tt thick linethick/2 ->}; - arg6 is an optional label at mid-arc} + arg6 is an optional label at mid-arc}% \macrodef{arcd}{arcd}{({\sl center}, - {\sl radius},{\sl start degrees},{\sl end degrees}) } - {gen} + {\sl radius},{\sl start degrees},{\sl end degrees}) }% + {gen}% {Arc definition (see {\tt arcr}), angles in degrees - \seesect{Positions:}} + \seesect{Positions:}}% \macrodef{arcdimension\_}{arcdimension_}{({\sl arcspec},{\sl offset},% {\sl label}, - D|H|W|{\sl blank width},{\sl tic offset},{\sl arrowhead })} - {gen} + D|H|W|{\sl blank width},{\sl tic offset},{\sl arrowhead })}% + {gen}% {like {\tt dimension\_}, for drawing arcs for dimensioning diagrams; {\sl arrowhead=}{\tt -> | <-}. Uses the first argument as the attributes of an invisible arc: {\tt arc invis }{\sl arg1}. {\sl Arg2} is the @@ -146,63 +160,86 @@ {\tt D:} blank width is the diagonal length of {\sl arg3}; {\tt H:} blank width is the height of {\sl arg3} + {\tt textoffset*2}; {\tt W:} blank width is the width of {\sl arg3} + {\tt textoffset*2}; - otherwise {\sl arg4} is the absolute blank width} + otherwise {\sl arg4} is the absolute blank width}% \macrodef{arcr}{arcr}{({\sl center},{\sl radius},{\sl start angle},{\sl - end angle,modifiers,ht}) } - {gen} + end angle,modifiers,ht}) }% + {gen}% {Arc definition. If arg5 contains {\tt <-} or {\tt ->} then a midpoint arrowhead of height equal to arg6 is added. Arg5 can contain modifiers (e.g. outlined "red"), for the arc and arrowhead. Modifiers following the macro affect the arc only, - e.g., {\tt arcr(A,r,0,pi\_/2,->) dotted ->} - \seesect{Positions:}} + e.g., {\tt arcr(A,r,0,pi\_/2,->) dotted ->}% + \seesect{Positions:}}% \macrodef{arcto}{arcto}{({\sl position 1},{\sl position 2},{\sl - radius},[dashed|dotted])} - {gen} - {line toward position 1 with rounded corner toward position 2} + radius},[dashed|dotted])}% + {gen}% + {line toward position 1 with rounded corner toward position 2}% +\macrodef{array}{array}{({\sl variable, expr1, expr2, \ldots})}% + {dpictools}% + {$\;\;$ Populate a singly-subscripted array: + {\tt {\sl var}[1]={\sl expr1;} {\sl var}[2]={\sl expr2;} \ldots}.}% +\macrodef{array2}{array2}{({\sl variable, expr1, expr2, \ldots})}% + {dpictools}% + {$\;\;$ Populate a doubly-subscripted array: + {\tt {\sl var}[{\sl expr1},1]={\sl expr2;}% + {\sl var}[{\sl expr1},2]={\sl expr3;} \ldots}.}% +\macrodef{arraymax}{arraymax}{({\sl data array, n, index name, value})}% + {dpictools}% + {$\;\;$ Find the index in {\sl array[1:n]} of the first occurrence + of the maximum array element value. The value is assigned if arg4 is + nonblank; example: + {\tt array(x,4,9,8,6); arraymax( x,4,i )}% + assigns 2 to {\sl i,} and {\tt arraymax( x,4,i,m )}% + assigns 2 to {\sl i} and 9 to {\sl m.}}% +\macrodef{arraymin}{arraymin}{({\sl data array, n, index name, value})}% + {dpictools}% + {$\;\;$ Find the index in {\sl array[1:n]} of the first occurrence + of the minimum array element value. The value is assigned if arg4 is + nonblank; see {\tt arraymax}.}% \macrodef{arrester}{arrester}{(\linespec,{\sl chars}, {\sl len}[:arrowhead ht], - {\sl ht}[:arrowhead wid] )} - {cct} -{ - {\sl Arg2 chars:} - {\tt G=} spark gap (default), - {\tt g=} general (dots), - {\tt E=} gas discharge, - {\tt S=} box enclosure, - {\tt C=} carbon block, - {\tt A=} electrolytic cell, - {\tt H=} horn gap, - {\tt P=} protective gap, - {\tt s=} sphere gap, - {\tt F=} film element, - {\tt M=} multigap. - {\sl Modifiers in arg2:} - {\tt R=} right orientation, - {\tt L=} left orientation, + {\sl ht}[:arrowhead wid], + {\sl attributes} )}% + {cct}% +{ Arg2 {\sl chars:}\\ + {\tt G=} spark gap (default)\\ + {\tt g=} general (dots)\\ + {\tt E=} gas discharge\\ + {\tt S=} box enclosure\\ + {\tt C=} carbon block\\ + {\tt A=} electrolytic cell\\ + {\tt H=} horn gap\\ + {\tt P=} protective gap\\ + {\tt s=} sphere gap\\ + {\tt F=} film element\\ + {\tt M=} multigap\\ + {\sl Modifiers in arg2:}\\ + {\tt R=} right orientation\\ + {\tt L=} left orientation\\ {\tt D=} 3-terminal element for {\tt S, E} - only, with terminals {\sl A, B, G} - \seesect{Twoterminal:}} -\macrodef{arrowline}{arrowline}{(\linespec)} - {cct} + only, with terminals {\sl A, B, G}\\ + Arg5 applies to options C, E, S + \seesect{Twoterminal:}}% +\macrodef{arrowline}{arrowline}{(\linespec)}% + {cct}% {line (dotted, dashed permissible) with centred arrowhead - \seesect{Twoterminal:}} -\macrodef{assign3}{assign3}{({\sl var name,var name,var name,arg4,arg5,arg6})} - {gen} - {Assigns \$1 = arg4 if \$1 is nonblank; similarly \$2 = arg5 and \$3 = arg6} -\macrodef{AutoGate}{AutoGate}{} - {log} + \seesect{Twoterminal:}}% +\macrodef{assign3}{assign3}{({\sl var name,var name,var name,arg4,arg5,arg6})}% + {gen}% + {Assigns \$1 = arg4 if \$1 is nonblank; similarly \$2 = arg5 and \$3 = arg6}% +\macrodef{AutoGate}{AutoGate}{}% + {log}% {Draw the tree for a gate as in the {\tt Autologix} macro. No inputs or external connections are drawn. The names of the internal gate - inputs are stacked in {\tt `AutoInNames'}} + inputs are stacked in {\tt `AutoInNames'}}% \macrodef{Autologix}{Autologix}% {({\sl Boolean function sequence},% - [N[oconnect]][L[eftinputs]][R][V][M][;offset={\sl value}])} - {log} + [N[oconnect]][L[eftinputs]][R][V][M][;offset={\sl value}])}% + {log}% {Draw the Boolean expressions defined in function notation. The first argument is a semicolon (;)-separated sequence of Boolean function specifications using the functions - {\tt And, Or, Not, Buffer, Xor, Nand, Nor, Nxor} + {\tt And, Or, Not, Buffer, Xor, Nand, Nor, Nxor}% with variables, e.g., {\tt Autologix(And(Or(x1,~x2),Or(~x1,x2)));}. Each function specification is of the form @@ -212,7 +249,7 @@ {\tt@}{\sl attributes} to a function can be used to place it. \par The function arguments are variable names or nested Boolean functions. - Each unique variable {\sl var} causes an input point {\tt In}{\sl var} + Each unique variable {\sl var} causes an input point {\tt In}{\sl var}% to be defined. Preceding the variable by a {\tt \~{}} causes a NOT gate to be drawn at the input. The inputs are drawn in a row at the upper left by default. @@ -227,171 +264,199 @@ Each variable {\sl var} corresponds also to one of the input array points with label {\tt In}{\sl var}. Setting {\tt offset=}{\sl value} displaces the - drawn input list in order to disambiguate the input connections when {\tt L} + drawn input list in order to disambiguate the input connections when {\tt L}% is used. \par In the (possibly rare) case where one or more inputs of a normal function gate is to have a NOT-circle, an additional first argument of the function - is inserted, of the form {\tt [{\sl charseq}]}, where {\sl charseq} + is inserted, of the form {\tt [{\sl charseq}]}, where {\sl charseq}% is a string containing the characters {\tt P} for a normal input or {\tt N} for a negated input, the length of the string equal to the number of gate inputs. For example: - {\tt Autologix(Xor([PN],And(x,y),And(x,y)),LRV)}} + {\tt Autologix(Xor([PN],And(x,y),And(x,y)),LRV)}}% \Letter{B}% -\macrodef{basename\_}{basename_}{({\sl string sequence, separator})} - {gen} +\macrodef{basename\_}{basename_}{({\sl string sequence, separator})}% + {gen}% {Extract the rightmost name from a sequence of names separated by arg2 - (default dot ``.'')} -\macrodef{battery}{battery}{(\linespec,{\sl n},R)} - {cct} + (default dot ``.'')}% +\macrodef{battery}{battery}{(\linespec,{\sl n},R)}% + {cct}% {n-cell battery: default 1 cell, - R=reversed polarity\seesect{Twoterminal:}} -\macrodef{b\_}{b_}{} - {gen} - {blue color value} + R=reversed polarity\seesect{Twoterminal:}}% +\macrodef{b\_}{b_}{}% + {gen}% + {blue color value}% \macrodef{b\_current}{b_current}{({\sl label},{\sl pos},In|Out,Start|End,{\sl - frac})} - {cct} + frac})}% + {cct}% {labelled branch-current arrow to {\sl frac} between branch end and body - \seesect{Branchcurrent:}} -\macrodef{beginshade}{beginshade}{({\sl gray value})} - {gen} - {begin gray shading, see {\tt shade} - e.g., {\tt beginshade(.5);} {\sl closed line specs}; {\tt endshade}} -\macrodef{bell}{bell}{( U|D|L|R|{\sl degrees}, {\sl size})} - {cct} + \seesect{Branchcurrent:}}% +\macrodef{beginshade}{beginshade}{({\sl gray value})}% + {gen}% + {begin gray shading, see {\tt shade}% + e.g., {\tt beginshade(.5);} {\sl closed line specs}; {\tt endshade}}% +\macrodef{bell}{bell}{( U|D|L|R|{\sl degrees}, {\sl size})}% + {cct}% {bell, {\sl In1} to {\sl In3} defined - \seesect{Composite:}} -\macrodef{below\_}{below_}{} - {gen} - {string position relative to current direction} -\macrodef{Between\_}{Between_}{({\sl Pos1, Pos2,distance,}[R])} - {gen} + \seesect{Composite:}}% +\macrodef{below\_}{below_}{}% + {gen}% + {string position relative to current direction}% +\macrodef{Between\_}{Between_}{({\sl Pos1, Pos2,distance,}[R])}% + {gen}% {Position {\sl distance} from {\sl Pos1} toward {\sl Pos2}. If - the fourth arg is {\tt R} then from {\sl Pos2} toward {\sl Pos1}.} -\macrodef{binary\_}{binary_}{($n$, [$m$])} - {gen} + the fourth arg is {\tt R} then from {\sl Pos2} toward {\sl Pos1}.}% +\macrodef{binary\_}{binary_}{($n$, [$m$])}% + {gen}% {binary representation of $n,$ left padded to $m$ digits if the second - argument is nonblank} -\macrodef{bi\_trans}{bi_trans}{(\linespec,L|R,{\sl chars},E)} - {cct} - { bipolar transistor, core left or right; chars: - {\tt BU}=bulk line, - {\tt B}=base line and label, - {\tt S}=Schottky base hooks, - {\tt uEn|dEn}=emitters E0 to En, - {\tt uE|dE}=single emitter, - {\tt Cn|uCn|dCn}=collectors C0 to Cn; {\tt u} or {\tt d} add an arrow, - {\tt C}=single collector; {\tt u} or {\tt d} add an arrow, - {\tt G}=gate line and location, - {\tt H}=gate line; {\tt L}=L-gate line and location, - {\tt [d]D}=named parallel diode, - {\tt d}=dotted connection, - {\tt [u]T}=thyristor trigger line; - arg 4 = E: envelope - \seesect{Semiconductors:}} -\macrodef{bi\_tr}{bi_tr}{(\linespec,L|R,P,E)} - {cct} + argument is nonblank}% +\macrodef{bisect}{bisect}{% + ({\sl function name, left bound, right bound, tolerance, variable}))}% + {dpictools}% + {$\;\;$ Solve $\hbox{\sl function}(x) = 0$ by the method of + bisection. + Like {\tt findroot} but uses recursion and is without a {\tt[]} box. + The calculated value is assigned to the variable named in the + last argument (\SR{Libraries:}). Example:\\ + {\tt define parabola \{ \$2 = (\$1)\char94{}2 - 1 \};\\ + bisect( parabola, 0, 2, 1e-8, x )}. }% +\macrodef{bi\_trans}{bi_trans}{(\linespec,L|R,{\sl chars},E)}% + {cct}% + { bipolar transistor, core left or right; chars:\\ + {\tt BU}: bulk line\\ + {\tt B}: base line and label\\ + {\tt S}: Schottky base hooks\\ + {\tt uEn|dEn}: emitters E0 to En\\ + {\tt uE|dE}: single emitter\\ + {\tt Cn|uCn|dCn}: collectors C0 to Cn; {\tt u} or {\tt d} add an arrow\\ + {\tt C}: single collector; {\tt u} or {\tt d} add an arrow\\ + {\tt G}: gate line and location\\ + {\tt H}: gate line;\\ + {\tt L}: L-gate line and location\\ + {\tt [d]D}: named parallel diode\\ + {\tt d}: dotted connection\\ + {\tt [u]T}: thyristor trigger line\\ + arg 4 = {\tt E}: envelope + \seesect{Semiconductors:}}% +\macrodef{bi\_tr}{bi_tr}{(\linespec,L|R,P,E)}% + {cct}% {left or right, N- or P-type bipolar transistor, without or with envelope - \seesect{Semiconductors:}} + \seesect{Semiconductors:}}% \macrodef{boxcoord}{boxcoord}{({\sl planar obj},{\sl x fraction},{\sl y - fraction})} - {gen} - {internal point in a planar object} -\macrodef{boxdim}{boxdim}{({\sl name},h|w|d|v,{\sl default})} - {gen} - {evaluate, e.g.\ {\sl name}{\tt \_w} if defined, else {\sl default\/} + fraction})}% + {gen}% + {internal point in a planar object}% +\macrodef{boxdim}{boxdim}{({\sl name},h|w|d|v,{\sl default})}% + {gen}% + {evaluate, e.g.\ {\sl name}{\tt \_w} if defined, else {\sl default\/}% if given, else 0 {\tt v} gives sum of {\tt d} and {\tt h} values - \seesect{Interaction:}} -\macrodef{BOX\_gate}{BOX_gate}{({\sl inputs,output,swid,sht,label})} - {log} + \seesect{Interaction:}}% +\macrodef{BOX\_gate}{BOX_gate}{({\sl inputs, output, swid, sht, label, + attributes })}% + {log}% {output=[{\tt P|N}], inputs=[{\tt P|N}]$\ldots$, sizes swid and sht in {\tt L\_unit}s (default {\tt AND\_wd} = 7) - \seesect{Logicgates:}} -\macrodef{bp\_\_}{bp__}{} - {gen} - {big-point-size factor, in scaled inches, ({\tt *scale/72})} -\macrodef{bswitch}{bswitch}{(\linespec, [L|R],chars)} - {cct} + \seesect{Logicgates:}}% +\macrodef{bp\_\_}{bp__}{}% + {gen}% + {big-point-size factor, in scaled inches, ({\tt *scale/72})}% +\macrodef{bswitch}{bswitch}{(\linespec, [L|R],chars)}% + {cct}% {pushbutton switch R=right orientation (default L=left); - chars: O= normally open, C=normally closed } + chars: O= normally open, C=normally closed }% \macrodef{BUFFER\_gate}{BUFFER_gate}{(\linespec, [N|B], - {\sl wid, ht,} [N|P]\char42, [N|P]\char42, [N|P]\char42)} - {log} - {basic buffer, dfault 1 input or as a 2-terminal element, - arg2: {\tt N}=negated input, {\tt B}=box gate; arg 5: - normal ({\tt P}) or negated {\tt N}) inputs labeled In1 - \seesect{Logicgates:}} -\macrodef{BUFFER\_gen}{BUFFER_gen}{({\sl chars,wd,ht},[N|P]*,[N|P]*,[N|P]*)} - {log} - {general buffer, {\sl chars:} {\tt T}=triangle, - {\tt [N]O}=output location {\tt Out} - ({\tt NO} draws circle {\tt N\_Out}); - {\tt [N]I, [N]N, [N]S, [N]NE, [N]SE} - input locations; {\tt C}=centre location. + {\sl wid, ht,} [N|P]\char42, [N|P]\char42, [N|P]\char42, + {\sl attributes})}% + {log}% + {basic buffer, dfault 1 input or as a 2-terminal element,\\ + arg2: {\tt N}: negated input, {\tt B}: box gate;\\ + arg 5: normal ({\tt P}) or negated {\tt N}) inputs labeled In1 + \seesect{Logicgates:}}% +\macrodef{BUFFER\_gen}{BUFFER_gen}{({\sl chars,wd,ht},[N|P]*,[N|P]*,[N|P]*, + {\sl attributes})}% + {log}% + {general buffer, {\sl chars:}\\ + {\tt T}: triangle,\\ + {\tt [N]O}: output location {\tt Out}% + ({\tt NO} draws circle {\tt N\_Out});\\ + {\tt [N]I, [N]N, [N]S, [N]NE, [N]SE} input locations;\\ + {\tt C}: centre location.\\ Args 4-6 allow alternative - definitions of respective {\tt In, NE,} - and {\tt SE} argument sequences } -\macrodef{BUF\_ht}{BUF_ht}{} - {log} - {basic buffer gate height in {\tt L\_unit}s} -\macrodef{BUF\_wd}{BUF_wd}{} - {log} - {basic buffer gate width in {\tt L\_unit}s} -\macrodef{buzzer}{buzzer}{( U|D|L|R|{\sl degrees, size,}[C])} - {cct} + definitions of respective {\tt In, NE,}% + and {\tt SE} argument sequences }% +\macrodef{BUF\_ht}{BUF_ht}{}% + {log}% + {basic buffer gate height in {\tt L\_unit}s}% +\macrodef{BUF\_wd}{BUF_wd}{}% + {log}% + {basic buffer gate width in {\tt L\_unit}s}% +\macrodef{buzzer}{buzzer}{( U|D|L|R|{\sl degrees, size,}[C])}% + {cct}% {buzzer, {\sl In1} to {\sl In3} defined, C=curved - \seesect{Composite:}} + \seesect{Composite:}}% \Letter{C}% +\macrodef{cangle}{cangle}{({\sl Start, End},[d])}% + {gen}% + {Angle in radians of the sector at arg2 with arm ends given + by arg1 and arg3 (degrees if arg4=d).}% \macrodef{capacitor}{capacitor}{(\linespec,{\sl chars},R, - {\sl height}, {\sl wid})} - {cct} - {capacitor, {\sl chars}: - F or blank=flat plate; - dF flat plate with hatched fill; - C=curved-plate; - dC=curved-plate with variability arrowhead; - CP=constant phase element; - E=polarized boxed plates; - K=filled boxed plates; - M=unfilled boxes; - M=one rectangular plate; - P=alternate polarized; - + adds a polarity sign; - +L polarity sign to the left of drawing direction; - arg3: R=reversed polarity; - arg4 = height (defaults F: {\tt dimen\_}$/3$, - C,P: {\tt dimen\_}$/4$, E,K: {\tt dimen\_}$/5$); - arg5 = wid (defaults F: {\sl height}*0.3, - C,P: {\sl height}*0.4, CP: {\sl height}*0.8, E,K: {\sl height}) - \seesect{Twoterminal:}} -\macrodef{cbreaker}{cbreaker}{(\linespec, L|R, D|Th|TS, body name)} - {cct} - {circuit breaker to left or right, {\tt D}=with dots; {\tt Th}=thermal; - {\tt TS}=squared thermal; default body bounding box name is - {\sl Br}\seesect{Twoterminal:}} -\macrodef{ccoax}{ccoax}{(at {\sl location}, M|F, {\sl diameter})} - {cct} - {coax connector, {\tt M}=male, {\tt F}=female - \seesect{Composite:}} -\macrodef{cct\_init}{cct_init}{} - {cct} - {initialize circuit-diagram environment (reads {\tt libcct.m4})} + {\sl height}, {\sl wid})}% + {cct}% + {capacitor, {\sl chars}:\\ + {\tt F} or blank: flat plate\\ + {\tt dF} flat plate with hatched fill\\ + {\tt C} curved-plate\\ + {\tt dC} curved-plate with variability arrowhead\\ + {\tt CP} constant phase element\\ + {\tt E} polarized boxed plates\\ + {\tt K} filled boxed plates\\ + {\tt M} unfilled boxes\\ + {\tt N} one rectangular plate\\ + {\tt P} alternate polarized\\ + {\tt +} adds a polarity sign\\ + {\tt +L} polarity sign to the left of drawing direction\\ + arg3: {\tt R=}reversed polarity\\ + arg4: height (defaults {\tt F:} {\tt dimen\_}$/3$, + {\tt C,P:} {\tt dimen\_}$/4$, + {\tt E,K:} {\tt dimen\_}$/5$)\\ + arg5: wid (defaults {\tt F:} {\sl height}*0.3, + {\tt C,P:} {\sl height}*0.4, + {\tt CP:} {\sl height}*0.8, + {\tt E,K:} {\sl height}) + \seesect{Twoterminal:}}% +\macrodef{case}{case}{({\sl i, alt1, alt2, \ldots})}% + {dpictools}% + {$\;\;$ Case statement for dpic; execute alternative {\sl i.}% + Example: {\tt case( 2, x=5, x=10, x=15 )} sets {\tt x} to 10. + Note: this is a macro so {\tt \${}n} refers to the {\sl n}-th + argument of {\tt case}.}% +\macrodef{cbreaker}{cbreaker}{(\linespec, L|R, D|Th|TS, body name)}% + {cct}% + {circuit breaker to left or right, {\tt D}: with dots; {\tt Th}: thermal; + {\tt TS}: squared thermal; default body bounding box name is + {\sl Br}\seesect{Twoterminal:}}% +\macrodef{ccoax}{ccoax}{(at {\sl location}, M|F, {\sl diameter, attributes})}% + {cct}% + {coax connector, {\tt M}: male, {\tt F}: female + \seesect{Composite:}}% +\macrodef{cct\_init}{cct_init}{}% + {cct}% + {initialize circuit-diagram environment (reads {\tt libcct.m4})}% \macrodef{centerline\_}{centerline_}{({\sl linespec, thickness{\tt|}color, - minimum long dash len, short dash len, gap len}} - {gen} - {Technical drawing centerline} -\macrodef{c\_fet}{c_fet}{(\linespec,R,P)} - {cct} - {left or right, plain or negated pin simplified MOSFET} -\macrodef{Cintersect}{Cintersect}{({\sl Pos1, Pos2, rad1, rad2,} [R])} - {gen} + minimum long dash len, short dash len, gap len}}% + {gen}% + {Technical drawing centerline}% +\macrodef{c\_fet}{c_fet}{(\linespec,R,P)}% + {cct}% + {left or right, plain or negated pin simplified MOSFET}% +\macrodef{Cintersect}{Cintersect}{({\sl Pos1, Pos2, rad1, rad2,} [R])}% + {gen}% {Upper (lower if arg5={\tt R}) intersection of circles at - {\sl Pos1} and {\sl Pos2}, radius {\sl rad1} and {\sl rad2}} + {\sl Pos1} and {\sl Pos2}, radius {\sl rad1} and {\sl rad2}}% \macrodef{clabel}{clabel}{({\sl label},{\sl label},{\sl label},[{\sl arg4}],% - [{\sl block name}])} - {cct} + [{\sl block name}])}% + {cct}% {Triple label along the drawing axis of the body of an element in the current direction \seesect{Labels:}. Labels are placed at the beginning, centre, and end of the last {\tt []} block (or a named @@ -400,43 +465,67 @@ {\sl Arg4} can be {\tt above,} {\tt below,} {\tt left,} or {\tt right} to supplement the default relative position. The fifth argument is the optional name of the {\tt []} block to be labelled, - which is {\tt last []} by default.} -\macrodef{cm\_\_}{cm__}{} - {gen} - {absolute centimetres} -\macrodef{consource}{consource}{(\linespec,V|I|v|i,R)} - {cct} + which is {\tt last []} by default.}% +\macrodef{cm\_\_}{cm__}{}% + {gen}% + {absolute centimetres}% +\macrodef{cmyktorgb}{cmyktorgb}{({\sl c, m, y, k, r, g, b})}% + {dpictools}% + {$\;\;$ cmyk values in percent, i.e., 0 to 100, to rgb.}% +\macrodef{consource}{consource}{(\linespec,V|I|v|i,R,{\sl attributes})}% + {cct}% {voltage or current controlled source with alternate forms; - {\tt R}=reversed polarity\seesect{Twoterminal:}} -\macrodef{contact}{contact}{({\sl chars})} - {cct} + {\tt R}: reversed polarity\seesect{Twoterminal:}}% +\macrodef{ColoredV}{ColoredV}{% + (box|circle|ellipse,({\sl r,g,b})|(({\sl colorseq})),{\sl attributes})}% + {gen}% + {box (default), circle, or ellipse in a {\tt []} block. + If arg2 is blank then all formatting is in arg3. If arg2 is blank + then all formatting is in arg3; if parenthesized r,g,b, the object + is shaded top to bottom white to the specified rgb color; if a + double-parenthesized colorseq then the colorseq defines the internal + shading top to bottom. A {\sl colorseq} is of the form + 0, r0,g0,b0, {\sl frac1},r1,g1,b1, {\sl frac2},r2,g2,b2, + \ldots 1,rn,gn,bn with $0 < \hbox{\sl frac1} < \hbox{\sl frac2} \ldots 1$. + Examples: {\tt ColoredV(circle,(1,0,0)); + ColoredV(ellipse,(1,0.04,1),wid 0.75 ht 1 outlined "magenta" "Goodbye"); + ColoredV(box,(1,0,0),outlined "blue" rad 0.1, (0,1,1,0, 1,0,0,1)).} }% +\macrodef{contact}{contact}{({\sl chars})}% + {cct}% {single-pole contact: - {\tt O}= normally open, - {\tt C}= normally closed (default), - {\tt I}= open circle contacts, - {\tt P}= three position, - {\tt R}= right orientation, - {\tt T}= T contacts, - {\tt U}= U contacts - \seesect{Composite:}} -\macrodef{contacts}{contacts}{({\sl count, chars})} - {cct} + {\tt O}: normally open\\ + {\tt C}: normally closed (default)\\ + {\tt I}: open circle contacts\\ + {\tt P}: three position\\ + {\tt R}: right orientation\\ + {\tt T}: T contacts\\ + {\tt U}: U contacts + \seesect{Composite:}}% +\macrodef{contacts}{contacts}{({\sl count, chars})}% + {cct}% {multiple ganged single-pole contacts: - {\tt P}= three position, - {\tt O}= normally open, - {\tt C}= normally closed, - {\tt D}= dashed ganging line over contact armatures - {\tt I}= open circle contacts, - {\tt R}= right orientation, - {\tt T}= T contacts, - {\tt U}= U contact lines parallel to drawing direction - \seesect{Composite:}} -\macrodef{contline}{contline}{({\sl line})} - {gen} - {evaluates to {\tt continue} - if processor is {\bf dpic}, otherwise to first arg (default {\tt line})} -\macrodef{corner}{corner}{({\sl line thickness,attributes,turn radians})} - {gen} + {\tt P}: three position\\ + {\tt O}: normally open\\ + {\tt C}: normally closed\\ + {\tt D}: dashed ganging line over contact armatures + {\tt I}: open circle contacts\\ + {\tt R}: right orientation\\ + {\tt T}: T contacts\\ + {\tt U}: U contact lines parallel to drawing direction + \seesect{Composite:}}% +\macrodef{contline}{contline}{({\sl line})}% + {gen}% + {evaluates to {\tt continue}% + if processor is {\bf dpic}, otherwise to first arg (default {\tt line})}% +\macrodef{copy3}{copy3}{({\sl vector1,vector2})}% + {dpictools}% + {$\;\;$ Copy vector1 into vector named by arg2.}% +\macrodef{copythru}{copythru}{({\sl dpic macro name,} "{\sl file name}")}% + {dpictools}% + {$\;\;$ Implements the gpic {\tt copy {\sl filename} thru {\sl macro-name}}% + for file data separated by commas, spaces, or tabs.}% +\macrodef{corner}{corner}{({\sl line thickness,attributes,turn radians})}% + {gen}% { Mitre (default filled square) drawn at end of last line or at a given position. arg1 default: current line thickness; @@ -445,354 +534,445 @@ is drawn; arg3= radians (turn angle, +ve is ccw, default $\pi/2$). The corner is enclosed in braces - in order to leave {\tt Here} unchanged unless arg2 begins with {\tt at} - \seesect{Corners:}} -\macrodef{Cos}{Cos}{({\sl integer})} - {gen} - {cosine function, {\sl integer\/} degrees} -\macrodef{cosd}{cosd}{({\sl arg})} - {gen} - {cosine of an expression in degrees} + in order to leave {\tt Here} unchanged unless arg2 begins with {\tt at}% + \seesect{Corners:}}% +\macrodef{Cos}{Cos}{({\sl integer})}% + {gen}% + {cosine function, {\sl integer\/} degrees}% +\macrodef{cosd}{cosd}{({\sl arg})}% + {gen}% + {cosine of an expression in degrees}% \macrodef{Cosine}{Cosine}{( {\sl amplitude}, {\sl freq}, {\sl time}, - {\sl phase} )} - {gen} - {function $a\times\cos(\omega t + \phi)$ } -\macrodef{cross3D}{cross3D}{({\sl x1,y1,z1,x2,y2,z2})} - {3D} - {cross product of two triples} -\macrodef{cross}{cross}{(at {\sl location, size}|{\sl keys})} - {gen} + {\sl phase} )}% + {gen}% + {function $a\times\cos(\omega t + \phi)$ }% +\macrodef{cross3}{cross3}{({\sl vec1, vec2, vec3})}% + {dpictools}% + {$\;\;$ The 3-vector cross product + $\hbox{\sl vec3} = \hbox{\sl vec1} \times \hbox{\sl vec2}$.}% +\macrodef{cross3D}{cross3D}{({\sl x1,y1,z1,x2,y2,z2})}% + {3D}% + {cross product of two triples}% +\macrodef{cross}{cross}{(at {\sl location, size}|{\sl keys})}% + {gen}% {Plots a small cross. The possible key-value pairs are: {\tt size={\sl expr};}, - {\tt line={\sl attributes};} } + {\tt line={\sl attributes};} }% \macrodef{crossover}{crossover}{(\linespec, [L|R][:{\sl line attributes}], - Line1, Line2, .{.}.)} - {cct} - {line jumping left or right over ordered named lines\seesect{Semiconductors:}} -\macrodef{crosswd\_}{crosswd_}{} - {gen} - {cross dimension} -\macrodef{csdim\_}{csdim_}{} - {cct} - {controlled-source width} + Line1, Line2, .{.}.)}% + {cct}% + {line jumping left or right over ordered named lines\seesect{Semiconductors:}}% +\macrodef{crosswd\_}{crosswd_}{}% + {gen}% + {cross dimension}% +\macrodef{csdim\_}{csdim_}{}% + {cct}% + {controlled-source width}% \Letter{D}% -\macrodef{dabove}{dabove}{(at {\sl location})} - {darrow} - {above (displaced dlinewid/2)} -\macrodef{dac}{dac}{({\sl width,height,nIn,nN,nOut,nS})} - {cct} +\macrodef{dabove}{dabove}{(at {\sl location})}% + {darrow}% + {above (displaced dlinewid/2)}% +\macrodef{dac}{dac}{({\sl width,height,nIn,nN,nOut,nS})}% + {cct}% {DAC with defined width, height, and number of inputs {\tt In$i$}, top terminals {\tt N$i$}, ouputs {\tt Out$i$}, - and bottom terminals~{\tt S$i$} \seesect{Logicgates:}} + and bottom terminals~{\tt S$i$} \seesect{Logicgates:}}% \macrodef{Darc}{Darc}{({\sl center position}, {\sl radius}, {\sl start radians}, {\sl end radians}, - {\sl parameters})} - {darrow} + {\sl parameters})}% + {darrow}% {Wrapper for {\tt darc}. CCW arc in {\tt dline} style, with closed ends or (dpic only) arrowheads. Semicolon-separated {\sl parameters}: - {\tt thick=}{\sl value}, {\tt wid=}{\sl value}, {\tt ends=} + {\tt thick=}{\sl value}, {\tt wid=}{\sl value}, {\tt ends=}% {\sl x}{\tt -}, {\tt -}{\sl x}, {\sl x}{\tt -}{\sl x}, {\tt ->}, {\sl x}{\tt ->}, - {\tt <-}, {\tt <-}{\sl x}, {\tt <->} - where {\sl x} means {\tt |} or (half-thickness line) {\tt !}.} + {\tt <-}, {\tt <-}{\sl x}, {\tt <->}% + where {\sl x} means {\tt |} or (half-thickness line) {\tt !}.}% \macrodef{darc}{darc}{({\sl center position}, {\sl radius}, {\sl start radians}, {\sl end radians}, {\sl dline thickness}, {\sl arrowhead wid}, {\sl arrowhead ht}, - {\sl end symbols}, {\sl outline attributes}, {\sl inner attributes})} - {darrow} + {\sl end symbols}, {\sl outline attributes}, {\sl inner attributes})}% + {darrow}% {See also {\tt Darc}. CCW arc in {\tt dline} style, with closed ends or (dpic only) arrowheads. Permissible {\sl end symbols}: {\sl x}{\tt -}, {\tt -}{\sl x}, {\sl x}{\tt -}{\sl x}, {\tt ->}, {\sl x}{\tt ->}, - {\tt <-}, {\tt <-}{\sl x}, {\tt <->} + {\tt <-}, {\tt <-}{\sl x}, {\tt <->}% where {\sl x} means {\tt |} or (half-thickness line) {\tt !}. An inner arc is drawn overlaying the outer arc. - Example: {\tt darc(,{,},{,},{,},{,}outlined "red",outlined "yellow")}.} -\macrodef{Darlington}{Darlington}{(L|R,{\sl chars})} - {cct} + Example: {\tt darc(,{,},{,},{,},{,}outlined "red",outlined "yellow")}.}% +\macrodef{Darlington}{Darlington}{(L|R,{\sl chars})}% + {cct}% {Composite Darlington pair Q1 and Q2 with internal locations E, B, C; - Characters in {\sl arg2:} - E= envelope, - P= P-type, - B1= internal base lead, - D= damper diode, - R1= Q1 bias resistor; E1= ebox, - R2= Q2 bias resistor; E1= ebox, + Characters in {\sl arg2:}\\ + E= envelope\\ + P= P-type\\ + B1= internal base lead\\ + D= damper diode\\ + R1= Q1 bias resistor; E1= ebox\\ + R2= Q2 bias resistor; E1= ebox\\ Z= zener bias diode - \seesect{Semiconductors:}} + \seesect{Semiconductors:}}% \macrodef{darrow}{darrow}{(\linespec, t,t,{\sl width},{\sl arrowhd wd},{\sl arrowhd ht},{\sl parameters}, - {\sl color attributes})} - {darrow} + {\sl color attributes})}% + {darrow}% {See also {\tt Darrow}. Double arrow, truncated at beginning (arg2={\tt t}) or end (arg3={\tt t}), specified sizes, with arrowhead and optional closed stem. The parameters (arg7) are - {\tt {\sl x}-} or {\tt ->} or {\tt {\sl x}->} or {\tt <-} or {\tt <-{\sl x}} + {\tt {\sl x}-} or {\tt ->} or {\tt {\sl x}->} or {\tt <-} or {\tt <-{\sl x}}% or {\tt <->} where {\sl x} is {\tt |} or {\tt !}. The {\tt !-} or {\tt -!} parameters close the stem with half-thickness lines to simplify butting to other objects. The color attributes are, e.g., {\tt outlined "{\sl color}" shaded "{\sl color}"}. Example: - {\tt linethick=5; darrow(down\_\ 2,{,},0.5,0.75,0.75,|,outlined "red")}. } -\macrodef{Darrow}{Darrow}{(\linespec, {\sl parameters})} - {darrow} + {\tt linethick=5; darrow(down\_\ 2,{,},0.5,0.75,0.75,|,outlined "red")}. }% +\macrodef{Darrow}{Darrow}{(\linespec, {\sl parameters})}% + {darrow}% {Wrapper for {\tt darrow}. - Semicolon-separated {\sl parameters}: - {\tt S;}, {\tt E;} truncate at start or end by dline thickness/2; - {\tt thick=}{\sl val}; (total thicknes, ie width); - {\tt wid=}{\sl val}; (arrowhead width); - {\tt ht=}{\sl val}; (arrowhead height); - {\tt ends=} + Semicolon-separated {\sl parameters}:\\ + {\tt S;}, {\tt E;} truncate at start or end by dline thickness/2\\ + {\tt thick=}{\sl val}; (total thicknes, ie width)\\ + {\tt wid=}{\sl val}; (arrowhead width)\\ + {\tt ht=}{\sl val}; (arrowhead height)\\ + {\tt ends=}% {\sl x}{\tt -}{\sl x} or {\tt -}{\sl x} or {\sl x}{\tt -} where {\sl x} is {\tt !} (half-width line) - or {\tt |} (full-width line). + or {\tt |} (full-width line).\\ Examples: {\tt define(`dfillcolor',`1,0.85,0') linethick=5; rgbdraw(1,0,0,Darrow(down\_\ 2,thick=0.5; wid=0.75; ht=0.75; ends=|->))}, which is equivalent to {\tt Darrow(down\_\ 2,thick=0.5; wid=0.75; ht=0.75; \ - ends=|->; outline="red")}. } -\macrodef{darrow\_init}{darrow_init}{} - {darrow} - {Initialize darrow drawing parameters (reads library file {\tt darrow.m4})} + ends=|->; outline="red")}. }% +\macrodef{darrow\_init}{darrow_init}{}% + {darrow}% + {Initialize darrow drawing parameters (reads library file {\tt darrow.m4})}% \macrodef{dashline}{dashline}{(\linespec,{\sl thickness}|{\sl color}|<->, - {\sl dash len, gap len},G)} - {gen} - {dashed line with dash at end ({\tt G} ends with gap)} -\macrodef{dbelow}{dbelow}{(at {\sl location})} - {darrow} - {below (displaced dlinewid/2)} -\macrodef{dcosine3D}{dcosine3D}{({\sl i,x,y,z})} - {3D} - {extract i-th entry of triple x,y,z} -\macrodef{DCsymbol}{DCsymbol}{(at {\sl position, len, ht,} - U|D|L|R|{\sl degrees}) } - {cct} + {\sl dash len, gap len},G)}% + {gen}% + {dashed line with dash at end ({\tt G} ends with gap)}% +\macrodef{dbelow}{dbelow}{(at {\sl location})}% + {darrow}% + {below (displaced dlinewid/2)}% +\macrodef{dcosine3D}{dcosine3D}{({\sl i,x,y,z})}% + {3D}% + {extract i-th entry of triple x,y,z}% +\macrodef{DCsymbol}{DCsymbol}{(at {\sl position, len, ht,}% + U|D|L|R|{\sl degrees}) }% + {cct}% {A DC symbol (a dashed line below a solid line). The current drawing direction is default, otherwise Up, Down, Left, Right, or at {\sl degrees} slant; e.g., - {\tt source(up\_ dimen\_); $\lbrace$ DCsymbol(at last [],{},{},R) $\rbrace$} - \seesect{Twoterminal:} } -\macrodef{delay}{delay}{(\linespec,{\sl size})} - {cct} - {delay element\seesect{Twoterminal:}} -\macrodef{delay\_rad\_}{delay_rad_}{} - {cct} - {delay radius} -\macrodef{deleminit\_}{deleminit_}{} - {darrow} - {sets drawing direction for dlines} + {\tt source(up\_ dimen\_); $\lbrace$ DCsymbol(at last [],{},{},R) $\rbrace$}% + \seesect{Twoterminal:} }% +\macrodef{DefineCMYKColor}{DefineCMYKColor}{({\sl color-name, c, m, y, k})}% + {dpictools}% + {$\;\;$ Like {\tt DefineRGBColor} but takes arguments in percent, i.e., + the range $[0,100].$ Define dpic macro {\sl colorname}% + according to the postprocessor specified by dpic command-line option. + The macro evaluates to a string.}% +\macrodef{DefineHSVColor}{DefineHSVColor}{({\sl color-name, h, s, v})}% + {dpictools}% + {$\;\;$ Like {\tt DefineRGBColor} but takes argument {\sl h} in the + range $[0,360],$ {\sl s} in $[0,1],$ and {\sl v} in $[0,1].$ + Define dpic macro {\sl colorname}% + according to the postprocessor specified by dpic command-line option. + The macro evaluates to a string.}% +\macrodef{DefineRGBColor}{DefineRGBColor}{({\sl color-name, r, g, b})}% + {dpictools}% + {$\;\;$ Arguments are in the range 0 to 1. Define dpic macro {\sl colorname}% + according to the postprocessor specified by dpic command-line option. + The macro evaluates to a string.}% +\macrodef{definergbcolor}{definergbcolor}{({\sl color-name, r, g, b})}% + {gen}% + {Arguments are in the range 0 to 1. Define color name + according to the postprocessor. Similar to dpictools {\tt DefineRGBColor}% + but the color name is an m4 macro, not a string.}% +\macrodef{delay}{delay}{(\linespec,{\sl size},{\sl attributes})}% + {cct}% + {delay element\seesect{Twoterminal:}}% +\macrodef{delay\_rad\_}{delay_rad_}{}% + {cct}% + {delay radius}% +\macrodef{deleminit\_}{deleminit_}{}% + {darrow}% + {sets drawing direction for dlines}% \macrodef{Deltasymbol}{Deltasymbol}{(at {\sl position},keys, - U|D|L|R|{\sl degrees}) (default {\tt U} for up)} - {cct} + U|D|L|R|{\sl degrees}) (default {\tt U} for up)}% + {cct}% {Delta symbol for power-system diagrams. - {\sl keys:} {\tt size={\sl expression;}} + {\sl keys:} {\tt size={\sl expression;}}% {\tt type=C|O} (default {\tt C} for closed; - {\tt O} draws an ``open'' symbol); } + {\tt O} draws an ``open'' symbol); }% \macrodef{Demux}{Demux}{({\sl n},{\sl label}, {\tt [L][B|H|X][N[{\sl n}]|S[{\sl n}]][[N]OE], - {\sl wid},{\sl ht}})} - {log} - {binary multiplexer, $n$ inputs, - {\tt L} reverses input pin numbers, - {\tt B} displays binary pin numbers, - {\tt H} displays hexadecimal pin numbers, - {\tt X} do not print pin numbers, + {\sl wid},{\sl ht},{\sl attributes}})}% + {log}% + {binary demultiplexer, $n$ inputs\\ + {\tt L} reverses input pin numbers\\ + {\tt B} displays binary pin numbers\\ + {\tt H} displays hexadecimal pin numbers\\ + {\tt X} do not print pin numbers\\ {\tt N[{\sl n}]} puts Sel or Sel$0$ .. Sel$n$ at the top - (i.e., to the left of the drawing direction), + (i.e., to the left of the drawing direction)\\ {\tt S[{\sl n}]} puts the Sel inputs at the bottom (default) {\tt OE} ({\tt N=}negated) {\tt OE} pin - \seesect{Logicgates:}} + \seesect{Logicgates:}}% \macrodef{dend}{dend}{(at {\sl location}, - {\sl line thickness}{\tt |}{\sl attributes})} - {darrow} - {Close (or start) double line (Note specifying {\tt dends=} for {\tt Dline} + {\sl line thickness}{\tt |}{\sl attributes})}% + {darrow}% + {Close (or start) double line (Note specifying {\tt dends=} for {\tt Dline}% is a similar function. Arg2 is dline thickness or atributes: {\tt thick={\sl expression};} (dline thickness in drawing units) - {\tt outline=({\sl r,g,b})|"{\sl color}";}} -\macrodef{d\_fet}{d_fet}{(\linespec,R,P,E|S)} - {cct} + {\tt outline=({\sl r,g,b})|"{\sl color}";}}% +\macrodef{d\_fet}{d_fet}{(\linespec,R,P,E|S)}% + {cct}% {left or right, N or P depletion MOSFET, envelope or simplified - \seesect{Semiconductors:}} -\macrodef{dfillcolor}{dfillcolor}{} - {darrow} - {dline fill color (default white)} -\macrodef{diff3D}{diff3D}{({\sl x1,y1,z1,x2,y2,z2})} - {3D} - {difference of two triples} -\macrodef{diff\_}{diff_}{({\sl a},{\sl b})} - {gen} - {difference function} -\macrodef{dimen\_}{dimen_}{} - {cct} - {size parameter for scaling circuit element bodies \seesect{Circuitscaling:}} + \seesect{Semiconductors:}}% +\macrodef{dfillcolor}{dfillcolor}{}% + {darrow}% + {dline fill color (default white)}% +\macrodef{diff3}{diff3}{({\sl vec1, vec2, vec3})}% + {dpictools}% + {$\;\;$ The 3-vector subtraction + $\hbox{\sl vec3} = \hbox{\sl vec1} - \hbox{\sl vec2}$.}% +\macrodef{dfitcurve}{dfitcurve}{({\sl Name, n, linetype, m})}% + {dpictools}% + {$\;\;$ Draw a spline through {\sl Name}{\tt [m],} \ldots {\sl Name}{\tt [n]}% + with attribute {\sl linetype} {\tt dotted,} for example. + The calculated control points {\sl P[i]} satisfy approximately: + {\sl P[0] = V[0];} {\sl P[i-1]/8 + P[i]*3/4 + P[i+1]/8 = V[i];}% + {\sl P[n] = V[n].} See m4 macro {\tt fitcurve.}}% +\macrodef{dfitpoints}{dfitpoints}{({\sl V,n,m,P,mp})}% + {dpictools}% + {$\;\;$ Compute the control locations {\tt P[mP], P[mP+1]...} for + the spline passing throught points {\tt V[m]...V[n].} Used by + macro {\tt dfitcurve}.}% +\macrodef{diff3D}{diff3D}{({\sl x1,y1,z1,x2,y2,z2})}% + {3D}% + {difference of two triples}% +\macrodef{diff\_}{diff_}{({\sl a},{\sl b})}% + {gen}% + {difference function}% +\macrodef{dimen\_}{dimen_}{}% + {cct}% + {size parameter for scaling circuit element bodies \seesect{Circuitscaling:}}% \macrodef{dimension\_}{dimension_}{(\linespec,{\sl offset},{\sl label}, - D|H|W|{\sl blank width},{\sl tic offset},{\sl arrowhead })} - {gen} + D|H|W|{\sl blank width},{\sl tic offset},{\sl arrowhead })}% + {gen}% {macro for dimensioning diagrams; - {\sl arrowhead=}{\tt -> | <-}} + {\sl arrowhead=}{\tt -> | <-}}% \macrodef{diode}{diode}{(\linespec,% B|b|CR|D|G|L|LE[R]|P[R]|S|Sh|T|U|V|v|w|Z|chars,% -[R][E])} - {cct} +[R][E])}% + {cct}% {diode: - {\tt B}=bi-directional, - {\tt b}=bi-directional with outlined zener crossbar, - {\tt CR}=current regulator, - {\tt D}=diac, - {\tt G}=Gunn, - {\tt L}=open form with centre line, - {\tt LE[R]}=LED [right], - {\tt P[R]}=photodiode [right], - {\tt S}=Schottky, - {\tt Sh}=Shockley, - {\tt T}=tunnel, - {\tt U}=limiting, - {\tt V}=varicap, - {\tt v}=varicap (curved plate), - {\tt w}=varicap (reversed polarity), - {\tt Z}=zener; + {\tt B}: bi-directional\\ + {\tt b}: bi-directional with outlined zener crossbar\\ + {\tt CR}: current regulator\\ + {\tt D}: diac\\ + {\tt G}: Gunn\\ + {\tt L}: open form with centre line\\ + {\tt LE[R]}: LED [right]\\ + {\tt P[R]}: photodiode [right]\\ + {\tt S}: Schottky\\ + {\tt Sh}: Shockley\\ + {\tt T}: tunnel\\ + {\tt U}: limiting\\ + {\tt V}: varicap\\ + {\tt v}: varicap (curved plate)\\ + {\tt w}: varicap (reversed polarity)\\ + {\tt Z}: zener\\ appending {\tt K} to arg 2 draws open arrowheads; - arg 3: {\tt R}=reversed polarity, {\tt E}=enclosure \seesect{Twoterminal:}} + arg 3: {\tt R}: reversed polarity, {\tt E}: enclosure \seesect{Twoterminal:}}% %\macrodef{DIP}{DIP}{({\sl pin count, attributes})}% -% {log} +% {log}% % {Dual in-line package diagram. Default pin count = 8. % Arg2 ({\sl attributes})= semicolon-separated list of optional terms: -% {\tt bodywid=}{\sl expr} (default 0.25$\,$in${}={}$5{\tt *L\_unit}), +% {\tt bodywid=}{\sl expr} (default 0.25$\,$in${} {}$5{\tt *L\_unit}), % {\tt bodylen=}{\sl expr} (default {\sl pin count} $\times$ {\sl pin pitch}), % {\tt pinpitch=}{\sl expr} (default 0.1), % {\tt pinwid=}{\sl expr} (default 0.06), % {\tt pinlen=}{\sl expr} (default 0.05), % {\tt direct=U|D|L|R} (default {\tt U} for up), % {\tt type=I|Q} (default {\tt I}; Q=pins of alternating length) -% \seesect{Logicgates:}} -\macrodef{dir\_}{dir_}{} - {darrow} - {used for temporary storage of direction by darrow macros} -\macrodef{distance}{distance_}{({\sl Position 1}, {\sl Position2})} - {gen} - {distance between named positions} -\macrodef{distance}{distance}{({\sl position}, {\sl position})} - {gen} - {distance between positions} +% \seesect{Logicgates:}}% +\macrodef{dir\_}{dir_}{}% + {darrow}% + {used for temporary storage of direction by darrow macros}% +\macrodef{distance}{distance_}{({\sl Position 1}, {\sl Position2})}% + {gen}% + {distance between named positions}% +\macrodef{distance}{distance}{({\sl position}, {\sl position})}% + {gen}% + {distance between positions}% \macrodef{dlabel}{dlabel}{({\sl long},{\sl lat},{\sl label},{\sl - label},{\sl label},{\sl chars})} - {cct} - {general triple label; {\sl chars:} - $x$ (drawing direction) displacement is from the centre of the last + label},{\sl label},{\sl chars})}% + {cct}% + {general triple label; {\sl chars:}% + $X$ displacement {\tt {\sl long, lat}} with respect to the drawing + direction is from the centre of the last line rather than the centre of the last {\tt [ ]}; L,R,A,B align labels ljust, rjust, above, - or below (absolute) respectively \seesect{Labels:}} + or below (absolute) respectively \seesect{Labels:}}% \macrodef{dleft}{dleft}{({\tt at} {\sl position}, {\sl line thickness}, - {\sl attributes})} - {darrow} + {\sl attributes})}% + {darrow}% {Double line left turn 90 degrees. Attributes can be - {\tt outline=({\sl r, g, b})|"{\sl color}";} - {\tt innershade=({\sl r, g, b})|"{\sl color}";} - where rgb values in parentheses or a defined color is specified.} -\macrodef{Dline}{Dline}{(\linespec, {\sl parameters})} - {darrow} + {\tt outline=({\sl r, g, b})|"{\sl color}";}% + {\tt innershade=({\sl r, g, b})|"{\sl color}";}% + where rgb values in parentheses or a defined color is specified.}% +\macrodef{Dline}{Dline}{(\linespec, {\sl parameters})}% + {darrow}% {Wrapper for {\tt dline}. - The semicolon-separated {\sl parameters} are: - {\tt S;}, {\tt E;} truncate at start or end by dline thickness/2; - {\tt thick={\sl val};} (total thicknes, ie width); - {\tt outline={\sl color};} (e.g., {\tt "red"} or {\tt (1,0,0)}), - {\tt innershade={\sl color};} (e.g., {\tt (0,1,1)} or {\tt "cyan"}), - {\tt name={\sl Name};}, - {\tt ends=} + The semicolon-separated {\sl parameters} are:\\ + {\tt S;}, {\tt E;} truncate at start or end by dline thickness/2;\\ + {\tt thick={\sl val};} (total thicknes, ie width);\\ + {\tt outline={\sl color};} (e.g., {\tt "red"} or {\tt (1,0,0)}),\\ + {\tt innershade={\sl color};} (e.g., {\tt (0,1,1)} or {\tt "cyan"}),\\ + {\tt name={\sl Name};},\\ + {\tt ends=}% {\sl x}{\tt -}{\sl x} or {\tt -}{\sl x} or {\sl x}{\tt -} where {\sl x} is {\tt !} (half-width line) - or {\tt |;} (full-width line).} -\macrodef{dline}{dline}{(\linespec,t,t,{\sl width},{\sl parameters})} - {darrow} + or {\tt |;} (full-width line).}% +\macrodef{dline}{dline}{(\linespec,t,t,{\sl width},{\sl parameters})}% + {darrow}% {See also {\tt Dline}. Double line, truncated by half width at either end, closed at either or both ends. - {\sl parameters=} + {\sl parameters=}% {\sl x}{\tt -}{\sl x} or {\tt -}{\sl x} or {\sl x}{\tt -} where {\sl x} is {\tt !} (half-width line) - or {\tt |} (full-width line).} -\macrodef{dlinewid}{dlinewid}{} - {darrow} - {width of double lines} -\macrodef{dljust}{dljust}{(at {\sl location})} - {darrow} - {ljust (displaced dlinewid/2)} -\macrodef{dna\_}{dna_}{} - {cct} - {internal character sequence that specifies which subcomponents are drawn} -\macrodef{dn\_}{dnx}{} - {gen} - {down with respect to current direction} -%\macrodef{dnm\_}{dnm_}{} -% {cct} -% {similar to dna\_} -\macrodef{dot3D}{dot3D}{({\sl x1,y1,z1,x2,y2,z2})} - {3D} - {dot product of two triples} -\macrodef{dot}{dot}{(at {\sl location},{\sl radius}|{\sl keys},{\sl fill})} - {gen} + or {\tt |} (full-width line).}% +\macrodef{dlinewid}{dlinewid}{}% + {darrow}% + {width of double lines}% +\macrodef{dljust}{dljust}{(at {\sl location})}% + {darrow}% + {ljust (displaced dlinewid/2)}% +\macrodef{dna\_}{dna_}{}% + {cct}% + {internal character sequence that specifies which subcomponents are drawn}% +\macrodef{dn\_}{dnx}{}% + {gen}% + {down with respect to current direction}% +%\macrodef{dnm\_}{dnm_}{}% +% {cct}% +% {similar to dna\_}% +\macrodef{dot3}{dot3}{({\sl vec1, vec2})}% + {dpictools}% + {$\;\;$ Expands to the dot (scalar) product of the two 3-vector arguments: + $(\${}1[1]\cdot\${}2[1] + \${}1[2]\cdot\${}2[2] + \${}1[3]\cdot\${}2[3])$.}% +\macrodef{dot3D}{dot3D}{({\sl x1,y1,z1,x2,y2,z2})}% + {3D}% + {dot product of two triples}% +\macrodef{dot}{dot}{(at {\sl location},{\sl radius}|{\sl keys},{\sl fill})}% + {gen}% {Filled circle (third arg= gray value: 0=black, 1=white). The possible key-value pairs are: {\tt rad={\sl expr};} and - {\tt circle={\sl attributes};} } -\macrodef{dotrad\_}{dotrad_}{} - {gen} - {dot radius} -\macrodef{down\_}{down_}{} - {gen} - {sets current direction to down \seesect{Placing:}} + {\tt circle={\sl attributes};} }% +\macrodef{dotrad\_}{dotrad_}{}% + {gen}% + {dot radius}% +\macrodef{down\_}{down_}{}% + {gen}% + {sets current direction to down \seesect{Placing:}}% +\macrodef{dpquicksort}{dpquicksort}{({\sl array name, lo, hi, ix})}% + {dpictools}% + {$\;\;$ Given array {\sl a[lo:hi]} and index array {\sl ix[lo:hi] = + lo, lo+1, lo+2,\ldots hi}, sort {\sl a[lo:hi]} and do identical exchanges + on {\sl ix}.}% +\macrodef{dprot}{dprot}{({\sl radians, x, y})}% + {dpictools}% + {$\;\;$ Evaluates to a rotated pair (see m4 {\tt rot\_}).}% +\macrodef{dprtext}{dprtext}{({\sl degrees, text})}% + {dpictools}% + {$\;\;$ Rotated PStricks or pgf text in a {\tt []} box.}% \macrodef{dright}{dright}{({\tt at} {\sl position}, {\sl line thickness}, - {\sl attributes})} - {darrow} + {\sl attributes})}% + {darrow}% {Double line right turn 90 degrees. Attributes can be - {\tt outline=({\sl r, g, b})|"{\sl color}";} - {\tt innershade=({\sl r, g, b})|"{\sl color}";} - where rgb values in parentheses or a defined color is specified.} -\macrodef{drjust}{drjust}{(at {\sl location})} - {darrow} - {rjust (displaced dlinewid/2)} -\macrodef{dswitch}{dswitch}{(\linespec,L|R,W[ud]B {\sl chars})} - {cct} - {SPST switch left or right, W=baseline, B=contact blade, - dB=contact blade to the right of drawing direction, - Bm = mirror contact blade, - Bo = contact blade more widely open, - Cb = circuit-breaker function, - Co = contactor function, - C = external operating mechanism, - D = circle at contact and hinge, - (dD = hinge only, uD = contact only) - E = emergency button, - EL = early close (or late open), - LE = late close (or early open), - F = fused, - H = time delay closing, - uH = time delay opening, - HH = time delay opening and closing, - K=vertical closing contact line, - L = limit, - M = maintained (latched), - MM = momentary contact on make, - MR = momentary contact on release, - MMR = momentary contact on make and release, - O = hand operation button, - P = pushbutton, - Pr{\tt [T|M]} = proximity (touch-sensitive or magnetically controlled), - Th = thermal control linkage, - Tr = tripping, - Y = pull switch, - Z = turn switch - \seesect{Twoterminal:}} -\macrodef{dtee}{dtee}{([L|R], {\sl line thickness}, {\sl attributes})} - {darrow} + {\tt outline=({\sl r, g, b})|"{\sl color}";}% + {\tt innershade=({\sl r, g, b})|"{\sl color}";}% + where rgb values in parentheses or a defined color is specified.}% +\macrodef{drjust}{drjust}{(at {\sl location})}% + {darrow}% + {rjust (displaced dlinewid/2)}% +\macrodef{dswitch}{dswitch}{(\linespec, L|R, W[ud]B {\sl chars}, + {\sl attributes})}% + {cct}% + { + Comprehensive IEEE-IEC single-pole switch: + arg2={\tt R}: orient to the right of + drawing dir + arg4 is a key-value sequence for the body of + {\tt GC} and {\tt GX} options: + {\tt GC} keys: {\tt diam, circle;}% + {\tt GX} keys: {\tt lgth, wdth, box, text}. +\par + Arg 3: + blank means {\tt WB} by default\\ + {\tt B}: contact blade open\\ + {\tt Bc}: contact blade closed\\ + {\tt Bm}: mirror blade\\ + {\tt Bo}: contact blade more widely open\\ + {\tt dB}: contact blade to the right of + direction\\ + {\tt Cb}: circuit breaker function + (IEC S00219)\\ + {\tt Co}: contactor function (IEC S00218)\\ + {\tt C}: external operating mechanism\\ + {\tt D}: circle at contact and hinge + ({\tt dD} = hinge only, + {\tt uD}: contact only)\\ + {\tt DI}: Disconnector, isolator + (IEC S00288)\\ + {\tt E}: emergency button\\ + {\tt EL}: early close (or late open)\\ + {\tt LE}: late close (or early open)\\ + {\tt F}: fused\\ + {\tt GC}: disk control mechanism, attribs: + {\tt diam={\sl expr}; + circle={\sl circle attribs};}\\ + {\tt GX}: box control mechanism, attribs: + {\tt lgth={\sl expr}; wdth={\sl expr}; % + box={\sl box attr};}% + {\tt text={\sl char};}\\ + {\tt H}: time delay closing\\ + {\tt uH}: time delay opening\\ + {\tt HH}: time delay opening and closing\\ + {\tt K}: vertical closing contact line + use {\tt WdBK} for a normally-closed + switch\\ + {\tt L}: limit\\ + {\tt M}: maintained (latched)\\ + {\tt MM}: momentary contact on make\\ + {\tt MR}: momentary contact on release\\ + {\tt MMR}: momentary contact on make and + release\\ + {\tt O}: hand operation button\\ + {\tt P}: pushbutton\\ + {\tt Pr[T|M]}: proximity (touch-sensitive or + magnetically controlled)\\ + {\tt R}: time-delay operating arm\\ + {\tt Sd}: Switch-disconnector\\ + {\tt Th}: thermal control linkage\\ + {\tt Tr}: tripping\\ + {\tt W}: baseline with gap\\ + {\tt Y}: pull switch\\ + {\tt Z}: turn switch + \seesect{Twoterminal:}}% +\macrodef{dtee}{dtee}{([L|R], {\sl line thickness}, {\sl attributes})}% + {darrow}% {Double arrow tee junction with tail to left, right, or (default) back along current direction, leaving the current location at the tee centre; e.g., @@ -800,28 +980,28 @@ B|b|CR|D|G|L|LE[R]|P[R]|S|Sh|T|U|V|v|w|Z|chars,% \{ darrow(down\_,t) \}; darrow(right\_,t)}. The attributes are {\tt thick={\sl expr};} (line thickness in drawing units), - {\tt innershade=({\sl r,g,b})|"{\sl color}";} - {\tt outline=({\sl r,g,b})|"{\sl color}";}. } -\macrodef{dtor\_}{dtor_}{} - {gen} - {degrees to radians conversion constant} + {\tt innershade=({\sl r,g,b})|"{\sl color}";}% + {\tt outline=({\sl r,g,b})|"{\sl color}";}. }% +\macrodef{dtor\_}{dtor_}{}% + {gen}% + {degrees to radians conversion constant}% \macrodef{dturn}{dturn}{({\sl degrees ccw},{\sl line thickness}, - {\sl attributes})} - {darrow} + {\sl attributes})}% + {darrow}% {Tturn dline arg1 degrees left (ccw). Attributes can be - {\tt outline=({\sl r, g, b})|"{\sl color}";} - {\tt innershade=({\sl r, g, b})|"{\sl color}";} - where rgb values in parentheses or a defined color is specified.} + {\tt outline=({\sl r, g, b})|"{\sl color}";}% + {\tt innershade=({\sl r, g, b})|"{\sl color}";}% + where rgb values in parentheses or a defined color is specified.}% % \Letter{E}% -\macrodef{earphone}{earphone}{( U|D|L|R|{\sl degrees, size})} - {cct} +\macrodef{earphone}{earphone}{( U|D|L|R|{\sl degrees, size})}% + {cct}% {earphone, {\sl In1} to {\sl In3} defined - \seesect{Composite:}} + \seesect{Composite:}}% \macrodef{ebox}{ebox}{(\linespec,{\sl lgth},{\sl wdth},{\sl fill value}, - {\sl box attributes})} - {cct} + {\sl box attributes})}% + {cct}% { two-terminal box element with adjustable dimensions and fill value 0 (black) to 1 (white). {\sl lgth} (length) and {\sl wdth} (width) are relative @@ -829,111 +1009,109 @@ B|b|CR|D|G|L|LE[R]|P[R]|S|Sh|T|U|V|v|w|Z|chars,% \linespec\ and argument 2 is a semicolon-separated sequence of key=value terms. The possible keys are {\tt lgth, wdth, text, box}, e.g., {\tt lgth=0.2; text=\char34{}XX\char34; - box=shaded \char34{}green\char34}\seesect{Twoterminal:}} -\macrodef{E\_\_}{E__}{} - {gen} - {the constant $e$} -\macrodef{e\_}{e_}{} - {gen} - {.e relative to current direction} -\macrodef{e\_fet}{e_fet}{(\linespec,R,P,E|S)} - {cct} + box=shaded \char34{}green\char34}\seesect{Twoterminal:}}% +\macrodef{E\_\_}{E__}{}% + {gen}% + {the constant $e$}% +\macrodef{e\_}{e_}{}% + {gen}% + {.e relative to current direction}% +\macrodef{e\_fet}{e_fet}{(\linespec,R,P,E|S)}% + {cct}% {left or right, N or P enhancement MOSFET, normal or simplified, without or with envelope - \seesect{Semiconductors:}} -\macrodef{elchop}{elchop}{({\sl Name1,Name2})} - {gen} + \seesect{Semiconductors:}}% +\macrodef{elchop}{elchop}{({\sl Name1,Name2})}% + {gen}% {{\tt chop} for ellipses: evaluates to {\tt chop} $r$ where $r$ is the distance from the centre of ellipse Name1 to the intersection of the ellipse with a line to location Name2; - e.g., {\tt line from A to E elchop(E,A)}} -\macrodef{eleminit\_}{eleminit_}{(\linespec)} - {cct} - {internal line initialization} -\macrodef{elen\_}{elen_}{} - {cct} - {default element length} + e.g., {\tt line from A to E elchop(E,A)}}% +\macrodef{eleminit\_}{eleminit_}{(\linespec)}% + {cct}% + {internal line initialization}% +\macrodef{elen\_}{elen_}{}% + {cct}% + {default element length}% \macrodef{ellipsearc}{ellipsearc}{({\sl width, height, startangle, endangle, - rotangle, {\tt cw|ccw}, line attributes})} - {gen} + rotangle, {\tt cw|ccw}, line attributes})}% + {gen}% {Arc of a rotated ellipse in a {\tt [ ]} block. Angles are in radians. Arg5 is the angle of the width axis; e.g., {\tt ellipsearc(2,1,0,pi\_,pi\_/4,{},dashed ->)}. Internal locations - are {\tt Start, End, C} (for centre). } -\macrodef{em\_arrows}{em_arrows}{({\sl type}|{\sl keys,angle,length})} - {cct} - { Radiation arrows: {\sl type} {\tt N|I|E [D|T]} - {\tt N}=nonionizing, {\tt I}=ionizing, {\tt E}=simple; - {\tt D}=dot on arrow stem; {\tt T}=anchor tail; - {\sl keys:} {\tt type=}{\sl chars} as above; - {\tt lgth}={\sl expr}; - {\tt sep}={\sl expr}; arrow separation - {\tt angle}={\sl degrees}; absolute direction\seesect{Twoterminal:}} -\macrodef{endshade}{endshade}{} - {gen} - {end gray shading, see {\tt beginshade}} -\macrodef{Equidist3}{Equidist3}{({\sl Pos1, Pos2, Pos3, Result, distance})} - {gen} + are {\tt Start, End, C} (for centre). }% +\macrodef{em\_arrows}{em_arrows}{({\sl type}|{\sl keys, angle, length})}% + {cct}% + { Radiation arrows: {\sl type} {\tt N|I|E [D|T]}:\\ + {\tt N}: nonionizing,\\ + {\tt I}: ionizing,\\ + {\tt E}: simple;\\ + {\tt D}: dot on arrow stem;\\ + {\tt T}: anchor tail;\\ + {\sl keys:} {\tt type=}{\sl chars} as above;\\ + {\tt angle=}{\sl degrees}; (absolute direction)\\ + {\tt lgth=}{\sl expr};\\ + {\tt sep=}{\sl expr}; arrow separation + \seesect{Twoterminal:}}% +\macrodef{endshade}{endshade}{}% + {gen}% + {end gray shading, see {\tt beginshade}}% +\macrodef{Equidist3}{Equidist3}{({\sl Pos1, Pos2, Pos3, Result, distance})}% + {gen}% {Calculates location named {\sl Result} equidistant from the first three positions, i.e.\ the centre of the circle passing through the three - positions. If arg5 is nonblank, it is equated to the radius.} -\macrodef{expe}{expe}{} - {gen} - {exponential, base $e$} + positions. If arg5 is nonblank, it is returned equated to the radius.}% +\macrodef{expe}{expe}{}% + {gen}% + {exponential, base $e$}% % \Letter{F}% -\macrodef{f\_box}{f_box}{({\sl boxspecs},{\sl text},{\sl expr1},$\cdots$)} - {gen} +\macrodef{f\_box}{f_box}{({\sl boxspecs},{\sl text},{\sl expr1},$\cdots$)}% + {gen}% {like {\tt s\_box} but the text is overlaid on a box of identical size. If there is only one argument then the default box is invisible and filed white - \seesect{Interaction:}} -\macrodef{Fector}{Fector}{({\sl x1,y1,z1,x2,y2,z2})} - {3D} + \seesect{Interaction:}}% +\macrodef{Fector}{Fector}{({\sl x1,y1,z1,x2,y2,z2})}% + {3D}% {vector projected on current view plane with top face - of 3-dimensonal arrowhead normal to x2,y2,z2 } -\macrodef{Fe\_fet}{Fe_fet}{(\linespec,R,{\sl chars})} - {cct} + of 3-dimensonal arrowhead normal to x2,y2,z2 }% +\macrodef{Fe\_fet}{Fe_fet}{(\linespec,R,{\sl chars})}% + {cct}% {FET with superimposed ferroelectric symbol. Args 1 to 3 are as for the {\tt mosfet} macro - \seesect{Semiconductors:}} -\macrodef{FF\_ht}{FF_ht}{} - {cct} - {flipflop height parameter in {\tt L\_unit}s} -\macrodef{FF\_wid}{FF_wid}{} - {cct} - {flipflop width parameter in {\tt L\_unit}s} -\macrodef{fill\_}{fill_}{({\sl number})} - {gen} - {fill macro, 0=black, 1=white\seesect{Semiconductors:}} -\macrodef{fitcurve}{fitcurve}{(V,n,[e.g. dotted],m (default 0))} - {gen} - {Draw a spline through positions V[m], $ldots$ V[n]: Works only with dpic.} -\macrodef{FlipFlop6}{FlipFlop6}{({\sl label},{\sl spec},{\sl boxspec})} - {log} - {{\em This macro (6-input flip-flops) - has been superseded by {\tt FlipFlopX} and may be deleted - in future}. - {\sl spec}={\tt [[n]NQ][[n]Q][[n]CK][[n]PR][lb]} - {\tt [[n]CLR][[n]S][[n].|D|T|R]} to include and negate pins, - {\tt lb} to print labels } + \seesect{Semiconductors:}}% +\macrodef{FF\_ht}{FF_ht}{}% + {cct}% + {flipflop height parameter in {\tt L\_unit}s}% +\macrodef{FF\_wid}{FF_wid}{}% + {cct}% + {flipflop width parameter in {\tt L\_unit}s}% +\macrodef{fill\_}{fill_}{({\sl number})}% + {gen}% + {fill macro, 0=black, 1=white\seesect{Semiconductors:}}% +\macrodef{findroot}{findroot}{% + ({\sl function name, left bound, right bound, tolerance, variable}))}% + {dpictools}% + {$\;\;$ Solve $\hbox{\sl function}(x) = 0$ by the method of + bisection. The calculated value is assigned to the variable named in the + last argument (\SR{Libraries:}). Example: + {\tt define parabola \{ \$2 = (\$1)\char94{}2 - 1 \}; + findroot( parabola, 0, 2, 1e-8, x )}. }% +\macrodef{fitcurve}{fitcurve}{(V, n, {\sl attributes,} m (default 0))}% + {gen}% + {Draw a spline through positions V[m], \ldots V[n]: Works only with dpic.}% \macrodef{FlipFlop}{FlipFlop}{(D|T|RS|JK,{\sl label},{\sl boxspec},% - {\sl pinlength})} - {log} + {\sl pinlength})}% + {log}% {flip-flops, - {\sl boxspec}=e.g.\ ht x wid y \seesect{Logicgates:}} -\macrodef{FlipFlopJK}{FlipFlopJK}{({\sl label}, {\sl spec},{\sl boxspec})} - {log} - {{\em This macro (JK flip-flop) - has been superseded by {\tt FlipFlopX} and may be deleted - in future}. - Similar to {\tt FlipFlop6}.} + {\sl boxspec} e.g.,\ ht x wid y \seesect{Logicgates:}}% \macrodef{FlipFlopX}{FlipFlopX}{({\sl boxspec, label, leftpins, toppins, - rightpins, bottompins, pinlength})} - {log} + rightpins, bottompins, pinlength})}% + {log}% {General flipflop. Arg 1 modifies the box (labelled Chip) default specification. - Each of args 3 to 6 is null or a string of {\sl pinspecs} + Each of args 3 to 6 is null or a string of {\sl pinspecs}% separated by semicolons ({\tt;}). A {\sl Pinspec} is either empty or of the form {\tt[}{\sl pinopts}{\tt]:[}{\sl label}{\tt[:}{\sl Picname}{\tt]]}. @@ -941,352 +1119,393 @@ B|b|CR|D|G|L|LE[R]|P[R]|S|Sh|T|U|V|v|w|Z|chars,% Pins are placed top to bottom or left to right along the box edges with null {\sl pinspecs} counted for placement. Pins are named by side and number by default; eg {\tt W1, W2, ..., N1, N2, ..., E1, ..., S1, ...} ; however, - if {\tt:}{\sl Picname} is present in a {\sl pinspec} then {\sl Picname} + if {\tt:}{\sl Picname} is present in a {\sl pinspec} then {\sl Picname}% replaces the default name. A {\sl pinspec} label is text placed at the pin base. Semicolons are - not allowed in labels; use, e.g., {\tt \char92{}char59\char123\char125} + not allowed in labels; use, e.g., {\tt \char92{}char59\char123\char125}% instead. To put a bar over a label, use {\tt lg\_bartxt(}{\sl label}{\tt)}. The {\sl pinopts} are {\tt[N|L|M][E]}; - {\tt N}=pin with not circle; - {\tt L}=active low out; {\tt M}=active low in; - {\tt E}=edge trigger \seesect{Logicgates:}. Optional arg 7 is the length - of pins} + {\tt N}: pin with not circle; + {\tt L}: active low out; + {\tt M}: active low in; + {\tt E}: edge trigger \seesect{Logicgates:}.\\ + Optional arg 7 is the length of pins}% \macrodef{foreach\_}{foreach_}{(`{\sl variable}',{\sl actions},{\sl - value1, value2, $\ldots$})} - {gen} + value1, value2, $\ldots$})}% + {gen}% {Clone of Loopover\_ by a different name: Repeat {\sl actions} with {\sl variable} set successively to {\sl value1, value2, $\ldots$}, setting macro {\tt m4Lx} to 1, 2, - $\ldots$, terminating if {\sl variable} is nul} -\macrodef{for\_}{for_}{({\sl start},{\sl end},{\sl increment},`{\sl actions}')} - {gen} - {integer for loop with index variable {\tt m4x} \seesect{Looping:}} -\macrodef{FTcap}{FTcap}{({\sl chars})} - {cct} + $\ldots$, terminating if {\sl variable} is nul}% +\macrodef{for\_}{for_}{({\sl start},{\sl end},{\sl increment},`{\sl actions}')}% + {gen}% + {integer for loop with index variable {\tt m4x} \seesect{Looping:}}% +\macrodef{FTcap}{FTcap}{({\sl chars})}% + {cct}% {Feed-through capacitor; example of a composite element derived from - a two-terminal element. Defined points: {\sl .Start, .End, .C .T1 .T2 T} - Arg 1: (default) {\tt A}= type A, {\tt B}= type B, {\tt C}= type C - \seesect{Composite:}} -\macrodef{fuse}{fuse}{({\sl linespec, type, wid, ht})} - {cct} + a two-terminal element. Defined points: {\sl .Start, .End, .C .T1 .T2 T}% + Arg 1: {\tt A}: type A (default), + {\tt B}: type B, + {\tt C}: type C + \seesect{Composite:}}% +\macrodef{fuse}{fuse}{({\sl linespec, type, wid, ht, attributes})}% + {cct}% {fuse symbol, type$=$ - {\tt A|B|C|D|S|HB|HC|SB} or {\tt dA=D}\seesect{Twoterminal:}} + {\tt A|B|C|D|S|HB|HC|SB} or {\tt dA=D}\seesect{Twoterminal:}}% % \Letter{G}% -\macrodef{gap}{gap}{(\linespec,{\sl fill},A)} - {cct} - {gap with (filled) dots, A=chopped arrow between dots\seesect{Twoterminal:}} -\macrodef{gen\_init}{gen_init}{} - {gen} +\macrodef{gap}{gap}{(\linespec,{\sl fill},A)}% + {cct}% + {gap with (filled) dots, A=chopped arrow between dots\seesect{Twoterminal:}}% +\macrodef{gen\_init}{gen_init}{}% + {gen}% {initialize environment for general diagrams - (customizable, reads {\tt libgen.m4})} -\macrodef{g\_fet}{g_fet}{(\linespec,R,P,{\sl shade spec})} - {cct} + (customizable, reads {\tt libgen.m4})}% +\macrodef{g\_fet}{g_fet}{(\linespec,R,P,{\sl shade spec})}% + {cct}% {left or right, N or P graphene FET, without or with shading - \seesect{Semiconductors:}} -\macrodef{g\_}{g_}{} - {gen} - {green color value} -\macrodef{G\_hht}{G_hht}{} - {log} - {gate half-height in {\tt L\_unit}s} -\macrodef{glabel\_}{glabel_}{} - {cct} - {internal general labeller} -%\macrodef{gpar\_}{gpar_}{({\sl element},{\sl element},{\sl separation})} -% {cct} -% {two same-direction elements in parallel} -\macrodef{gpolyline\_}{gpolyline_}{({\sl fraction},{\sl location}, ...)} - {gen} - {internal to {\tt gshade}} -\macrodef{graystring}{graystring}{({\sl gray value})} - {gen} + \seesect{Semiconductors:}}% +\macrodef{g\_}{g_}{}% + {gen}% + {green color value}% +\macrodef{G\_hht}{G_hht}{}% + {log}% + {gate half-height in {\tt L\_unit}s}% +\macrodef{glabel\_}{glabel_}{}% + {cct}% + {internal general labeller}% +%\macrodef{gpar\_}{gpar_}{({\sl element},{\sl element},{\sl separation})}% +% {cct}% +% {two same-direction elements in parallel}% +\macrodef{gpolyline\_}{gpolyline_}{({\sl fraction},{\sl location}, ...)}% + {gen}% + {internal to {\tt gshade}}% +\macrodef{graystring}{graystring}{({\sl gray value})}% + {gen}% {evaluates to a string compatible with the postprocessor in use to go with {\tt colored}, {\tt shaded}, or {\tt outlined} attributes. (PSTricks, metapost, pgf-tikz, pdf, postscript, svg). - The argument is a fraction in the range $[0,1]$; see {\tt rgbstring}} -\macrodef{grid\_}{grid_}{({\sl x},{\sl y})} - {log} - {absolute grid location} + The argument is a fraction in the range $[0,1]$; see {\tt rgbstring}}% +\macrodef{grid\_}{grid_}{({\sl x},{\sl y})}% + {log}% + {absolute grid location}% \macrodef{ground}{ground}{(at {\sl location}, T|{\sl stem length}, - N|F|S|L|P[A]|E, U|D|L|R|{\sl degrees})} - {cct} - { ground, without stem for 2nd arg = T; - {\tt N}=normal, {\tt F}=frame, {\tt S}=signal, {\tt L}=low-noise, - {\tt P}=protective, - {\tt PA}=protective alternate, - {\tt E}=European; up, down, left, right, or angle - from horizontal (default -90) - \seesect{Composite:}} -\macrodef{gshade}{gshade}{({\sl gray value},A,B,...,Z,A,B)} - {gen} + N|F|S|L|P[A]|E, U|D|L|R|{\sl degrees})}% + {cct}% + { ground, without stem for 2nd arg = T;\\ + {\tt N}: normal,\\ + {\tt F}: frame,\\ + {\tt S}: signal,\\ + {\tt L}: low-noise,\\ + {\tt P}: protective,\\ + {\tt PA}: protective alternate,\\ + {\tt E}: European; up, down, left, right, or angle + from horizontal (default -90) \\ + \seesect{Composite:}}% +\macrodef{gshade}{gshade}{({\sl gray value},A,B,...,Z,A,B)}% + {gen}% {(Note last two arguments). Shade a polygon with named - vertices, attempting to avoid sharp corners} -\macrodef{gyrator}{gyrator}{({\sl box specs,space ratio,pin lgth,}[N][V])} - {cct} - {Gyrator two-port wrapper for {\tt nport}, {\tt N} omits pin dots; {\tt V} + vertices, attempting to avoid sharp corners}% +\macrodef{gyrator}{gyrator}{({\sl box specs,space ratio,pin lgth,}[N][V])}% + {cct}% + {Gyrator two-port wrapper for {\tt nport}, {\tt N} omits pin dots; {\tt V}% gives a vertical orientation - \seesect{Composite:}} + \seesect{Composite:}}% % \Letter{H}% -\macrodef{hatchbox}{hatchbox}{({\sl boxspec,hashsep,hatchspec})} - {gen} - {Manhattan box with 45 degree hatching, e.g., - {\tt hatchbox(outlined "blue",{},dashed outlined "green" thick 0.4)}} -\macrodef{Header}{Header}{(1|2,{\sl rows,wid,ht,box attributes})} - {log} +\macrodef{hatchbox}{hatchbox}{({\sl boxspec,hashsep,hatchspec,angle}) + {\rm or} hatchbox({\sl keys})}% + {gen}% +% {Alternate invocation: {\tt hatchbox({\sl keys})}. + {Manhattan box hatched at a specified separation + and angle (default 45 degrees). + Defined keys are:\\ + {\tt wid={\sl expr};}\\ + {\tt ht={\sl expr};}\\ + {\tt box={\sl attributes};} (e.g. {\tt dashed outline "{\sl color}"})\\ + {\tt fillcolor="{\sl color}"|({\sl r,g,b});}\\ + {\tt hatchsep={\sl expr};}\\ + {\tt hatchspec={\sl attributes};}\\ + {\tt angle={\sl expr};}% + e.g., + {\tt hatchbox(outlined "blue",{},dashed outlined "green" thick 0.4)};\\ + also + {\tt DefineRGBColor(mycolor,1,0.2,0.5);\\ + hatchbox(box=dashed outlined mycolor)}}% +\macrodef{Header}{Header}{(1|2,{\sl rows,wid,ht,box attributes})}% + {log}% {Header block with 1 or 2 columns and square Pin 1: arg1 = number of columns; arg2 = pins per column; arg3,4 = custom wid, ht; - arg5 = e.g., {\tt fill\_(0.9)} - \seesect{Composite:}} + arg5 = e.g., {\tt fill\_(0.9)}% + \seesect{Composite:}}% \macrodef{HeaderPin}{HeaderPin}{({\sl location, type, Picname},% -n|e|s|w,{\sl length})} - {log} +n|e|s|w,{\sl length})}% + {log}% {General pin for {\tt Header} macro; arg 4 specifies pin direction - with respect to the current drawing direction)} -\macrodef{heatere}{heatere}{({\sl linespec, keys,} [R][T])} - {cct} + with respect to the current drawing direction)}% +\macrodef{heatere}{heatere}{({\sl linespec, keys,} [R][T])}% + {cct}% {Heater element with curved sides\seesect{Twoterminal:}. {\tt R} means right orientation; {\tt T} truncates leads to the width of the body. The {\sl keys} for the body are - {\tt lgth={\sl expr};} + {\tt lgth={\sl expr};}% {\tt wdth={\sl expr};} (default {\tt lgth*2/5}); - {\tt cycles={\sl expr};} - {\tt line={\sl attributes};} (e.g., {\tt dotted, dashed, outlined})} + {\tt cycles={\sl expr};}% + {\tt line={\sl attributes};} (e.g., {\tt dotted, dashed, outlined})}% \macrodef{heater}{heater}{({\sl linespec, ndivisions|keys, wid, ht, - boxspec}|[E[R][T]])} - {cct} - {Heater element\seesect{Twoterminal:}. If arg 5 contains {\tt E,} - draws an {\tt heatere({\sl linespec, keys,} [R][T]),} + boxspec}|[E[R][T]])}% + {cct}% + {Heater element\seesect{Twoterminal:}. If arg 5 contains {\tt E,}% + draws an {\tt heatere({\sl linespec, keys,} [R][T]),}% otherwise a - {\tt heatert({\sl linespec, nparts, wid, ht, boxspec})}} -\macrodef{heatert}{heatert}{({\sl linespec, nparts|keys, wid, ht, boxspec})} - {cct} + {\tt heatert({\sl linespec, nparts, wid, ht, boxspec})}}% +\macrodef{heatert}{heatert}{({\sl linespec, nparts|keys, wid, ht, boxspec})}% + {cct}% {Two-terminal rectangular heater element\seesect{Twoterminal:}. The {\sl keys} for the body are - {\tt parts={\sl expr};} - {\tt lgth={\sl expr};} + {\tt parts={\sl expr};}% + {\tt lgth={\sl expr};}% {\tt wdth={\sl expr};} (default {\tt lgth*2/5}); - {\tt box={\sl body attributes};} + {\tt box={\sl body attributes};}% (e.g., {\tt dotted, dashed, outlined, shaded}). - Args 3--5 are unused if any key is given} -\macrodef{hexadecimal\_}{hexadecimal_}{($n$, [$m$])} - {gen} + Args 3--5 are unused if any key is given}% +\macrodef{hexadecimal\_}{hexadecimal_}{($n$, [$m$])}% + {gen}% {hexadecimal representation of $n,$ left padded to $m$ digits if the second - argument is nonblank} -\macrodef{hex\_digit}{hex_digit}{($n$)} - {gen} - {hexadecimal digit for $0 \leq n < 16$} -\macrodef{H\_ht}{H_ht}{} - {log} - {hysteresis symbol dimension in {\tt L\_unit}s} -\macrodef{hlth}{hlth}{} - {gen} - {current line half thickness in drawing units} -\macrodef{hoprad\_}{hoprad_}{} - {cct} - {hop radius in crossover macro} -\macrodef{ht\_}{ht_}{} - {gen} - {height relative to current direction} + argument is nonblank}% +\macrodef{hex\_digit}{hex_digit}{($n$)}% + {gen}% + {hexadecimal digit for $0 \leq n < 16$}% +\macrodef{H\_ht}{H_ht}{}% + {log}% + {hysteresis symbol dimension in {\tt L\_unit}s}% +\macrodef{histbins}{histbins}{({\sl data-array name, n, min, max, nbins, + bin array name})}% + {dpictools}% + {$\;\;$ Generate the distribution of {\sl n} values in {\sl data-array}. + If given, arg3 and arg4 specify maximum and minimum data values, + otherwise they are calculated. Bins have index 0 to arg5-1.}% +\macrodef{hlth}{hlth}{}% + {gen}% + {current line half thickness in drawing units}% +\macrodef{hoprad\_}{hoprad_}{}% + {cct}% + {hop radius in crossover macro}% +\macrodef{hsvtorgb}{hsvtorgb}{({\sl h, s, v, r, g, b})}% + {dpictools}% + {$\;\;$ hsv color triple to rgb; {\sl h} has range 0 to 360.}% +\macrodef{ht\_}{ht_}{}% + {gen}% + {height relative to current direction}% % \Letter{I}% -\macrodef{ifdpic}{ifdpic}{({\sl if true},{\sl if false})} - {gen} - {test if dpic has been specified as pic processor} -\macrodef{ifgpic}{ifgpic}{({\sl if true},{\sl if false})} - {gen} - {test if gpic has been specified as pic processor} +\macrodef{ifdpic}{ifdpic}{({\sl if true},{\sl if false})}% + {gen}% + {test if dpic has been specified as pic processor}% +\macrodef{ifgpic}{ifgpic}{({\sl if true},{\sl if false})}% + {gen}% + {test if gpic has been specified as pic processor}% \macrodef{ifinstr}{ifinstr}{({\sl string},{\sl string},{\sl if true},{\sl - if false})} - {gen} + if false})}% + {gen}% {test if the second argument is a substring of the first; also {\tt ifinstr({\sl string},{\sl string},{\sl if true},{\sl - string},{\sl string},{\sl if true}, $\ldots$ {\sl if false})} - } -\macrodef{ifmfpic}{ifmfpic}{({\sl if true},{\sl if false})} - {gen} - {test if mfpic has been specified as pic post-processor} -\macrodef{ifmpost}{ifmpost}{({\sl if true},{\sl if false})} - {gen} - {test if MetaPost has been specified as pic post-processor} -\macrodef{ifpgf}{ifpgf}{({\sl if true},{\sl if false})} - {gen} - {test if \TPGF~has been specified as pic post-processor} -\macrodef{ifpostscript}{ifpostscript}{({\sl if true},{\sl if false})} - {gen} - {test if Postscript ({\tt dpic -r}) has been specified as pic output format} -\macrodef{ifpsfrag}{ifpsfrag}{({\sl if true},{\sl if false})} - {gen} + string},{\sl string},{\sl if true}, $\ldots$ {\sl if false})}% + }% +\macrodef{ifmfpic}{ifmfpic}{({\sl if true},{\sl if false})}% + {gen}% + {test if mfpic has been specified as pic post-processor}% +\macrodef{ifmpost}{ifmpost}{({\sl if true},{\sl if false})}% + {gen}% + {test if MetaPost has been specified as pic post-processor}% +\macrodef{ifpgf}{ifpgf}{({\sl if true},{\sl if false})}% + {gen}% + {test if \TPGF~has been specified as pic post-processor}% +\macrodef{ifpostscript}{ifpostscript}{({\sl if true},{\sl if false})}% + {gen}% + {test if Postscript ({\tt dpic -r}) has been specified as pic output format}% +\macrodef{ifpsfrag}{ifpsfrag}{({\sl if true},{\sl if false})}% + {gen}% {Test if either {\tt psfrag} or {\tt psfrag\_} has been defined. For postscript with psfrag strings, one or the other should be defined - prior to or at the beginning of the diagram} -\macrodef{ifpstricks}{ifpstricks}{({\sl if true},{\sl if false})} - {gen} - {test if \PSTricks~has been specified as post-processor} -\macrodef{ifroff}{ifroff}{({\sl if true},{\sl if false})} - {gen} - {test if {\bf troff} or {\bf groff} has been specified as post-processor} -\macrodef{ifxfig}{ifxfig}{({\sl if true},{\sl if false})} - {gen} - {test if Fig 3.2 ({\tt dpic -x}) has been specified as pic output format} -\macrodef{igbt}{igbt}{(\linespec,L|R,[L][[d]D])} - {cct} + prior to or at the beginning of the diagram}% +\macrodef{ifpstricks}{ifpstricks}{({\sl if true},{\sl if false})}% + {gen}% + {test if \PSTricks~has been specified as post-processor}% +\macrodef{ifroff}{ifroff}{({\sl if true},{\sl if false})}% + {gen}% + {test if {\bf troff} or {\bf groff} has been specified as post-processor}% +\macrodef{ifxfig}{ifxfig}{({\sl if true},{\sl if false})}% + {gen}% + {test if Fig 3.2 ({\tt dpic -x}) has been specified as pic output format}% +\macrodef{igbt}{igbt}{(\linespec,L|R,[L][[d]D])}% + {cct}% {left or right IGBT, L=alternate gate type, D=parallel diode, - dD=dotted connections } + dD=dotted connections }% \macrodef{inductor}{inductor}{(\linespec, W|L, {\sl cycles}, M[n]|P[n]|K[n], - {\sl loop wid})} - {cct} - {inductor, arg2: narrow (default), W=wide, L=looped; - arg3: number of arcs or cycles (default 4); - arg4: M=magnetic core, P=powder (dashed) core, K=long-dashed core, + {\sl loop wid})}% + {cct}% + {inductor, arg2: (default narrow), {\tt W}: wide, {\tt L}: looped;\\ + arg3: number of arcs or cycles (default 4);\\ + arg4: + {\tt M}: magnetic core, + {\tt P}: powder (dashed) core, + {\tt K}: long-dashed core, n={\sl integer} (default 2) number of core lines named - {\sl M4Core1, M4Core2,} $\ldots$; - arg5: loop width (default L,W: {\tt dimen\_}/5; other: {\tt dimen\_}/8) - \seesect{Twoterminal:}} -\macrodef{in\_\_}{in__}{} - {gen} - {absolute inches} -\macrodef{inner\_prod}{inner_prod}{({\sl linear obj},{\sl linear obj})} - {gen} - {inner product of (x,y) dimensions of two linear objects} -\macrodef{integrator}{integrator}{(\linespec,{\sl size})} - {cct} - {integrating amplifier\seesect{Twoterminal:}} + {\sl M4Core1, M4Core2,} $\ldots$;\\ + arg5: loop width (default {\tt L, W}: {\tt dimen\_}/5; + other: {\tt dimen\_}/8) + \seesect{Twoterminal:}}% +\macrodef{in\_\_}{in__}{}% + {gen}% + {absolute inches}% +\macrodef{inner\_prod}{inner_prod}{({\sl linear obj},{\sl linear obj})}% + {gen}% + {inner product of (x,y) dimensions of two linear objects}% +\macrodef{integrator}{integrator}{(\linespec,{\sl size})}% + {cct}% + {integrating amplifier\seesect{Twoterminal:}}% \macrodef{intersect\_}{intersect_}{({\sl line1}.start,{\sl line1}.end, -{\sl line2}.start,{\sl line2}.end)} - {gen} - {intersection of two lines} -\macrodef{Intersect\_}{Intersect_}{({\sl Name1},{\sl Name2})} - {gen} - {intersection of two named lines} -\macrodef{Int\_}{Int_}{} - {gen} - {corrected (old) gpic $int()$ function} -\macrodef{IOdefs}{IOdefs}{(\linespec,{\sl label},[P|N]*,L|R) } - {log} - {Define locations {\sl label}{\tt 1}, $\ldots$ {\sl label}{\tt n} - along the line; {\tt P}= label only; - {\tt N}=with {\tt NOT\_circle}; - {\tt R}=circle to right of current direction } +{\sl line2}.start,{\sl line2}.end)}% + {gen}% + {intersection of two lines}% +\macrodef{Intersect\_}{Intersect_}{({\sl Name1},{\sl Name2})}% + {gen}% + {intersection of two named lines}% +\macrodef{Int\_}{Int_}{}% + {gen}% + {corrected (old) gpic $int()$ function}% +\macrodef{IOdefs}{IOdefs}{(\linespec,{\sl label},[P|N]*,L|R) }% + {log}% + {Define locations {\sl label}{\tt 1}, $\ldots$ {\sl label}{\tt n}% + along the line; {\tt P}: label only; + {\tt N}: with {\tt NOT\_circle}; + {\tt R}: circle to right of current direction }% % \Letter{J}% -\macrodef{jack}{jack}{(U|D|L|R|{\sl degrees},{\sl chars})} - {cct} - {arg1: drawing direction; string arg2: {\tt R}=right orientation, +\macrodef{jack}{jack}{(U|D|L|R|{\sl degrees},{\sl chars})}% + {cct}% + {arg1: drawing direction; string arg2: {\tt R}: right orientation, one or more {\tt L[M][B]} for L and auxiliary contacts with make or break points; {\tt S[M][B]} for S and auxiliary contacts - \seesect{Composite:}} -\macrodef{j\_fet}{j_fet}{(\linespec,L|R,P,E)} - {cct} + \seesect{Composite:}}% +\macrodef{j\_fet}{j_fet}{(\linespec,L|R,P,E)}% + {cct}% {left or right, N or P JFET, without or with envelope - \seesect{Semiconductors:}} -\macrodef{jumper}{jumper}{({\sl linespec, chars}|{\sl keys})} - {cct} + \seesect{Semiconductors:}}% +\macrodef{jumper}{jumper}{({\sl linespec, chars}|{\sl keys})}% + {cct}% { Two-terminal solder jumper with named body parts. The {\sl chars} character sequence specifies the jumper components, and normally begins with {\tt C} and ends with {\tt D.} The character - {\tt E} is an empty (blank) gap, {\tt J} is a filled gap, {\tt B} - is a box component. The components are named {\sl T1, T2, \ldots} - Examples: {\tt CED} is a simple open jumper (the default); {\tt CJD} + {\tt E} is an empty (blank) gap, {\tt J} is a filled gap, {\tt B}% + is a box component. The components are named {\sl T1, T2, \ldots}% + Examples: {\tt CED} is a simple open jumper (the default); {\tt CJD}% closed; {\tt CEBED} three-contact open; {\tt CJBED} three-contact open and closed. The {\sl keys} are: {\tt type=}{\sl chars} as previously; {\tt body=}{\sl attributes} (e.g. {\tt fill\_(0.5)}); {\tt wdth=}{\sl expr}; {\tt name=}{\sl chars} (the body name)% -\seesect{Twoterminal:}} +\seesect{Twoterminal:}}% % \Letter{K}% -\macrodef{KelvinR}{KelvinR}{({\sl cycles},[R],{\sl cycle wid})} - {cct} - {IEEE resistor in a {\tt [ ]} block with Kelvin taps {\sl T1} and {\sl T2} - \seesect{Composite:}} +\macrodef{KelvinR}{KelvinR}{({\sl cycles},[R],{\sl cycle wid})}% + {cct}% + {IEEE resistor in a {\tt [ ]} block with Kelvin taps {\sl T1} and {\sl T2}% + \seesect{Composite:}}% % \Letter{L}% -\macrodef{lamp}{lamp}{(\linespec, [R][T])} - {cct} +\macrodef{lamp}{lamp}{(\linespec, [R][T])}% + {cct}% {Two-terminal incandescent lamp. {\tt T} truncates leads to the body width. - \seesect{Twoterminal:}} -\macrodef{langle}{langle}{({\sl Start, End})} - {gen} - {Angle in radians from horizontal of the line from {\sl Start} - to {\sl End}.} -\macrodef{larrow}{larrow}{({\sl label},{\tt ->|<-},{\sl dist})} - {cct} + \seesect{Twoterminal:}}% +\macrodef{langle}{langle}{({\sl Start, End})}% + {gen}% + {Angle in radians from horizontal of the line from {\sl Start}% + to {\sl End}.}% +\macrodef{larrow}{larrow}{({\sl label},{\tt ->|<-},{\sl dist})}% + {cct}% {arrow {\sl dist} to left of last-drawn 2-terminal element - \seesect{Branchcurrent:}} -\macrodef{lbox}{lbox}{({\sl wid}, {\sl ht}, {\sl attributes})} - {gen} - {box oriented in current direction, arg 3= e.g.\ {\tt dashed shaded "red"}} -\macrodef{LCintersect}{LCintersect}{({\sl line name, Centre, rad,} [R])} - {gen} - { First (second if arg4 is R) intersection of a line with a circle} -\macrodef{LCtangent}{LCtangent}{({\sl Pos1, Centre, rad,} [R])} - {gen} + \seesect{Branchcurrent:}}% +\macrodef{lbox}{lbox}{({\sl wid}, {\sl ht}, {\sl attributes})}% + {gen}% + {box oriented in current direction, arg 3= e.g.\ {\tt dashed shaded "red"}}% +\macrodef{LCintersect}{LCintersect}{({\sl line name, Centre, rad,} [R], + [{\sl Line start, End}])}% + {gen}% + { First (second if arg4 is R) intersection of a line with a circle. + Solves $|V.{\tt start} + tV| = {\sl radius}$ for $t$ where $V$ is the line. + If arg1 is blank then the line start and end are given in arg5 and arg6.}% +\macrodef{LCtangent}{LCtangent}{({\sl Pos1, Centre, rad,} [R])}% + {gen}% { Left (right if arg4=R) tangent point of line - from Pos1 to circle at Centre with radius arg3} -\macrodef{left\_}{left_}{} - {gen} - {left with respect to current direction \seesect{Placing:}} + from Pos1 to circle at Centre with radius arg3}% +\macrodef{left\_}{left_}{}% + {gen}% + {left with respect to current direction \seesect{Placing:}}% \macrodef{LEintersect}{LEintersect}{({\sl line name, Centre, ellipse wid, - ellipse ht}, [R])} - {gen} - { First (second if arg5 is R) intersection of a line with an ellipse} -\macrodef{length3D}{length3D}{(x,y,z)} - {3D} - {Euclidean length of triple x,y,z} -\macrodef{LEtangent}{LEtangent}{({\sl Pos1, Centre, ellips wid, ellipse ht} - [R])} - {gen} + ellipse ht}, [R], [{\sl Line start, End}])}% + {gen}% + { First (second if arg5 is R) intersection of a line with an ellipse. + If arg1 is blank then the line start and end are given in arg6 and arg7.}% +\macrodef{length3}{length3}{({\sl vector})}% + {dpictools}% + {$\;\;$ Euclidean length of 3-vector argument.}% +\macrodef{length3D}{length3D}{(x,y,z)}% + {3D}% + {Euclidean length of triple x,y,z}% +\macrodef{LEtangent}{LEtangent}{({\sl Pos1, Centre, ellips wid, ellipse ht}% + [R])}% + {gen}% { Left (right if arg5=R) tangent point of line - from Pos1 to ellipse at Centre with given width and height} -\macrodef{lg\_bartxt}{lg_bartxt}{} - {log} - {draws an overline over logic-pin text (except for xfig)} + from Pos1 to ellipse at Centre with given width and height}% +\macrodef{lg\_bartxt}{lg_bartxt}{}% + {log}% + {draws an overline over logic-pin text (except for xfig)}% \macrodef{lg\_pin}{lg_pin}{({\sl location, label, Picname}, - n|e|s|w[L|M|I|O][N][E], {\sl pinno, optlen})} - {log} - {comprehensive logic pin; - {\sl label}= text (indicating logical pin function, usually), - {\sl Picname}= pic label for referring to the pin (line), - {\tt n|e|s|w}=orientation (north, south, east, west), - {\tt L}=active low out, - {\tt M}=active low in, - {\tt I}=inward arrow, - {\tt O}=outward arrow, - {\tt N}=negated, - {\tt E}=edge trigger} -\macrodef{lg\_pintxt}{lg_pintxt}{} - {log} - {reduced-size text for logic pins} -\macrodef{lg\_plen}{lg_plen}{} - {log} - {logic pin length in in {\tt L\_unit}s} -\macrodef{LH\_symbol}{LH_symbol}{([U|D|L|R|{\sl degrees}][I])} - {log} - {logic-gate hysteresis symbol; {\tt I=}inverted} -\macrodef{lin\_ang}{lin_ang}{({\sl line-reference}[,d])} - {gen} + n|e|s|w[L|M|I|O][N][E], {\sl pinno, optlen})}% + {log}% + {comprehensive logic pin;\\ + {\sl label}: text (indicating logical pin function, usually),\\ + {\sl Picname}: pic label for referring to the pin (line),\\ + {\tt n|e|s|w}: orientation (north, south, east, west),\\ + {\tt L}: active low out,\\ + {\tt M}: active low in,\\ + {\tt I}: inward arrow,\\ + {\tt O}: outward arrow,\\ + {\tt N}: negated,\\ + {\tt E}: edge trigger}% +\macrodef{lg\_pintxt}{lg_pintxt}{}% + {log}% + {reduced-size text for logic pins}% +\macrodef{lg\_plen}{lg_plen}{}% + {log}% + {logic pin length in in {\tt L\_unit}s}% +\macrodef{LH\_symbol}{LH_symbol}{([U|D|L|R|{\sl degrees}][I])}% + {log}% + {logic-gate hysteresis symbol; {\tt I:} inverted}% +\macrodef{lin\_ang}{lin_ang}{({\sl line-reference}[,d])}% + {gen}% {the angle of a line or move from {\tt .start} to {\tt .end} of a linear - object (in degrees if arg2={\tt d})} -\macrodef{linethick\_}{linethick_}{({\sl number})} - {gen} - {set line thickness in points} -\macrodef{lin\_leng}{lin_leng}{({\sl line-reference})} - {gen} - {length of a line, equivalent to {\sl line-reference}{\tt .len} - with dpic} -\macrodef{ljust\_}{ljust_}{} - {gen} - {ljust with respect to current direction} + object (in degrees if arg2={\tt d})}% +\macrodef{linethick\_}{linethick_}{({\sl number})}% + {gen}% + {set line thickness in points}% +\macrodef{lin\_leng}{lin_leng}{({\sl line-reference})}% + {gen}% + {length of a line, equivalent to {\sl line-reference}{\tt .len}% + with dpic}% +\macrodef{ljust\_}{ljust_}{}% + {gen}% + {ljust with respect to current direction}% \macrodef{llabel}{llabel}{({\sl label},{\sl label},{\sl label},[{\sl arg4}],% - [{\sl block name}])} - {cct} + [{\sl block name}])}% + {cct}% {Triple label on the left of the body of an element with respect to the current direction \seesect{Labels:}. Labels are placed at the beginning, centre, and end of the last {\tt []} block (or a named @@ -1295,478 +1514,553 @@ n|e|s|w,{\sl length})} {\sl Arg4} can be {\tt above,} {\tt below,} {\tt left,} or {\tt right} to supplement the default relative position. The fifth argument is the optional name of the {\tt []} block to be labelled, - which is {\tt last []} by default} -\macrodef{loc\_}{loc_}{({\sl x}, {\sl y})} - {gen} - {location adjusted for current direction} -\macrodef{log10E\_}{log10E_}{} - {gen} - {constant $\log_{10}(e)$} -\macrodef{loge}{loge}{} - {gen} - {logarithm, base $e$} -\macrodef{log\_init}{log_init}{} - {log} + which is {\tt last []} by default}% +\macrodef{loc\_}{loc_}{({\sl x}, {\sl y})}% + {gen}% + {location adjusted for current direction}% +\macrodef{log10E\_}{log10E_}{}% + {gen}% + {constant $\log_{10}(e)$}% +\macrodef{loge}{loge}{}% + {gen}% + {logarithm, base $e$}% +\macrodef{log\_init}{log_init}{}% + {log}% {initialize environment for logic diagrams - (customizable, reads {\tt liblog.m4})} + (customizable, reads {\tt liblog.m4})}% +\macrodef{loop}{loop}{({\sl initial assignments, test, loop end, statements})}% + {dpictools}% + {$\;\;$ C-like loop. Commas in arg3 and arg4 must + be in quotes or parentheses. Example: + {\tt loop(i=1, i<=3, i+=1, print i)} prints 1, 2, 3.}% \macrodef{Loopover\_}{Loopover_}{(`{\sl variable}',{\sl actions},{\sl - value1, value2, $\ldots$})} - {gen} + value1, value2, $\ldots$})}% + {gen}% {Repeat {\sl actions} with {\sl variable} set successively to {\sl value1, value2, $\ldots$}, setting macro {\tt m4Lx} to 1, 2, - $\ldots$, terminating if {\sl variable} is nul} + $\ldots$, terminating if {\sl variable} is nul}% \macrodef{lpop}{lpop}{({\sl xcoord}, {\sl ycoord}, {\sl radius}, {\sl fill}, - {\sl zero ht})} {gen} + {\sl zero ht})} {gen}% {for lollipop graphs: filled circle with stem to - (xcoord,zeroht)} -\macrodef{lp\_xy}{lp_xy}{} - {log} - {coordinates used by {\tt lg\_pin}} -\macrodef{lswitch}{lswitch}{( \linespec, L|R, {\sl chars} )} - {cct} + (xcoord,zeroht)}% +\macrodef{lp\_xy}{lp_xy}{}% + {log}% + {coordinates used by {\tt lg\_pin}}% +\macrodef{lswitch}{lswitch}{( \linespec, L|R, {\sl chars} )}% + {cct}% {knife switch R=right orientation (default L=left); - {\sl chars}=[O{\tt|}C][D][K][A] O=opening arrow; C=closing arrow; - D=dots; K=closed switch; A=blade arrowhead \seesect{Twoterminal:}} -\macrodef{lthick}{lthick}{} - {gen} - {current line thickness in drawing units} -\macrodef{lt\_}{lt_}{} - {gen} - {left with respect to current direction} -\macrodef{LT\_symbol}{LT_symbol}{(U|D|L|R|{\sl degrees})} - {log} - {logic-gate triangle symbol} -\macrodef{L\_unit}{L_unit}{} - {log} - {logic-element grid size} + {\sl chars}: [O{\tt|}C][D][K][A] O=opening arrow; C=closing arrow; + D=dots; K=closed switch; A=blade arrowhead \seesect{Twoterminal:}}% +\macrodef{lthick}{lthick}{}% + {gen}% + {current line thickness in drawing units}% +\macrodef{lt\_}{lt_}{}% + {gen}% + {left with respect to current direction}% +\macrodef{LT\_symbol}{LT_symbol}{(U|D|L|R|{\sl degrees})}% + {log}% + {logic-gate triangle symbol}% +\macrodef{L\_unit}{L_unit}{}% + {log}% + {logic-element grid size}% % \Letter{M}% -\macrodef{m4\_arrow}{m4_arrow}{(\linespec,{\sl ht},{\sl wid})} - {gen} - {arrow with adjustable head, filled when possible} -\macrodef{m4dupstr}{m4dupstr}{({\sl string},{\sl n},`{\sl name}')} - {gen} +\macrodef{m4\_arrow}{m4_arrow}{(\linespec,{\sl ht},{\sl wid})}% + {gen}% + {arrow with adjustable head, filled when possible}% +\macrodef{m4dupstr}{m4dupstr}{({\sl string},{\sl n},`{\sl name}')}% + {gen}% {Defines {\sl name} as {\sl n} concatenated copies of {\sl - string}.} -\macrodef{m4lstring}{m4lstring}{({\sl arg1},{\sl arg2})} - {gen} + string}.}% +\macrodef{m4lstring}{m4lstring}{({\sl arg1},{\sl arg2})}% + {gen}% {expand {\sl arg1} if it begins - with {\tt sprintf} or {\tt "}, otherwise {\sl arg2}} -\macrodef{m4xpand}{m4xpand}{({\sl arg})} - {gen} - {Evaluate the argument as a macro} -\macrodef{m4xtract}{m4xtract}{(`{\sl string1}',{\sl string2})} - {gen} - {delete {\sl string2} from {\sl string1}, return 1 if present} -\macrodef{manhattan}{manhattan}{} - {gen} - {sets direction cosines for left, right, up, down} -\macrodef{Max}{Max}{({\sl arg, arg, $\ldots$})} - {gen} - {Max of an arbitrary number of inputs} -\macrodef{memristor}{memristor}{({\sl linespec, wid, ht})} - {cct} - {memristor element\seesect{Twoterminal:}} -\macrodef{microphone}{microphone}{( A|U|D|L|R|{\sl degrees, size})} - {cct} + with {\tt sprintf} or {\tt "}, otherwise {\sl arg2}}% +\macrodef{m4xpand}{m4xpand}{({\sl arg})}% + {gen}% + {Evaluate the argument as a macro}% +\macrodef{m4xtract}{m4xtract}{(`{\sl string1}',{\sl string2})}% + {gen}% + {delete {\sl string2} from {\sl string1}, return 1 if present}% +\macrodef{manhattan}{manhattan}{}% + {gen}% + {sets direction cosines for left, right, up, down}% +\macrodef{Magn}{Magn}{({\sl length, height,} U|D|L|R|{\sl degrees})}% + {cct}% + {magnetic action symbol.}% +\macrodef{Max}{Max}{({\sl arg, arg, $\ldots$})}% + {gen}% + {Max of an arbitrary number of inputs}% +\macrodef{memristor}{memristor}{({\sl linespec, wid, ht, attributes})}% + {cct}% + {memristor element\seesect{Twoterminal:}}% +\macrodef{microphone}{microphone}{( A|U|D|L|R|{\sl degrees, size, attributes})}% + {cct}% {microphone; if arg1 = A: upright mic, otherwise arg1 sets direction of standard microphone with {\sl In1} to {\sl In3} defined - \seesect{Composite:}} -\macrodef{Min}{Min}{({\sl arg, arg, $\ldots$})} - {gen} - {Min of an arbitrary number of inputs} + \seesect{Composite:}}% +\macrodef{Min}{Min}{({\sl arg, arg, $\ldots$})}% + {gen}% + {Min of an arbitrary number of inputs}% \macrodef{Mitre\_}{Mitre_}{% - ({\sl Line1,Line2,length,line attributes})} - {gen} + ({\sl Line1,Line2,length,line attributes})}% + {gen}% {e.g., {\tt Mitre\_(L,M)} draws angle at intersection of lines L and M with legs of length arg3 (default {\tt linethick bp\_\_/2}); sets {\tt Here} to intersection - \seesect{Corners:}} + \seesect{Corners:}}% \macrodef{mitre\_}{mitre_}{% - ({\sl Position1,Position2,Position3,length,line attributes})} - {gen} + ({\sl Position1,Position2,Position3,length,line attributes})}% + {gen}% {e.g., {\tt mitre\_(A,B,C)} draws angle ABC with legs - of length arg4 (default {\tt linethick bp\_\_/2}); sets {\tt Here} + of length arg4 (default {\tt linethick bp\_\_/2}); sets {\tt Here}% to Position2 - \seesect{Corners:}} -\macrodef{mm\_\_}{mm__}{} - {gen} - {absolute millimetres} -\macrodef{mosfet}{mosfet}{(\linespec,L|R,{\sl chars},E)} - {cct} + \seesect{Corners:}}% +\macrodef{mm\_\_}{mm__}{}% + {gen}% + {absolute millimetres}% +\macrodef{mosfet}{mosfet}{(\linespec,L|R,{\sl chars},E)}% + {cct}% {MOSFET left or right, included components defined by characters, envelope. - arg 3 chars: - {\tt [u][d]B:} center bulk connection pin; - {\tt D:} D pin and lead; - {\tt E:} dashed substrate; - {\tt F:} solid-line substrate; - {\tt [u][d]G:} G pin to substrate at source; - {\tt [u][d]H:} G pin to substrate at center; - {\tt L:} G pin to channel (obsolete); - {\tt [u][d]M:} G pin to channel, u: at drain end, d: at source end; - {\tt [u][d]M{\sl n}:} multiple gates G0 to G{\sl n}; - {\tt Py:} parallel diode; - {\tt Pz:} parallel zener diode; - {\tt Q:} connect B pin to S pin; - {\tt R:} thick channel; - {\tt [u][d]S:} S pin and lead u: arrow up, d: arrow down; - {\tt [d]T:} G pin to center of channel d: not circle; - {\tt X:} XMOSFET terminal; + arg 3 chars:\\ + {\tt [u][d]B:} center bulk connection pin\\ + {\tt D:} D pin and lead\\ + {\tt E:} dashed substrate\\ + {\tt F:} solid-line substrate\\ + {\tt [u][d]G:} G pin to substrate at source\\ + {\tt [u][d]H:} G pin to substrate at center\\ + {\tt L:} G pin to channel (obsolete)\\ + {\tt [u][d]M:} G pin to channel, u: at drain end, d: at source end\\ + {\tt [u][d]M{\sl n}:} multiple gates G0 to G{\sl n}\\ + {\tt Py:} parallel diode\\ + {\tt Pz:} parallel zener diode\\ + {\tt Q:} connect B pin to S pin\\ + {\tt R:} thick channel\\ + {\tt [u][d]S:} S pin and lead u: arrow up, d: arrow down\\ + {\tt [d]T:} G pin to center of channel d: not circle\\ + {\tt X:} XMOSFET terminal\\ {\tt Z:} simplified complementary MOS - \seesect{Semiconductors:}} -\macrodef{Mux\_ht}{Mux_ht}{} - {cct} - {Mux height parameter in {\tt L\_unit}s} + \seesect{Semiconductors:}}% +\macrodef{Mux\_ht}{Mux_ht}{}% + {cct}% + {Mux height parameter in {\tt L\_unit}s}% \macrodef{Mux}{Mux}{({\sl n},{\sl label}, - {\tt [L][B|H|X][N[{\sl n}]|S[{\sl n}]][[N]OE], {\sl wid},{\sl ht}})} - {log} + {\tt [L][B|H|X][N[{\sl n}]|S[{\sl n}]][[N]OE], {\sl wid}, {\sl ht}, + {\sl attributes}})}% + {log}% {binary multiplexer, $n$ inputs, {\tt L} reverses input pin numbers, {\tt B} display binary pin numbers, {\tt H} display hexadecimal pin numbers, {\tt X} do not print pin numbers, {\tt N[{\sl n}]} puts Sel or Sel$0$ .. Sel$n$ at the top (i.e., to the left of the drawing direction), {\tt - S[{\sl n}]} puts the Sel inputs at the bottom (default) {\tt OE} - ({\tt N=}negated) {\tt OE} pin \seesect{Logicgates:}} -\macrodef{Mux\_wid}{Mux_wid}{} - {cct} - {Mux width parameter in {\tt L\_unit}s} -\macrodef{Mx\_pins}{Mx_pins}{} - {log} - {max number of gate inputs without wings} + S[{\sl n}]} puts the Sel inputs at the bottom (default) {\tt OE}% + ({\tt N}: negated) {\tt OE} pin \seesect{Logicgates:}}% +\macrodef{Mux\_wid}{Mux_wid}{}% + {cct}% + {Mux width parameter in {\tt L\_unit}s}% +\macrodef{Mx\_pins}{Mx_pins}{}% + {log}% + {max number of gate inputs without wings}% % \Letter{N}% -\macrodef{NAND\_gate}{NAND_gate}{({\sl n},N)} - {log} - {`nand' gate, 2 or {\sl n\/} inputs; N=negated input. - Otherwise, arg1 can be a sequence of letters {\tt P|N} to define +\macrodef{NAND\_gate}{NAND_gate}{({\tt {\sl n}, [N][B], + [{\sl wid}, [{\sl ht}]], {\sl attributes}})}% + {log}% + {`nand' gate, 2 or {\sl n\/} inputs ($0 \leq n \leq 16$); + {\tt N}: negated inputs; {\tt B}: box shape. + Alternatively, {\tt NAND\_gate({\sl chars}, [B], {\sl wid}, + {\sl ht}, {\sl attributes})}, where + arg1 is a sequence of letters {\tt P|N} to define normal or negated inputs. - \seesect{Logicgates:}} -\macrodef{N\_diam}{N_diam}{} - {log} - {diameter of `not' circles in {\tt L\_unit}s} -\macrodef{NeedDpicTools}{NeedDpicTools}{} - {gen} + \seesect{Logicgates:}}% +\macrodef{N\_diam}{N_diam}{}% + {log}% + {diameter of `not' circles in {\tt L\_unit}s}% +\macrodef{NeedDpicTools}{NeedDpicTools}{}% + {gen}% {executes {\tt copy "HOMELIB\_/dpictools.pic"} if the file has - not been read} -\macrodef{neg\_}{neg_}{} - {gen} - {unary negation} -\macrodef{ne\_}{ne_}{} - {gen} - {.ne with respect to current direction} -\macrodef{n\_}{n_}{} - {gen} - {.n with respect to current direction} -\macrodef{norator}{norator}{(\linespec,{\sl width},{\sl ht})} - {cct} - { norator two-terminal element \seesect{Twoterminal:}} -\macrodef{NOR\_gate}{NOR_gate}{({\sl n},N)} - {log} - {`nor' gate, 2 or {\sl n\/} inputs; N=negated input. + not been read}% +\macrodef{neg\_}{neg_}{}% + {gen}% + {unary negation}% +\macrodef{ne\_}{ne_}{}% + {gen}% + {.ne with respect to current direction}% +\macrodef{n\_}{n_}{}% + {gen}% + {.n with respect to current direction}% +\macrodef{norator}{norator}{(\linespec,{\sl width},{\sl ht},{\sl attributes})}% + {cct}% + { norator two-terminal element \seesect{Twoterminal:}}% +\macrodef{NOR\_gate}{NOR_gate}{({\sl n},N)}% + {log}% + {`nor' gate, 2 or {\sl n\/} inputs; {\tt N}: negated input. Otherwise, arg1 can be a sequence of letters {\tt P|N} to define normal or negated inputs. - \seesect{Logicgates:}} -\macrodef{NOT\_circle}{NOT_circle}{} - {log} - {`not' circle} -\macrodef{NOT\_gate}{NOT_gate}{(\linespec,[B][N|n],{\sl wid},{\sl -height})} - {log} + \seesect{Logicgates:}}% +\macrodef{NOT\_circle}{NOT_circle}{}% + {log}% + {`not' circle}% +\macrodef{NOT\_gate}{NOT_gate}{(\linespec,[B][N|n],{\sl wid},{\sl height}, + {\sl attributes})}% + {log}% {`not' gate. When {\sl linespec} is blank then the element is composite and In1, Out, C, NE, and SE are defined; otherwise the element is drawn as a - two-terminal element. arg2: {\tt B}=box gate, {\tt N}=not circle at - input and output, {\tt n}=not circle at input only - \seesect{Logicgates:}} -\macrodef{NOT\_rad}{NOT_rad}{} - {log} - {`not' radius in absolute units} -\macrodef{NPDT}{NPDT}{({\sl npoles,}[R])} - {cct} + two-terminal element. arg2: {\tt B}: box gate, {\tt N}: not circle at + input and output, {\tt n}: not circle at input only + \seesect{Logicgates:}}% +\macrodef{NOT\_rad}{NOT_rad}{}% + {log}% + {`not' radius in absolute units}% +\macrodef{NPDT}{NPDT}{({\sl npoles,}[R])}% + {cct}% {Double-throw switch; {\sl npoles:} number of poles; - {\tt R}= right orientation with respect to drawing direction - \seesect{Composite:}} + {\tt R}: right orientation with respect to drawing direction + \seesect{Composite:}}% \macrodef{nport}{nport}{({\sl box spec{\tt ;}other commands, -nw,nn,ne,ns,space ratio,pin lgth,style, other commands})} - {cct} +nw,nn,ne,ns,space ratio,pin lgth,style, other commands})}% + {cct}% { Default is a standard-box twoport. Args 2 to 5 are the number of ports to be drawn on w, n, e, s sides. The port pins are named by side, number, and by a or b pin, e.g., W1a, W1b, W2a, $\ldots$ Arg 6 specifies the ratio of port width to interport space (default 2), and arg 7 is the pin length. Set arg 8 to N to omit the dots on the port pins. Arguments 1 and 9 allow customizations - \seesect{Composite:}} -\macrodef{N\_rad}{N_rad}{} - {log} - {radius of `not' circles in {\tt L\_unit}s} + \seesect{Composite:}}% +\macrodef{N\_rad}{N_rad}{}% + {log}% + {radius of `not' circles in {\tt L\_unit}s}% \macrodef{nterm}{nterm}{({\sl box spec{\tt ;}other commands, -nw,nn,ne,ns,pin lgth,style, other commands})} - {cct} +nw,nn,ne,ns,pin lgth,style, other commands})}% + {cct}% {n-terminal box macro (default three pins). Args 2 to 5 are the number of pins to be drawn on W, N, E, S sides. The pins are named by side and number, e.g. W1, W2, N1, $\ldots$ Arg 6 is the pin length. Set arg 7 to N to omit the dots on the pins. Arguments 1 and 8 allow customizations, e.g. {\tt nterm(,{,},{,},{,}N,"\$a\$" at Box.w ljust,"\$b\$" at Box.e rjust, - "\$c\$" at Box.s above)} } -\macrodef{nullator}{nullator}{(\linespec,{\sl width},{\sl ht})} - {cct} - { nullator two-terminal element \seesect{Twoterminal:}} -\macrodef{nw\_}{nw_}{} - {gen} - {.nw with respect to current direction} -\macrodef{NXOR\_gate}{NXOR_gate}{({\sl n},N)} - {log} - {`nxor' gate, 2 or {\sl n\/} inputs; N=negated input. + "\$c\$" at Box.s above)} }% +\macrodef{nullator}{nullator}{(\linespec,{\sl width},{\sl ht},{\sl attributes})}% + {cct}% + { nullator two-terminal element \seesect{Twoterminal:}}% +\macrodef{nw\_}{nw_}{}% + {gen}% + {.nw with respect to current direction}% +\macrodef{NXOR\_gate}{NXOR_gate}{({\sl n},N)}% + {log}% + {`nxor' gate, 2 or {\sl n\/} inputs; {\tt N}: negated input. Otherwise, arg1 can be a sequence of letters {\tt P|N} to define normal or negated inputs. - \seesect{Logicgates:}} + \seesect{Logicgates:}}% % \Letter{O}% -\macrodef{opamp}{opamp}{(\linespec,{\sl label},{\sl -label},{\sl size},{\sl - chars}, other commands)} - {cct} - {operational amplifier with $-,$ $+$ or other internal labels, - specified size. {\sl chars:} {\tt P=} add power connections, {\tt - R=} swap In1, In2 labels, {\tt T=} truncated point. The internally +\macrodef{opamp}{opamp}{\tt (\linespec,{\sl label, label, size|keys, chars, + other commands})}% + {cct}% + {operational amplifier with $-,$ $+$ or other internal labels and + specified size, drawn in a {\tt [ ]} block. + {\sl chars:} {\tt P} add power connections, {\tt + R} swap {\sl In1, In2 labels,} {\tt T} truncated point. The internally defined positions are {\sl W, N, E, S, Out, NE, SE, In, In2}, and - the (obsolete) positions {\sl E1 = NE, E2 = SE}. The first and last - arguments allow added customizations - \seesect{Composite:}} -\macrodef{open\_arrow}{open_arrow}{(\linespec,{\sl ht},{\sl wid})} - {gen} - {arrow with adjustable open head} -\macrodef{OR\_gate}{OR_gate}{({\sl n},N)} - {log} - {`or' gate, 2 or {\sl n\/} inputs; N=negated input. + the (obsolete) positions {\sl E1 = NE, E2 = SE}. Instead of a size + value, arg4 can be a key-value sequence. The keys are: + {\tt lgth={\sl expr};}, + {\tt wdth={\sl expr};}, + {\tt body={\sl attributes};}, e.g., {\tt body=shaded "{\sl color}"}. + \seesect{Composite:}}% +\macrodef{open\_arrow}{open_arrow}{(\linespec,{\sl ht},{\sl wid})}% + {gen}% + {arrow with adjustable open head}% +\macrodef{OR\_gate}{OR_gate}{({\sl n},[N][B], {\sl wid,} {\sl ht,}% + {\sl attributes})}% + {log}% + {Or gate, $n$ inputs ($0 \leq n \leq 16$); arg2: {\tt N}: negated inputs; + {\tt B}: box gate. Otherwise, arg1 can be a sequence of letters {\tt P|N} to define normal or negated inputs. - \seesect{Logicgates:}} -\macrodef{OR\_gen}{OR_gen}{($n$,{\sl chars},[{\sl wid},[{\sl ht}]])} - {log} - {general OR gate: $n$=number of inputs $(0\leq n\leq 16)$; - {\sl chars:} B=base and straight sides; A=Arcs; - [N]NE,[N]SE,[N]I,[N]N,[N]S=inputs or circles; [N]P=XOR arc; - [N]O=output; C=center. + \seesect{Logicgates:}}% +\macrodef{OR\_gen}{OR_gen}{($n$,{\sl chars},[{\sl wid},[{\sl ht}]], + {\sl attributes})}% + {log}% + {General OR gate: $n$=number of inputs $(0\leq n\leq 16)$; + {\sl chars:}% + {\tt B}: base and straight sides;\\ + {\tt A}: arcs;\\ + {\tt [N]NE,[N]SE,[N]I,[N]N,[N]S}: inputs or circles;\\ + {\tt [N]P}: XOR arc;\\ + {\tt [N]O}: output; C=center.\\ Otherwise, arg1 can be a sequence of letters {\tt P|N} to define - normal or negated inputs.} -\macrodef{OR\_rad}{OR_rad}{} - {log} - {radius of OR input face in {\tt L\_unit}s} + normal or negated inputs. If arg5 contains {\tt shaded rgbstring(...)}% + the arguments of {\tt rgbstring} may not contain parentheses.}% +\macrodef{OR\_rad}{OR_rad}{}% + {log}% + {radius of OR input face in {\tt L\_unit}s}% % \Letter{P}% \macrodef{parallel\_}{parallel_}{(\char96{\sl elementspec}\char39,% - \char96{\sl elementspec}\char39 $\ldots$)} - {cct} - { Parallel combination of two-terminal elements in a {\tt [ - ]} block. - Each argument is a {\em quoted} elementspec of the form {\tt[Sep={\sl - val};][{\sl Label}:] {\sl element}; [{\sl attributes}]} where - an {\sl attribute} is of the form {\tt[llabel($\ldots$);] | - [rlabel($\ldots$);] | [b\_current($\ldots$);]}. An argument may - also be {\tt series\_($\ldots$)} or {\tt parallel\_($\ldots$)} {\em - without} attributes or quotes. Sep={\sl val}; in the first branch - sets the default separation of all branches to {\sl val}; in a later - element Sep={\sl val}; applies only to that branch. An element may - have normal arguments but should not change the drawing direction. - \seesect{Seriesandparallel:}} -\macrodef{pconnex}{pconnex}{(R|L|U|D|{\sl degrees},{\sl chars})} - {cct} - {power connectors, arg 1: drawing direction; {\sl chars:} - {\tt R}=right orientation, {\tt M|F}= male, female, {\tt A|AC}=115V, - 3 prong, B=box, C=circle, {\tt P}= PC connector, {\tt D}= 2-pin - connector, {\tt G|GC}= GB 3-pin, {\tt J}= 110V 2-pin - \seesect{Composite:}} -\macrodef{pc\_\_}{pc__}{} - {gen} - {absolute points} -\macrodef{perpto}{perpto}{({\sl Pos1, Line, Point})} - {gen} + \char96{\sl elementspec}\char39 $\ldots$)}% + {cct}% + { Parallel combination of two-terminal elements in a {\tt []} block. + Each argument is a {\em quoted} elementspec of the form\\ + {\tt[Sep={\sl val};][{\sl Label}:]{\sl element};[{\sl attributes}]} where + an {\sl attribute} is of the form\\ + {\tt[llabel($\ldots$);]|[rlabel($\ldots$);]|[b\_current($\ldots$);]}.\\ + An argument may also be {\tt series\_($\ldots$)} or {\tt + parallel\_($\ldots$)} {\em without} attributes or quotes. Sep={\sl + val}; in the first branch sets the default separation of all branches + to {\sl val}; in a later element Sep={\sl val}; applies only to + that branch. An element may have normal arguments but should not + change the drawing direction. + \seesect{Seriesandparallel:}}% +\macrodef{pconnex}{pconnex}{(R|L|U|D|{\sl degrees},{\sl chars, attributes})}% + {cct}% + {power connectors, arg 1: drawing direction; {\sl chars:}\\ + {\tt R} (right orientation)\\ + {\tt M|F} (male, female)\\ + {\tt A[B]|AC} (115V 3-prong, B: default box, C: circle)\\ + {\tt P} (PC connector)\\ + {\tt D} (2-pin connector)\\ + {\tt G|GC} (GB 3-pin)\\ + {\tt J} (110V 2-pin) + \seesect{Composite:}}% +\macrodef{pc\_\_}{pc__}{}% + {gen}% + {absolute points}% +\macrodef{perpto}{perpto}{({\sl Pos1, Line, Point})}% + {gen}% {{\sl Point} is the label for the point on {\sl Line} of the perpendicular - from {\sl Point} to {\sl Line}.} -\macrodef{PerpTo}{PerpTo}{({\sl Pos1, Pos2, Pos3})} - {gen} + from {\sl Point} to {\sl Line}.}% +\macrodef{PerpTo}{PerpTo}{({\sl Pos1, Pos2, Pos3})}% + {gen}% {The point between Pos2 and Pos3 of intersection of the perpendicular to Pos1, i.e., the perpendicular projection of Pos1 onto the line - from Pos2 to Pos3.} -\macrodef{pi\_}{pi_}{} - {gen} - {$\pi$} -\macrodef{plug}{plug}{(U|D|L|R|{\sl degrees},[2|3][R])} - {cct} + from Pos2 to Pos3.}% +\macrodef{pi\_}{pi_}{}% + {gen}% + {$\pi$}% +\macrodef{plug}{plug}{(U|D|L|R|{\sl degrees},[2|3][R])}% + {cct}% {arg1: drawing direction; string arg2: {\tt R} right orientation, - {\tt 2|3} number of conductors \seesect{Composite:}} -\macrodef{pmod}{pmod}{({\sl integer}, {\sl integer})} - {gen} - {+ve $\hbox{mod}(M,N)$ e.g., $\hbox{\tt pmod}(-3,5)=2$} -\macrodef{point\_}{point_}{({\sl angle})} - {gen} - {(radians) set direction cosines} -\macrodef{Point\_}{Point_}{({\sl integer})} - {gen} - {sets direction cosines in degrees \seesect{Placing:}} -\macrodef{polar\_}{polar_}{({\sl x},{\sl y})} - {gen} - {rectangular-to polar conversion} + {\tt 2|3} number of conductors \seesect{Composite:}}% +\macrodef{pmod}{pmod}{({\sl integer}, {\sl integer})}% + {gen}% + {+ve $\hbox{mod}(M,N)$ e.g., $\hbox{\tt pmod}(-3,5)=2$}% +\macrodef{point\_}{point_}{({\sl angle})}% + {gen}% + {(radians) set direction cosines}% +\macrodef{Point\_}{Point_}{({\sl integer})}% + {gen}% + {sets direction cosines in degrees \seesect{Placing:}}% +\macrodef{polar\_}{polar_}{({\sl x},{\sl y})}% + {gen}% + {rectangular-to polar conversion}% +\macrodef{polygon}{polygon}{({\sl n},{\sl keys})}% + {gen}% + {Regular polygon in a {\tt []} block. The keys are + {\tt line={\sl line attributes};} (e.g., {\tt dashed shaded "blue"}), + {\tt rot={\sl degrees};} (angle of first internal vertex {\tt V[0]}), + {\tt side|rad={\sl expression};} size by side length or by radius. + The internal defined points are the centre {\tt C} and vertices + {\tt V[0]} $\ldots$ {\tt V[{\sl n}-1]}. }% +\macrodef{posarray}{posarray}{({\sl Name, Position1, Position2, \ldots})}% + {dpictools}% + {$\;\;$ Populate a singly-subscripted array of positions: + {\tt {\sl Name}[1]:{\sl Position1;}% + {\sl Name}[2]={\sl Position2;} \ldots}.}% +\macrodef{posarray2}{posarray2}{({\sl Name, expr, Position1, Position2, + \ldots})}% + {dpictools}% + {$\;\;$ Populate a doubly-subscripted array of positions: + {\tt {\sl Name}[{\sl expr},1]={\sl Position1;}% + {\sl Name}[{\sl expr},2]={\sl Position2;} \ldots}.}% \macrodef{potentiometer}{potentiometer}{(\linespec,% - {\sl cycles},{\sl fractional pos},{\sl length},$\cdots$)} {cct} + {\sl cycles},{\sl fractional pos},{\sl length},$\cdots$)} {cct}% {resistor with taps T1, T2, $\ldots$ with specified fractional positions and lengths (possibly neg) - \seesect{Composite:}} -\macrodef{print3D}{print3D}{(x,y,z)} - {3D} {write out triple for debugging} -\macrodef{prod\_}{prod_}{({\sl a},{\sl b})} - {gen} - {binary multiplication} -\macrodef{project}{project}{({\sl x},({\sl y},({\sl z})} - {3D} {3D to 2D projection onto the plane perpendicular to the view - vector with - angles defined by {\tt setview({\sl azim, elev})}} -\macrodef{proximity}{proximity}{(\sl linespec)} - {cct} - {proximity detector (= {\tt consource(,P)})} -\macrodef{psset\_}{psset_}{({\sl PSTricks settings})} - {gen} - {set PSTricks parameters} -\macrodef{PtoL}{PtoL}{({\sl position}, U|D|L|R|{\sl degrees}, {\sl length}) } - {gen} + \seesect{Composite:}}% +\macrodef{print3D}{print3D}{(x,y,z)}% + {3D} {write out triple for debugging}% +\macrodef{prod\_}{prod_}{({\sl a},{\sl b})}% + {gen}% + {binary multiplication}% +\macrodef{project}{project}{({\sl x},{\sl y},{\sl z})}% + {3D}% + {3D to 2D projection onto the plane perpendicular to the view + vector {\tt View3D} with angles defined by + {\tt setview({\sl azimuth, elevation, rotation})}.}% +\macrodef{Proxim}{Proxim}{({\sl size,} U|D|L|R|{\sl degrees, attributes})}% + {cct}% + {proximity detector with fillable body.}% +\macrodef{proximity}{proximity}{(\sl linespec)}% + {cct}% + {proximity detector (= {\tt consource(,P)})}% +\macrodef{psset\_}{psset_}{({\sl PSTricks settings})}% + {gen}% + {set PSTricks parameters}% +\macrodef{PtoL}{PtoL}{({\sl position}, U|D|L|R|{\sl degrees}, {\sl length}) }% + {gen}% {Evaluates to {\tt from {\sl position} to - {\sl position} + Rect\_({\sl length, angle}) } - from the polar-coordinate data in the arguments } -\macrodef{pt\_\_}{pt__}{} - {gen} - {\TeX\ point-size factor, in scaled inches, ({\tt *scale/72.27})} -\macrodef{ptrans}{ptrans}{(\linespec, [R|L])} - {cct} + {\sl position} + Rect\_({\sl length, angle}) }% + from the polar-coordinate data in the arguments }% +\macrodef{pt\_\_}{pt__}{}% + {gen}% + {\TeX\ point-size factor, in scaled inches, ({\tt *scale/72.27})}% +\macrodef{ptrans}{ptrans}{(\linespec, [R|L])}% + {cct}% {pass transistor; {\tt L=} left orientation - \seesect{Semiconductors:}} -\macrodef{pushkey\_}{pushkey_}{({\sl string, key, default value,}[N])} - {gen} + \seesect{Semiconductors:}}% +\macrodef{pushkey\_}{pushkey_}{({\sl string, key, default value,}[N])}% + {gen}% {Key-value definition. If {\sl string} contains the substring - {\sl key}{\tt =}{\sl expr} then macro {\tt m4{\sl key}} + {\sl key}{\tt =}{\sl expr} then macro {\tt m4{\sl key}}% is defined using {\tt pushdef()} to expand to {\tt ({\sl expr})}, or to {\tt ({\sl default value})} if the substring is missing. Arg 1 can contain several such substrings separated by semicolons. If arg4 is nonblank, the parentheses are omitted. - \seesect{Macroarguments:}} -\macrodef{pushkeys\_}{pushkeys_}{({\sl string, key sequence})} - {gen} + \seesect{Macroarguments:}}% +\macrodef{pushkeys\_}{pushkeys_}{({\sl string, key sequence})}% + {gen}% {Multiple key-value definitions. Arg 2 is a semicolon-separated - sequence of terms of the form {\tt {\sl key}:{\sl default value}:[N]} + sequence of terms of the form {\tt {\sl key}:{\sl default value}:[N]}% which must contain no semicolons and the default values contain no colons. Macro {\tt pushkey\_} is applied to each of the terms in order. - \seesect{Macroarguments:}} -\macrodef{pvcell}{pvcell}{({\sl linespec, width, height})} - {cct} - {PV cell} -\macrodef{px\_\_}{px__}{} - {gen} - {absolute SVG screen pixels} + \seesect{Macroarguments:}}% +\macrodef{pvcell}{pvcell}{({\sl linespec, width, height, attributes})}% + {cct}% + {PV cell}% +\macrodef{px\_\_}{px__}{}% + {gen}% + {absolute SVG screen pixels}% % \Letter{R}% -\macrodef{rarrow}{rarrow}{({\sl label,{\tt ->|<-},{\sl dist}})} - {cct} +\macrodef{randn}{randn}{({\sl array name, $n,$ mean, stddev})}% + {dpictools}% + {$\;\;$ Assign $n$ Gaussian random numbers in array + $\hbox{\sl name}[1], \hbox{\sl name}[2], \ldots \hbox{\sl name}[n]$ + with given mean and standard deviation.}% +\macrodef{rarrow}{rarrow}{({\sl label,{\tt ->|<-},{\sl dist}})}% + {cct}% {arrow {\sl dist} to right of last-drawn 2-terminal element - \seesect{Branchcurrent:}} -\macrodef{Rect\_}{Rect_}{({\sl radius},{\sl angle})} - {gen} - {(deg) polar-to-rectangular conversion} -\macrodef{rect\_}{rect_}{({\sl radius},{\sl angle})} - {gen} - {(radians) polar-rectangular conversion} + \seesect{Branchcurrent:}}% +\macrodef{Rect\_}{Rect_}{({\sl radius},{\sl angle})}% + {gen}% + {(deg) polar-to-rectangular conversion}% +\macrodef{rect\_}{rect_}{({\sl radius},{\sl angle})}% + {gen}% + {(radians) polar-rectangular conversion}% \macrodef{reed}{reed}{({\sl linespec, width, height, box attribues}, -[R][C])} - {cct} +[R][C])}% + {cct}% {Enclosed reed two-terminal contact; - {\tt R}=right orientation; {\tt C}=closed contact; e.g., {\tt - reed(,,dimen\_/5,shaded "lightgreen"} \seesect{Composite:}} + {\tt R}: right orientation; {\tt C}: closed contact; e.g., {\tt + reed(,{,}dimen\_/5,shaded "lightgreen"} \seesect{Composite:}}% \macrodef{relaycoil}{relaycoil}{({\sl chars, wid, ht,} R|L|U|D|{\sl -degrees})} - {cct} +degrees, attributes})}% + {cct}% {chars: - {\tt X}=or default: external lines from A2 and B2; {\tt AX}=external - lines at positions A1,A3; {\tt BX}=external lines at positions - B1,B3; {\tt NX}=no lines at positions A1,A2,A3,B1,B2,B3; {\tt - SO}=slow operating; {\tt SOR}=slow operating and release; {\tt - SR}=slow release; {\tt HS}=high speed; {\tt NAC}=unaffected by AC - current; {\tt AC AC}=current; {\tt ML}=mechanically latched; {\tt - PO}=polarized; {\tt RM}=remanent; {\tt RH}=remanent; {\tt TH}=thermal; - {\tt EL}=electronic - \seesect{Composite:}} -\macrodef{relay}{relay}{({\sl number of poles, chars})} - {cct} - {relay: n poles (default 1), {\sl chars:} {\tt O}=normally open, - {\tt C}=normally closed, {\tt P}=three position, default double - throw, {\tt L}=drawn left (default), {\tt R}=drawn right, {\tt - Th}=thermal. Argument 3={\tt [L|R]} is deprecated but works for - backward compatibility - \seesect{Composite:}} -\macrodef{resetdir\_}{resetdir_)}{} - {gen} - {resets direction set by {\tt setdir\_}} -\macrodef{resetrgb}{resetrgb}{} - {gen} - {cancel {\tt r\_, g\_, b\_} color definitions} -\macrodef{resistor}{resistor}{(\linespec,n|E,{\sl chars}, {\sl - cycle wid})} - {cct} - {resistor, n cycles (default 3), {\sl chars:} - {\tt AC}=general complex element, - {\tt E}={\tt ebox}, {\tt ES}={\tt ebox} with slash, {\tt Q}=offset, - {\tt H}=squared, {\tt N}=IEEE, {\tt B}=not burnable, {\tt V}=varistor - variant, {\tt R}=right-oriented, {\sl cycle width} (default {\tt - dimen\_}$/6$) \seesect{Twoterminal:}} -\macrodef{resized}{resized}{({\sl factor},`{\sl macro name}',args)} - {cct} - {scale the element body size by {\sl factor}} -\macrodef{restorem4dir}{restorem4dir}{([`{\sl stack name}'])} - {gen} + {\tt X}: or default: external lines from A2 and B2;\\ + {\tt AX}: external lines at positions A1,A3;\\ + {\tt BX}: external lines at positions B1,B3;\\ + {\tt NX}: no lines at positions A1,A2,A3,B1,B2,B3;\\ + {\tt SO}: slow operating;\\ + {\tt SOR}: slow operating and release;\\ + {\tt SR}: slow release;\\ + {\tt HS}: high speed;\\ + {\tt NAC}: unaffected by AC current;\\ + {\tt AC}: AC current;\\ + {\tt ML}: mechanically latched;\\ + {\tt PO}: polarized;\\ + {\tt RM}: remanent;\\ + {\tt RH}: remanent;\\ + {\tt TH}: thermal;\\ + {\tt EL}: electronic + \seesect{Composite:}}% +\macrodef{relay}{relay}{({\sl number of poles, chars, attributes})}% + {cct}% + {relay: n poles (default 1),\\ + {\sl chars:} {\tt O}: normally open,\\ + {\tt C}: normally closed,\\ + {\tt P}: three position, default double throw,\\ + {\tt L}: drawn left (default),\\ + {\tt R}: drawn right,\\ + {\tt Th}: thermal.\seesect{Composite:}}% +\macrodef{resetdir\_}{resetdir_)}{}% + {gen}% + {resets direction set by {\tt setdir\_}}% +\macrodef{resetrgb}{resetrgb}{}% + {gen}% + {cancel {\tt r\_, g\_, b\_} color definitions}% +\macrodef{resistor}{resistor}{(\linespec, n|E, {\sl chars}, {\sl cycle wid})}% + {cct}% + {resistor, n cycles (default 3), {\sl chars:}\\ + {\tt AC}: general complex element,\\ + {\tt E}: {\tt ebox},\\ + {\tt ES}: {\tt ebox} with slash,\\ + {\tt Q}: offset,\\ + {\tt H}: squared,\\ + {\tt N}: IEEE,\\ + {\tt B}: not burnable,\\ + {\tt V}: varistor variant,\\ + {\tt R}: right-oriented,\\ + {\sl cycle width} (default {\tt dimen\_}$/6$) + \seesect{Twoterminal:}}% +\macrodef{resized}{resized}{({\sl factor},`{\sl macro name}',args)}% + {cct}% + {scale the element body size by {\sl factor}}% +\macrodef{restorem4dir}{restorem4dir}{([`{\sl stack name}'])}% + {gen}% {Restore m4 direction parameters from the named stack; - default {\tt `savm4dir\_'}} -\macrodef{reversed}{reversed}{(`{\sl macro name}',args)} - {cct} - {reverse polarity of 2-terminal element} -\macrodef{rgbdraw}{rgbdraw}{({\sl color triple}, {\sl drawing commands})} - {gen} + default {\tt `savm4dir\_'}}% +\macrodef{reversed}{reversed}{(`{\sl macro name}',args)}% + {cct}% + {reverse polarity of 2-terminal element}% +\macrodef{rgbdraw}{rgbdraw}{({\sl color triple}, {\sl drawing commands})}% + {gen}% {color drawing for PSTricks, pgf, MetaPost, SVG postprocessors; (color entries are 0 to 1), see {\tt setrgb} \seesect{Semiconductors:}. Exceptionally, the color of SVG arrows other than the default black has to be defined using the - {\tt outlined }{\sl string} and {\tt shaded }{\sl string} constructs.} -\macrodef{rgbfill}{rgbfill}{({\sl color triple}, {\sl closed path})} - {gen} + {\tt outlined }{\sl string} and {\tt shaded }{\sl string} constructs.}% +\macrodef{rgbfill}{rgbfill}{({\sl color triple}, {\sl closed path})}% + {gen}% {fill with arbitrary color (color entries are 0 to 1); see {\tt - setrgb}\seesect{Semiconductors:}} -\macrodef{rgbstring}{rgbstring}{({\sl color triple or color name})} - {gen} + setrgb}\seesect{Semiconductors:}}% +\macrodef{rgbstring}{rgbstring}{({\sl color triple or color name})}% + {gen}% {evaluates to a string compatible with the postprocessor in use to go with {\tt colored}, {\tt shaded}, or {\tt outlined} attributes. (PSTricks, metapost, pgf-tikz, pdf, postscript, svg). The arguments are fractions in the range $[0,1]$; For example, {\tt box outlined rgbstring(0.1,0.2,0.7) shaded rgbstring(0.75,0.5,0.25)}. For those postprocessors that allow it, there can be one argument which is the - name of a defined color} + name of a defined color}% +\macrodef{rgbtocmyk}{rgbtocmyk}{({\sl r, g, b, c, m, y, k})}% + {dpictools}% + {$\;\;$ rgb to cmyk values in the range 0 to 100.}% +\macrodef{rgbtohsv}{rgbtohsv}{({\sl r, g, b, h, s, v})}% + {dpictools}% + {$\;\;$ rgb color triple to hsv with {\sl h} range 0 to 360.}% \macrodef{RightAngle}{RightAngle}{({\sl Pos1, Pos2, Pos3, line len, - attributes})} {gen} + attributes})} {gen}% {Draw a right-angle symbol at {\sl Pos2}, of size given by arg4. Arg5 = - line attributes, e.g., {\tt outlined "gray"}} -\macrodef{right\_}{right_}{} - {gen} - {set current direction right \seesect{Placing:}} -\macrodef{rjust\_}{rjust_}{} - {gen} - {right justify with respect to current direction} + line attributes, e.g., {\tt outlined "gray"}}% +\macrodef{right\_}{right_}{}% + {gen}% + {set current direction right \seesect{Placing:}}% +\macrodef{rjust\_}{rjust_}{}% + {gen}% + {right justify with respect to current direction}% \macrodef{rlabel}{rlabel}{({\sl label},{\sl label},{\sl label},[{\sl arg4}],% - [{\sl block name}])} - {cct} + [{\sl block name}])}% + {cct}% {Triple label on the right of the body of an element with respect to the current direction \seesect{Labels:}. Labels are placed at the beginning, centre, and end of the last {\tt []} block (or a named @@ -1775,54 +2069,54 @@ degrees})} {\sl Arg4} can be {\tt above,} {\tt below,} {\tt left,} or {\tt right} to supplement the default relative position. The fifth argument is the optional name of the {\tt []} block to be labelled, - which is {\tt last []} by default} -\macrodef{rot3Dx}{rot3Dx}{({\sl radians,x,y,z})} - {3D} {rotates x,y,z about x axis} -\macrodef{rot3Dy}{rot3Dy}{({\sl radians,x,y,z})} - {3D} {rotates x,y,z about y axis} -\macrodef{rot3Dz}{rot3Dz}{({\sl radians,x,y,z})} - {3D} {rotates x,y,z about z axis} -\macrodef{rotbox}{rotbox}{({\sl wid,ht,type},[r|t={\sl val}])} - {gen} + which is {\tt last []} by default}% +\macrodef{rot3Dx}{rot3Dx}{({\sl radians,x,y,z})}% + {3D} {rotates x,y,z about x axis}% +\macrodef{rot3Dy}{rot3Dy}{({\sl radians,x,y,z})}% + {3D} {rotates x,y,z about y axis}% +\macrodef{rot3Dz}{rot3Dz}{({\sl radians,x,y,z})}% + {3D} {rotates x,y,z about z axis}% +\macrodef{rotbox}{rotbox}{({\sl wid,ht,type},[r|t={\sl val}])}% + {gen}% {box oriented in current direction in {\tt [ ]} block; - {\sl type}= e.g. {\tt dotted shaded "green".} Defined internal + {\sl type=} e.g. {\tt dotted shaded "green".} Defined internal locations: N, E, S, W (and NE, SE, NW, SW if arg4 is blank). If arg4 is {\tt r=}{\sl val} then corners have radius {\sl val}. If arg4 is {\tt t=}{\sl val} then a spline with tension {\sl val} is used to draw - a ``superellipse,'' and the bounding box is then only approximate. } -\macrodef{rotellipse}{rotellipse}{({\sl wid,ht,attributes})} - {gen} + a ``superellipse,'' and the bounding box is then only approximate. }% +\macrodef{rotellipse}{rotellipse}{({\sl wid,ht,attributes})}% + {gen}% {ellipse oriented in current direction in {\tt [ ]} block; e.g. {\tt Point\_(45); rotellipse(,{},dotted fill\_(0.9)).} Defined - internal locations: N, S, E, W.} -\macrodef{Rot\_}{Rot_}{({\sl position, degrees})} - {gen} - {rotate position by degrees} -\macrodef{rot\_}{rot_}{({\sl x, y, angle})} - {gen} - {rotate {\sl x,y} by theta radians} -\macrodef{round}{round}{(at {\sl location,line thickness,attributes})} - {gen} + internal locations: N, S, E, W.}% +\macrodef{Rot\_}{Rot_}{({\sl position, degrees})}% + {gen}% + {rotate position by degrees}% +\macrodef{rot\_}{rot_}{({\sl x, y, angle})}% + {gen}% + {rotate {\sl x,y} by theta radians}% +\macrodef{round}{round}{(at {\sl location,line thickness,attributes})}% + {gen}% {filled circle for rounded corners; attributes={\tt colored - "gray"} + "gray"}% for example; leaves {\tt Here} unchanged if arg1 is blank - \seesect{Corners:}} -\macrodef{rpoint\_}{rpoint_}{(\linespec)} - {gen} - {set direction cosines} -\macrodef{rpos\_}{rpos_}{({\sl position})} - {gen} - {Here + {\sl position}} -\macrodef{r\_}{r_}{} - {gen} - {red color value} -\macrodef{rrot\_}{rrot_}{({\sl x, y, angle})} - {gen} - {\tt Here + vrot\_({\sl x, y, cos(angle), sin(angle))}} + \seesect{Corners:}}% +\macrodef{rpoint\_}{rpoint_}{(\linespec)}% + {gen}% + {set direction cosines}% +\macrodef{rpos\_}{rpos_}{({\sl position})}% + {gen}% + {Here + {\sl position}}% +\macrodef{r\_}{r_}{}% + {gen}% + {red color value}% +\macrodef{rrot\_}{rrot_}{({\sl x, y, angle})}% + {gen}% + {\tt Here + vrot\_({\sl x, y, cos(angle), sin(angle))}}% \macrodef{rs\_box}{rs_box}{([angle={\sl degrees};] - {\sl text},{\sl expr1},$\cdots$)} - {gen} - {like {\tt s\_box} but the text is rotated by {\tt text\_ang} + {\sl text},{\sl expr1},$\cdots$)}% + {gen}% + {like {\tt s\_box} but the text is rotated by {\tt text\_ang}% (default 90) degrees, unless the first argument begins with {\tt angle={\sl decimal number};}, in which case the number defines the rotation angle. @@ -1831,222 +2125,253 @@ degrees})} the specified angle is used. The examples {\tt define(`text\_ang',45); rs\_box(Hello World)} and {\tt rs\_box(angle=45; Hello World)} are equivalent - \seesect{Interaction:}, \seesect{Pstricks:}} -\macrodef{rsvec\_}{rsvec_}{({\sl position})} - {gen} - {Here + {\sl position}} -\macrodef{r\_text}{r_text}{({\sl degrees},{\sl text},at {\sl position})} - {gen} + \seesect{Interaction:}, \seesect{Pstricks:}}% +\macrodef{rsvec\_}{rsvec_}{({\sl position})}% + {gen}% + {Here + {\sl position}}% +\macrodef{r\_text}{r_text}{({\sl degrees},{\sl text},at {\sl position})}% + {gen}% {Rotate text by arg1 degrees (provides a single command for PSTricks, PGF, or SVG only) placed at position in arg3. The first argument is a decimal constant (not an expression) and the text is a simple string without quotes. - \seesect{Interaction:}, \seesect{Pstricks:}} -\macrodef{rtod\_\_}{rtod__}{} - {gen} - {constant, degrees/radian} -\macrodef{rtod\_}{rtod_}{} - {gen} - {constant, degrees/radian} -\macrodef{rt\_}{rt_}{} - {gen} - {right with respect to current direction} -\macrodef{rvec\_}{rvec_}{({\sl x},{\sl y})} - {gen} - {location relative to current direction} + \seesect{Interaction:}, \seesect{Pstricks:}}% +\macrodef{rtod\_\_}{rtod__}{}% + {gen}% + {constant, degrees/radian}% +\macrodef{rtod\_}{rtod_}{}% + {gen}% + {constant, degrees/radian}% +\macrodef{rt\_}{rt_}{}% + {gen}% + {right with respect to current direction}% +\macrodef{rvec\_}{rvec_}{({\sl x},{\sl y})}% + {gen}% + {location relative to current direction}% % \Letter{S}% -\macrodef{sarrow}{sarrow}{(\linespec,{\sl keys})} - {gen} - {Single-segment, single-headed special arrows. - The {\sl keys} are +\macrodef{sarrow}{sarrow}{(\linespec,{\sl keys})}% + {gen}% + {Single-segment, single-headed special arrows with {\sl keys}:\\ {\tt type=}{\tt O[pen]} (default) - | {\tt D[iamond]} | {\tt C[rowfoot]} | {\tt P[lain]} - | {\tt R[ight]} | {\tt L[eft]} {\tt ;} - {\tt wdth=}{\tt expression}{\tt ;} (default {\tt arrowwid}) - {\tt lgth=}{\tt expression}{\tt ;} (default {\tt arrowht}) - {\tt shaft=}{\sl shaft attributes} (e.g., {\tt dashed}){\tt ;} - {\tt head=}{\sl head attributes} (e.g., {\tt shaded}){\tt ;} + | {\tt D[iamond]} | {\tt C[rowfoot]} | {\tt P[lain]}% + | {\tt R[ight]} | {\tt L[eft]} {\tt ;}\\ + {\tt wdth=}{\sl expression}{\tt ;} (default {\tt arrowwid})\\ + {\tt lgth=}{\sl expression}{\tt ;} (default {\tt arrowht})\\ + {\tt shaft=}{\sl shaft attributes} (e.g., {\tt dashed}){\tt ;}\\ + {\tt head=}{\sl head attributes} (e.g., {\tt shaded}){\tt ;}\\ {\tt name=}{\sl Name}{\tt ;} (default {\sl Sarrow\_}) - \seesect{Macroarguments:}} -\macrodef{savem4dir}{savem4dir}{([`{\sl stack name}'])} - {gen} + \seesect{Macroarguments:}}% +\macrodef{savem4dir}{savem4dir}{([`{\sl stack name}'])}% + {gen}% {Stack m4 direction parameters in the named stack - (default {\tt `savm4dir\_'})} -\macrodef{s\_box}{s_box}{({\sl text},{\sl expr1},$\cdots$)} - {gen} + (default {\tt `savm4dir\_'})}% +\macrodef{s\_box}{s_box}{({\sl text},{\sl expr1},$\cdots$)}% + {gen}% {generate dimensioned text string using {\tt\char92{}boxdims} from - {\tt boxdims.sty}. Two or more args are passed to {\tt sprintf()} - (default 90) degrees \seesect{Interaction:}} -\macrodef{sbs}{sbs}{({\sl linespec, chars, label})} - {cct} + {\tt boxdims.sty}. Two or more args are passed to {\tt sprintf()}% + (default 90) degrees \seesect{Interaction:}}% +\macrodef{sbs}{sbs}{({\sl linespec, chars, label})}% + {cct}% {Wrapper to place an SBS thyristor as a two-terminal element with {\tt [ ]} block label given by the third argument - \seesect{Semiconductors:}} -\macrodef{sc\_draw}{sc_draw}{({\sl dna string, chars, iftrue, iffalse})} - {cct} - {test if chars are in string, deleting chars from string} -\macrodef{scr}{scr}{({\sl linespec, chars, label})} - {cct} + \seesect{Semiconductors:}}% +\macrodef{sc\_draw}{sc_draw}{({\sl dna string, chars, iftrue, iffalse})}% + {cct}% + {test if chars are in string, deleting chars from string}% +\macrodef{scr}{scr}{({\sl linespec, chars, label})}% + {cct}% {Wrapper to place an SCR thyristor as a two-terminal element with {\tt [ ]} block label given by the third argument - \seesect{Semiconductors:}} -\macrodef{scs}{scs}{({\sl linespec, chars, label})} - {cct} + \seesect{Semiconductors:}}% +\macrodef{scs}{scs}{({\sl linespec, chars, label})}% + {cct}% {Wrapper to place an SCS thyristor as a two-terminal element with {\tt [ ]} block label given by the third argument - \seesect{Semiconductors:}} -\macrodef{s\_dp}{s_dp}{({\sl name},{\sl default})} - {gen} - {depth of the most recent (or named) {\tt s\_box} - \seesect{Interaction:}} + \seesect{Semiconductors:}}% +\macrodef{s\_dp}{s_dp}{({\sl name},{\sl default})}% + {gen}% + {depth of the most recent (or named) {\tt s\_box}% + \seesect{Interaction:}}% \macrodef{series\_}{series_}{({\sl elementspec}, {\sl elementspec}, -$\ldots$)} - {cct} +$\ldots$)}% + {cct}% { Series combination in a {\tt []} block of elements with shortened default length. An {\sl elementspec} is of the form {\tt [{\sl Label}:] {\sl element}; [{\sl attributes}]}, where an {\sl attribute} is of the form {\tt [llabel($\ldots$);] | [rlabel($\ldots$);] [b\_current($\ldots$);]}. Internal points {\tt Start}, {\tt End}, and {\tt C} are defined - \seesect{Seriesandparallel:} } -\macrodef{se\_}{se_}{} - {gen} - {.se with respect to current direction} -\macrodef{setdir\_}{setdir_}{(R|L|U|D|{\sl degrees}, {\sl default} - U|D|R|L|{\sl degrees})} - {gen} + \seesect{Seriesandparallel:} }% +\macrodef{se\_}{se_}{}% + {gen}% + {.se with respect to current direction}% +\macrodef{setdir\_}{setdir_}{(R|L|U|D|{\sl degrees}, {\sl default}% + U|D|R|L|{\sl degrees})}% + {gen}% {store drawing direction and set it to up, down, left, right, or angle in degrees (reset by {\tt resetdir\_}). The directions may be spelled out, i.e., Right, Left, $\ldots$ - \seesect{Seriesandparallel:}} -\macrodef{setkey\_}{setkey_}{({\sl string, key, default,}[N])} - {gen} + \seesect{Seriesandparallel:}}% +\macrodef{setkey\_}{setkey_}{({\sl string, key, default,}[N])}% + {gen}% {Key-value definition, like {\tt pushkey\_()} but the resulting - macro is defined using {\tt define()} rather than {\tt pushdef().} - \seesect{Macroarguments:}} -\macrodef{setkeys\_}{setkeys_}{({\sl string, key sequence})} - {gen} + macro is defined using {\tt define()} rather than {\tt pushdef().}% + \seesect{Macroarguments:}}% +\macrodef{setkeys\_}{setkeys_}{({\sl string, key sequence})}% + {gen}% {Multiple key-value definition using {\tt define()} rather than {\tt pushdef().} See macro {\tt pushkeys\_}. - \seesect{Macroarguments:}} + \seesect{Macroarguments:}}% \macrodef{setrgb}{setrgb}{({\sl red value, green value, blue value},[{\sl - name}])} - {gen} + name}])}% + {gen}% {define colour for lines and text, optionally named (default - {\tt lcspec}); \seesect{Semiconductors:}} + {\tt lcspec}); \seesect{Semiconductors:}}% \macrodef{setview}{setview}{({\sl azimuth degrees},{\sl elevation -degrees})} - {3D} {set projection viewpoint} -\macrodef{sfgabove}{sfgabove}{} - {cct} - {like above but with extra space} + degrees}, {\sl rotation degrees})}% + {3D} {Set projection viewpoint for the {\tt project} macro. + The view vector is obtained by looking in along the $x$ axis, + then rotating about $-x,$ $-y,$ and $z$ in that order. The components + {\tt view3D1, view3D2,} and {\tt view3D3} are defined, as well as + positions {\tt UPx\_, UPy\_,} and {\tt UPz\_} which are the projections + of unit vectors {\tt (1,0,0), (0,1,0),} and {\tt (0,0,1)} respectively + onto the plane.}% +\macrodef{sfgabove}{sfgabove}{}% + {cct}% + {like above but with extra space}% \macrodef{sfgarc}{sfgarc}{(\linespec,{\sl text},{\sl text justification},cw|ccw, - {\sl height scale factor})} - {cct} - {directed arc drawn between nodes, with text label - and a height-adjustment parameter } -\macrodef{sfgbelow}{sfgbelow}{} - {cct} - {like below but with extra space} + {\sl height scale factor},{\sl arc attributes})}% + {cct}% + {Directed arc drawn between nodes, with text label + and a height-adjustment parameter. Example: + {\tt sfgarc(from B to A,-B/M,below,{,}1.1,outlined "red")} }% +\macrodef{sfgbelow}{sfgbelow}{}% + {cct}% + {like below but with extra space}% \macrodef{sfg\_init}{sfg_init}{({\sl default line len, node rad, arrowhd len, - arrowhd wid}), (reads {\tt libcct.m4})} {cct} + arrowhd wid}), (reads {\tt libcct.m4})} {cct}% {initialization of signal - flow graph macros} -\macrodef{sfgline}{sfgline}{(\linespec,{\sl text},{\sl text -justification})} - {cct} - {directed straight line chopped by node radius, with text label} + flow graph macros}% +\macrodef{sfgline}{sfgline}{(\linespec,{\sl text},{\tt + sfgabove|sfgbelow|ljust|rjust},{\sl line attributes})}% + {cct}% + {Directed straight line chopped by node radius, with text label, + e.g., {\tt sfgline(,K/M,{,}dashed colored "orange")} }% \macrodef{sfgnode}{sfgnode}{(at {\sl location},{\sl text},above|below,{\sl - circle options})} - {cct} + circle attributes})}% + {cct}% {small circle default white interior, with text label. The default - label position is inside if the diameter is bigger than {\tt textht} + label position is inside if the diameter is bigger than {\tt textht}% and {\tt textwid}; otherwise it is {\tt sfgabove.} Options such as - fill or line thickness can be given.} + color, fill, or line thickness can be given, e.g., + {\tt thick 0.8 outlined "red" shaded "orange"}. }% \macrodef{sfgself}{sfgself}{(at {\sl location}, U|D|L|R|{\sl degrees}, - {\sl text}, {\sl text justification}, cw|ccw, {\sl scale factor})} - {cct} - {self-loop drawn at angle {\sl angle} from a node, - with text label and a size-adjustment parameter } -\macrodef{shadebox}{shadebox}{(box {\sl attributes, shade width})} - {gen} - {Box with edge shading. Arg2 is in points. See also {\tt shaded} } + {\sl text label}, {\sl text justification}, cw|ccw, {\sl scale factor}, + [-> | <- | <->], {\sl attributes})}% + {cct}% + {Self-loop drawn at an angle from a node, + with text label, specified arrowheads, and a size-adjustment parameter. + The attributes can set thickness and color, for example. }% +\macrodef{shade}{shade}{({\sl gray value},{\sl closed line specs})}% + {gen}% + {Fill arbitrary closed curve. Note: when producing pdf via pdflatex, line + thickness changes within this macro must be made via the {\tt linethick}% + environment variable rather than by the {\tt thickness} line attribute}% +\macrodef{shadebox}{shadebox}{(box {\sl attributes, shade width})}% + {gen}% + {Box with edge shading. Arg2 is in points. See also {\tt shaded} }% \macrodef{ShadedPolygon}{ShadedPolygon}{({\sl vertexseq, line attributes, - degrees, colorseq})} {gen} + degrees, colorseq})} {gen}% {Draws the polygon specified in arg1 and shades the interior according to arg4 by drawing lines perpendicular to the angle in arg3. The {\sl vertexseq} is a colon ({\tt:}) separated sequence of vertex positions (or names) of the polygon in cw or ccw order. A {\sl colorseq} is of the form 0, r0,g0,b0, {\sl frac1},r1,g1,b1, {\sl frac2},r2,g2,b2, - \ldots 1,rn,gn,bn with $0 < \hbox{\sl frac1} < \hbox{\sl frac2} - \ldots 1$ } -\macrodef{shade}{shade}{({\sl gray value},{\sl closed line specs})} - {gen} - {Fill arbitrary closed curve. Note: when producing pdf via pdflatex, line - thickness changes within this macro must be made via the {\tt linethick} - environment variable rather than by the {\tt thickness} line attribute} + \ldots 1,rn,gn,bn with $0 < \hbox{\sl frac1} < \hbox{\sl frac2} \ldots 1$ }% +\macrodef{ShadeObject}{ShadeObject}{({\sl drawroutine name, n, colorseq})}% + {dpictools}% + {$\;\;$ Fill an area in a {\tt []} block with graded color + defined by {\sl colorseq,} an indexed sequence of rgb colors: + {\sl 0,r0,g0,b0,}% + {\sl frac1,r1,g1,b1,}% + {\sl frac2,r2,g2,b2,}% + \ldots + {\sl 1,rn,gn,bn}% + with $0 < \hbox{\sl frac1}$ $< \hbox{\sl frac2} <$ $\ldots < 1.$ The macro + {\sl drawroutine{\tt(}frac, r, g, b{\tt)}} typically draws a colored line + and must be defined according to the area to be filled. + The routine is called $n{+}1$ times for + $\hbox{\sl frac}= 0, 1/n, 2/n, \ldots 1$ with rgb arguments interpolated + in hsv space between {\sl colorseq} points. + Example (shade a box with 101 graded-color lines):\\ + {\tt B: box\\ + define HorizShade \lbr\ line right B.wid \textbackslash\\ + $\;$ thick B.ht/100/(1bp\_\_) from (0,-(\$1)*B.ht) \textbackslash\\ + $\;$ outlined rgbstring(\$2,\$3,\$4) \rbr;}% + {\tt ShadeObject(HorizShade,100, 0,1,0,0, 1,0,0,1) \textbackslash\\ + $\;$ at B}.}% \macrodef{shadowed}{shadowed}{(box|circle|ellipse|line, - {\sl position spec, keys})} - {gen} + {\sl position spec, keys})}% + {gen}% { Object with specified shadow. {\sl possspec} is e.g., {\tt with .w at ...} or {\tt at} {\sl position}. The {\sl keys} are - {\tt attrib=}{\sl object attributes}{\tt ;} + {\tt attrib=}{\sl object attributes}{\tt ;}% {\tt shadowthick=}{\sl expr}{\tt ;} (default {\tt linethick*)}5/4), {\tt shadowcolor=}{\sl string}{\tt ;} (default {\tt "gray"}), {\tt shadowangle=}{\sl expr}{\tt ;} (default $-45$) - for box only: {\tt rad=}{\sl expr}{\tt ;} - } + for box only: {\tt rad=}{\sl expr}{\tt ;}% + }% \macrodef{shielded}{shielded}{(`{\sl two-terminal element}', - L|U, {\sl line attributes})} {cct} + L|U, {\sl line attributes})} {cct}% {shielding in a {\tt [ ]} box for two-terminal element. Arg2= blank (default) to enclose the element body; L for the left side with respect to drawing direction, R for right. Internal points {\tt - .Start, .End,} and {\tt .C} are defined} -\macrodef{s\_ht}{s_ht}{({\sl name},{\sl default})} - {gen} - {height of the most recent (or named) {\tt s\_box} - \seesect{Interaction:}} -\macrodef{SIdefaults}{SIdefaults}{} - {gen} + .Start, .End,} and {\tt .C} are defined}% +\macrodef{s\_ht}{s_ht}{({\sl name},{\sl default})}% + {gen}% + {height of the most recent (or named) {\tt s\_box}% + \seesect{Interaction:}}% +\macrodef{SIdefaults}{SIdefaults}{}% + {gen}% {Sets {\tt scale = 25.4} for drawing units in mm, and sets pic parameters {\tt lineht = 12, linewid = 12, moveht = 12, movewid = 12, arcrad = 6, circlerad = 6, boxht = 12, boxwid = 18, ellipseht = 12, - ellipsewid = 18, dashwid = 2, arrowht = 3, arrowwid = arrowht/2,}} -\macrodef{sign\_}{sign_}{({\sl number})} - {gen} - {sign function} -\macrodef{sinc}{sinc}{({\sl number})} - {gen} - {the $\hbox{sinc}(x)$ function} -\macrodef{sind}{sind}{({\sl arg})} - {gen} - {sine of an expression in degrees} -\macrodef{s\_init}{s_init}{({\sl name})} - {gen} + ellipsewid = 18, dashwid = 2, arrowht = 3, arrowwid = arrowht/2,}}% +\macrodef{sign\_}{sign_}{({\sl number})}% + {gen}% + {sign function}% +\macrodef{sinc}{sinc}{({\sl number})}% + {gen}% + {the $\hbox{sinc}(x)$ function}% +\macrodef{sind}{sind}{({\sl arg})}% + {gen}% + {sine of an expression in degrees}% +\macrodef{s\_init}{s_init}{({\sl name})}% + {gen}% {initialize {\tt s\_box} string label to {\sl name} which should be unique - \seesect{Interaction:}} -\macrodef{Sin}{Sin}{({\sl integer})} - {gen} - {sine function, {\sl integer\/} degrees} + \seesect{Interaction:}}% +\macrodef{Sin}{Sin}{({\sl integer})}% + {gen}% + {sine function, {\sl integer\/} degrees}% \macrodef{sinusoid}{sinusoid}{({\sl amplitude, frequency, phase, tmin, - tmax, linetype})} - {gen} + tmax, linetype})}% + {gen}% {draws a sinusoid over the interval $(t_{\hbox{\scriptsize min}}, t_{\hbox{\scriptsize max}})$; e.g., to draw a dashed sine curve, amplitude {\sl a}, of {\sl n} cycles of length {\sl x} from {\sl A}, {\tt - sinusoid(a,twopi\_*n/x,-pi\_/2,0,x,dashed) with .Start at A}} -\macrodef{sl\_box}{sl_box}{({\sl stem linespec, keys, stem object})} - {SLD} + sinusoid(a,twopi\_*n/x,-pi\_/2,0,x,dashed) with .Start at A}}% +\macrodef{sl\_box}{sl_box}{({\sl stem linespec, keys, stem object})}% + {SLD}% {One-terminal SLD element: argument 1 is a \linespec\ to define the stem or, in the case of a zero-length stem, one of {\tt U, D, L, R,} or an angle in degrees, optionally followed by {\tt at {\sl position}}. @@ -2068,19 +2393,19 @@ justification})} \MR{sl_ttbox}{\tt sl\_ttbox} key-value pairs defining box attributes for the breaker (default name {\sl Br}) - \seesect{SingleLine:}} -\macrodef{sl\_breaker}{sl_breaker}{({\sl linespec,} {\tt type=[A|C][D];} - {\sl ttbox args})} - {SLD} + \seesect{SingleLine:}}% +\macrodef{sl\_breaker}{sl_breaker}{({\sl linespec,} {\tt type=[A|C][D];}% + {\sl ttbox args})}% + {SLD}% {Two-terminal SLD element: type {\tt A} (the default) is for a box breaker; type {\tt C} for a curved breaker; adding a {\tt D} puts drawout elements in the input and output leads. Otherwise, the arguments are as for - \MR{sl_ttbox}{\tt sl\_ttbox} - \seesect{SingleLine:}} -\macrodef{sl\_busbar}{sl_busbar}{({\sl linespec, np, keys})} - {SLD} + \MR{sl_ttbox}{\tt sl\_ttbox}% + \seesect{SingleLine:}}% +\macrodef{sl\_busbar}{sl_busbar}{({\sl linespec, np, keys})}% + {SLD}% {Composite SLD element drawn in a {\tt [ ]} block. A busbar is essentially a thick straight line drawn along the {\sl linespec} with positions evenly distributed @@ -2099,10 +2424,10 @@ justification})} {\tt port=D} (for a dot at each port position); {\tt line=}{\sl pic line attributes}. {\tt indent=}{\sl indent distance}. - \seesect{SingleLine:}} + \seesect{SingleLine:}}% \macrodef{sl\_ct}{sl_ct}{% - ({\tt at}{\sl position},{\sl keys},{\tt R|L|U|D|}{\sl degrees})} - {SLD} + ({\tt at}{\sl position},{\sl keys},{\tt R|L|U|D|}{\sl degrees})}% + {SLD}% {Composite SLD element drawn in a {\tt [ ]} block: The keys are as follows: @@ -2126,9 +2451,9 @@ justification})} Key {\tt scale} allows scaling (default scale 1.0) but, with \dpic, the {\tt scaled} directive can also be used. - \seesect{SingleLine:}} -\macrodef{sl\_disk}{sl_disk}{({\sl stem linespec, keys, breaker})} - {SLD} + \seesect{SingleLine:}}% +\macrodef{sl\_disk}{sl_disk}{({\sl stem linespec, keys, breaker})}% + {SLD}% {One-terminal SLD element: argument 1 is a \linespec\ to define the stem or, in the case of a zero-length stem, one of {\tt U, D, L, R,} or an angle in degrees, optionally followed by {\tt at {\sl position}}. @@ -2144,27 +2469,27 @@ justification})} Argument 3 is null for no breaker in the stem, {\tt C} for a default closed breaker, {\tt O} for an open breaker, {\tt X,} {\tt /,} or \bsl\ for these marks, or - \MR{sl_ttbox}{\tt sl\_ttbox} + \MR{sl_ttbox}{\tt sl\_ttbox}% key-value pairs defining box attributes for the breaker (default name {\sl Br}) \label{sl_disk}% - \seesect{SingleLine:}} -\macrodef{sl\_drawout}{sl_drawout}{({\sl linespec, keys,} R)} - {SLD} + \seesect{SingleLine:}}% +\macrodef{sl\_drawout}{sl_drawout}{({\sl linespec, keys,} R)}% + {SLD}% {Two-terminal SLD element: argument 1 is a \linespec\ as for ordinary two-terminal elements. Argument 2 contains semicolon (;)-separated key-value body attributes: {\tt type=T} (for truncated leads); - {\tt lgth={\sl{}expr},} + {\tt lgth={\sl{}expr},}% {\tt wdth={\sl{}expr}} (body size); {\tt name={\sl{}Name}} (default {\sl Body}); {\tt line={\sl{}pic line attributes}}; (e.g., {\tt thick 2}) Argument 3 is {\tt R} to reverse the direction of the drawn chevrons. - \seesect{SingleLine:}} -\macrodef{sl\_generator}{sl_generator}{({\sl stem linespec, keys, breaker})} - {SLD} + \seesect{SingleLine:}}% +\macrodef{sl\_generator}{sl_generator}{({\sl stem linespec, keys, breaker})}% + {SLD}% {One-terminal SLD element: argument 2 is {\tt type=AC|WT|BS|StatG|PV|Y|Delta} and, if {\tt type=PV,} the {\tt SL\_box} keys; @@ -2173,12 +2498,12 @@ justification})} Argument 3 is null for no breaker in the stem, {\tt C} for a default closed breaker, {\tt O} for an open breaker, {\tt X,} {\tt /,} or \bsl\ for these marks, or - \MR{sl_ttbox}{\tt sl\_ttbox} + \MR{sl_ttbox}{\tt sl\_ttbox}% key-value pairs defining box attributes for the breaker (default name {\sl Br}) - \seesect{SingleLine:}} -\macrodef{sl\_grid}{sl_grid}{({\sl stem linespec, keys, breaker})} - {SLD} + \seesect{SingleLine:}}% +\macrodef{sl\_grid}{sl_grid}{({\sl stem linespec, keys, breaker})}% + {SLD}% {One-terminal SLD element: argument 1 is a \linespec\ to define the stem or, in the case of a zero-length stem, one of {\tt U, D, L, R,} or an angle in degrees, optionally followed by {\tt at {\sl position}}. @@ -2193,22 +2518,22 @@ justification})} Argument 3 is null for no breaker in the stem, {\tt C} for a default closed breaker, {\tt O} for an open breaker, {\tt X,} {\tt /,} or \bsl\ for these marks, or - \MR{sl_ttbox}{\tt sl\_ttbox} + \MR{sl_ttbox}{\tt sl\_ttbox}% key-value pairs defining box attributes for the breaker (default name {\sl Br}) - \seesect{SingleLine:}} -\macrodef{sl\_inverter}{sl_inverter}{({\sl ttbox args})} - {SLD} + \seesect{SingleLine:}}% +\macrodef{sl\_inverter}{sl_inverter}{({\sl ttbox args})}% + {SLD}% {Two-terminal SLD element: the arguments are as for - \MR{sl_ttbox}{\tt sl\_ttbox} - \seesect{SingleLine:}} -\macrodef{sl\_lamp}{sl_lamp}{({\sl stem linespec, keys, breaker})} - {SLD} + \MR{sl_ttbox}{\tt sl\_ttbox}% + \seesect{SingleLine:}}% +\macrodef{sl\_lamp}{sl_lamp}{({\sl stem linespec, keys, breaker})}% + {SLD}% {One-terminal SLD element: the arguments are as for - \MR{sl_disk}{\tt sl\_disk} - \seesect{SingleLine:}} -\macrodef{sl\_load}{sl_load}{({\sl stem linespec, keys, breaker})} - {SLD} + \MR{sl_disk}{\tt sl\_disk}% + \seesect{SingleLine:}}% +\macrodef{sl\_load}{sl_load}{({\sl stem linespec, keys, breaker})}% + {SLD}% {One-terminal SLD element: argument 1 is a \linespec\ to define the stem or, in the case of a zero-length stem, one of {\tt U, D, L, R,} or an angle in degrees, optionally followed by {\tt at {\sl position}}. @@ -2224,12 +2549,12 @@ justification})} Argument 3 is null for no breaker in the stem, {\tt C} for a default closed breaker, {\tt O} for an open breaker, {\tt X,} {\tt /,} or \bsl\ for these marks, or - \MR{sl_ttbox}{\tt sl\_ttbox} + \MR{sl_ttbox}{\tt sl\_ttbox}% key-value pairs defining box attributes for the breaker (default name {\sl Br}) - \seesect{SingleLine:}} -\macrodef{sl\_meterbox}{sl_meterbox}{({\sl stem linespec, keys, breaker})} - {SLD} + \seesect{SingleLine:}}% +\macrodef{sl\_meterbox}{sl_meterbox}{({\sl stem linespec, keys, breaker})}% + {SLD}% {One-terminal SLD element: argument 1 is a \linespec\ to define the stem or, in the case of a zero-length stem, one of {\tt U, D, L, R,} or an angle in degrees, optionally followed by {\tt at {\sl position}}. @@ -2246,13 +2571,13 @@ justification})} Argument 3 is null for no breaker in the stem, {\tt C} for a default closed breaker, {\tt O} for an open breaker, {\tt X,} {\tt /,} or \bsl\ for these marks, or - \MR{sl_ttbox}{\tt sl\_ttbox} + \MR{sl_ttbox}{\tt sl\_ttbox}% key-value pairs defining box attributes for the breaker (default name {\sl Br}) - \seesect{SingleLine:}} + \seesect{SingleLine:}}% \macrodef{sl\_reactor}{sl_reactor}{({\sl stem linespec, keys, breaker keys, - breaker keys})} - {SLD} + breaker keys})}% + {SLD}% {Two-terminal SLD element: argument 1 is a \linespec\ as for ordinary two-terminal elements. @@ -2268,24 +2593,24 @@ justification})} Argument 4 defines the breaker in the output lead as for argument 3 except that the default breaker name is {\sl BrO}. - \seesect{SingleLine:}} -\macrodef{sl\_rectifier}{sl_rectifier}{({\sl ttbox args})} - {SLD} + \seesect{SingleLine:}}% +\macrodef{sl\_rectifier}{sl_rectifier}{({\sl ttbox args})}% + {SLD}% {Two-terminal SLD element: the arguments are as for - \MR{sl_ttbox}{\tt sl\_ttbox} - \seesect{SingleLine:}} -\macrodef{sl\_slash}{sl_slash}{(at {\sl position, keys,} - [$n$:]R|L|U|D|{\sl degrees})} - {SLD} + \MR{sl_ttbox}{\tt sl\_ttbox}% + \seesect{SingleLine:}}% +\macrodef{sl\_slash}{sl_slash}{(at {\sl position, keys,}% + [$n$:]R|L|U|D|{\sl degrees})}% + {SLD}% {Slash symbol for SLD elements: draws $n$ slashes in a {\tt [] } block. The keys are {\tt lines={\sl line attributes,} e.g., dotted thick {\sl expr}}; {\tt size=}{\sl expr} (default {\tt ht dimen\_/3}). - \seesect{SingleLine:}} + \seesect{SingleLine:}}% % \macrodef{sl\_transformer3}{sl_transformer3}{({\sl linespec, keys, - breaker keys, symbol keys})} - {SLD} + breaker keys, symbol keys})}% + {SLD}% {Composite (block) SLD element: argument 1 is a \linespec\ that can be used to set the direction and distance between primary terminals but not position. @@ -2300,8 +2625,8 @@ justification})} Argument 3 is colon (:)-separated sequence of up to three breaker attribute specifications for the input, output, and teriary breaker - in order. A null or blank means no breaker, {\tt tt\_breaker} - specifications otherwise. Default breaker names are {\sl BrI} + in order. A null or blank means no breaker, {\tt tt\_breaker}% + specifications otherwise. Default breaker names are {\sl BrI}% and {\sl BrO} as for {\tt sl\_transformer,} and {\sl Br} for the third breaker. @@ -2311,12 +2636,12 @@ justification})} {\tt Y} for a Y-symbol; {\tt Delta} for a $\Delta$ symbol; otherwise, other customization commands expanded in a {\tt \lbr\rbr} pair. - \seesect{SingleLine:}} + \seesect{SingleLine:}}% % \macrodef{sl\_transformer}{sl_transformer}{({\sl linespec, keys, input breaker keys, output breaker keys, - input circle inner object, output circle inner object})} - {SLD} + input circle inner object, output circle inner object})}% + {SLD}% {Two-terminal SLD element: argument 1 is a \linespec\ as for ordinary two-terminal elements. @@ -2350,11 +2675,11 @@ justification})} {\tt YN} for a Y-symbol with ground; {\tt Delta} for a $\Delta$ symbol; otherwise, other customization commands expanded in a {\tt \lbr\rbr} pair. - \seesect{SingleLine:}} + \seesect{SingleLine:}}% % \macrodef{sl\_ttbox}{sl_ttbox}{({\sl linespec, keys, input breaker keys, - output breaker keys})} - {SLD} + output breaker keys})}% + {SLD}% {Two-terminal SLD element: argument 1 is a \linespec\ as for ordinary two-terminal elements. @@ -2375,121 +2700,150 @@ justification})} Argument 4 defines the breaker in the output lead as for argument 3 except that the default breaker name is {\sl BrO}. \label{sl_ttbox}% - \seesect{SingleLine:}} -\macrodef{s\_name}{s_name}{} - {gen} + \seesect{SingleLine:}}% +\macrodef{s\_name}{s_name}{}% + {gen}% {the value of the last {\tt s\_init} argument - \seesect{Interaction:}} -\macrodef{sourcerad\_}{sourcerad_}{} - {cct} - {default source radius} + \seesect{Interaction:}}% +\macrodef{sourcerad\_}{sourcerad_}{}% + {cct}% + {default source radius}% +\macrodef{slantbox}{slantbox}{% + ({\sl wid, height, x offset, y offset, attributes})}% + {dpictools}% + {$\;\;$ Trapezoid formed from a box with top corners displaced right by + $x$ offset and right corners displaced up by $y$ offset.}% \macrodef{source}{source}{(\linespec, - V|v|I|i|ii|AC|B|F|G|H|J|Q|L|N|P|S[C[r]]|E[r]]|T|X|U|{\sl other}, {\sl - diameter},R)} - {cct} - {source, blank or: - V = voltage source; v = alternate voltage source; - I = current source; i = alternate current source; - ii = double arrow current source; AC = AC source; - B = bulb; F = fluorescent; G = generator; H = step - function; L = lamp; N = neon; P = pulse; Q = charge; - R = ramp; r = right orientation; S = sinusoid; - SC = quarter arc; SE = arc; T = triangle; U = - square-wave; X = interior X; other = custom interior - label or waveform; arg 4: R = reversed polarity; - arg 5 modifies the circle with e.g., color or fill - \seesect{Twoterminal:}} -\macrodef{speaker}{speaker}{( U|D|L|R|{\sl degrees},{\sl size},H)} - {cct} - {speaker, {\sl In1} to {\sl In7} defined; {\tt H}=horn - \seesect{Composite:}} -\macrodef{sprod3D}{sprod3D}{(a,x,y,z)} - {3D} {scalar product of triple x,y,z by a} -\macrodef{sp\_}{sp_}{} - {gen} - {evaluates to medium space for gpic strings} -\macrodef{sqrta}{sqrta}{({\sl arg})} - {gen} + V|v|tv|I|i|ti|ii|AC|B|F|G|H|J|Q|L|N|P|S[C[r]]|E[r]]|T|X|U|{\sl other}, {\sl + diameter},R)}% + {cct}% + {source, arg2 blank or:\\ + {\tt V}: voltage source;\\ + {\tt v}: alternate voltage source;\\ + {\tt tv}: truncated-bar alternate voltage source;\\ + {\tt I}: current source;\\ + {\tt i}: alternate current source;\\ + {\tt ti}: truncated-bar alternate current source;\\ + {\tt ii}: double arrow current source; AC: AC source;\\ + {\tt B}: bulb;\\ + {\tt F}: fluorescent;\\ + {\tt G}: generator;\\ + {\tt H}: step function;\\ + {\tt L}: lamp;\\ + {\tt N}: neon;\\ + {\tt P}: pulse;\\ + {\tt Q}: charge;\\ + {\tt R}: ramp; + {\tt r}: right orientation; + {\tt S}: sinusoid;\\ + {\tt SC}: quarter arc;\\ + {\tt SE}: arc;\\ + {\tt T}: triangle;\\ + {\tt U}: square-wave;\\ + {\tt X}: interior X;\\ + other: custom interior label or waveform;\\ + arg 4: R: reversed polarity;\\ + arg 5 modifies the circle with e.g., color or fill + \seesect{Twoterminal:}}% +\macrodef{speaker}{speaker}{( U|D|L|R|{\sl degrees},{\sl size},H,attributes)}% + {cct}% + {speaker, {\sl In1} to {\sl In7} defined; {\tt H}: horn + \seesect{Composite:}}% +\macrodef{sprod3}{sprod3}{({\sl scalar, vec1, vec2})}% + {dpictools}% + {$\;\;$ Multiplied vector by scalar arg1: {\sl vec2 = vec1 * arg1}.}% +\macrodef{sprod3D}{sprod3D}{(a,x,y,z)}% + {3D} {scalar product of triple x,y,z by arg1}% +\macrodef{sp\_}{sp_}{}% + {gen}% + {evaluates to medium space for gpic strings}% +\macrodef{sqrta}{sqrta}{({\sl arg})}% + {gen}% {square root of the absolute value of {\sl arg}; i.e., - {\tt sqrt(abs({\sl arg}))}} -\macrodef{SQUID}{SQUID}{({\sl n, diameter, initial angle}, {\tt ccw|cw})} - {cct} + {\tt sqrt(abs({\sl arg}))}}% +\macrodef{SQUID}{SQUID}{({\sl n, diameter, initial angle}, {\tt ccw|cw})}% + {cct}% {Superconducting quantum interface device with {\sl }n junctions labeled {\tt J1, ... J}{\sl n} placed around a circle with initial angle -90 deg (by default) with respect to the - current drawing direction. The default diameter is {\tt dimen\_} } -\macrodef{s\_}{s_}{} - {gen} - {.s with respect to current direction} -\macrodef{stackargs\_}{stackargs}{(`{\sl stackname}',{\sl args})} - {gen} - {Stack arg 2, arg 3, ... onto the named stack up to a blank arg} -\macrodef{stackcopy\_}{stackcopy_}{(`{\sl name 1}',`{\sl name 2}')} - {gen} + current drawing direction. The default diameter is {\tt dimen\_} }% +\macrodef{s\_}{s_}{}% + {gen}% + {.s with respect to current direction}% +\macrodef{stackargs\_}{stackargs}{(`{\sl stackname}',{\sl args})}% + {gen}% + {Stack arg 2, arg 3, ... onto the named stack up to a blank arg}% +\macrodef{stackcopy\_}{stackcopy_}{(`{\sl name 1}',`{\sl name 2}')}% + {gen}% {Copy stack 1 into stack 2, preserving the order of pushed - elements} -\macrodef{stackdo\_}{stackdo}{(`{\sl stackname}',{\sl commands})} - {gen} - {Empty the stack to the first blank entry, performing arg 2} + elements}% +\macrodef{stackdo\_}{stackdo}{(`{\sl stackname}',{\sl commands})}% + {gen}% + {Empty the stack to the first blank entry, performing arg 2}% \macrodef{stackexec\_}{stackexec_}{(`{\sl name 1}',`{\sl name 2}',% - {\sl commands})} - {gen} + {\sl commands})}% + {gen}% {Copy stack 1 into stack 2, performing arg3 for each nonblank - entry} -\macrodef{stackprint\_}{stackprint_}{(`{\sl stack name}')} - {gen} - {Print the contents of the stack to the terminal} + entry}% +\macrodef{stackprint\_}{stackprint_}{(`{\sl stack name}')}% + {gen}% + {Print the contents of the stack to the terminal}% %\macrodef{stackpromote\_}{stackpromote_}{({\sl prefix},% -% `{\sl stack name}',{\sl In name})} -% {gen} +% `{\sl stack name}',{\sl In name})}% +% {gen}% % {Define locations {\tt In1} or {\sl In name }{\tt 1}, $\ldots$ corresponding % to the locations in stack {\sl stack name}, as created by the % {\tt AutoGate} and {\tt Autologic} macros. Each location is prefixed -% by argument 1 ``.''} -\macrodef{stackreverse\_}{stackreverse_}{(`{\sl stack name}')} - {gen} - {Reverse the order of elements in a stack, preserving the name} +% by argument 1 ``.''}% +\macrodef{stackreverse\_}{stackreverse_}{(`{\sl stack name}')}% + {gen}% + {Reverse the order of elements in a stack, preserving the name}% \macrodef{stacksplit\_}{stacksplit_}{(`{\sl stack name}',{\sl string},{\sl - separator})} - {gen} + separator})}% + {gen}% {Stack the fields of {\sl string} left to right separated by nonblank {\sl separator} (default .). White space preceding the fields - is ignored.} -\macrodef{sum3D}{sum3D}{({\sl x1,y1,z1,x2,y2,z2})} - {3D} {sum of two triples} -\macrodef{sum\_}{sum_}{({\sl a},{\sl b})} - {gen} - {binary sum} -\macrodef{sus}{sus}{({\sl linespec, chars, label})} - {cct} + is ignored.}% +\macrodef{sum3}{sum3}{({\sl vec1, vec2, vec3})}% + {dpictools}% + {$\;\;$ The 3-vector sum + $\hbox{\sl vec3} = \hbox{\sl vec1} + \hbox{\sl vec2}$.}% +\macrodef{sum3D}{sum3D}{({\sl x1,y1,z1,x2,y2,z2})}% + {3D} {sum of two triples}% +\macrodef{sum\_}{sum_}{({\sl a},{\sl b})}% + {gen}% + {binary sum}% +\macrodef{sus}{sus}{({\sl linespec, chars, label})}% + {cct}% {Wrapper to place an SUS thyristor as a two-terminal element with {\tt [ ]} block label given by the third argument - \seesect{Semiconductors:}} -\macrodef{svec\_}{svec_}{({\sl x},{\sl y})} - {log} - {scaled and rotated grid coordinate vector} -\macrodef{s\_wd}{s_wd}{({\sl name},{\sl default})} - {gen} - {width of the most recent (or named) {\tt s\_box} - \seesect{Interaction:}} -\macrodef{switch}{switch}{(\linespec,L|R,[C|O][D],[B|D])} - {cct} + \seesect{Semiconductors:}}% +\macrodef{svec\_}{svec_}{({\sl x},{\sl y})}% + {log}% + {scaled and rotated grid coordinate vector}% +\macrodef{s\_wd}{s_wd}{({\sl name},{\sl default})}% + {gen}% + {width of the most recent (or named) {\tt s\_box}% + \seesect{Interaction:}}% +\macrodef{switch}{switch}{(\linespec,L|R,[C|O][D],[B|D])}% + {cct}% {SPST switch (wrapper for bswitch, lswitch, and dswitch), - arg2: R=right orientation (default L=left); - if arg4=blank (knife switch): arg3 = [O{\tt|}C][D][A] - O= opening, C=closing, D=dots, A=blade arrowhead; - if arg4=B (button switch): arg3 = O{\tt|}C - O=normally open, C=normally closed, - if arg4=D: arg3 = same as for dswitch \seesect{Twoterminal:}} -\macrodef{sw\_}{sw_}{} - {gen} - {.sw with respect to current direction} + arg2: {\tt R}: right orientation (default {\tt L} for left);\\ + if arg4=blank (knife switch): arg3 = {\tt [O|C][D][A]}, + {\tt O}: opening, {\tt C}: closing, {\tt D}:dots, + {\tt A}: blade arrowhead;\\ + if arg4=B (button switch): arg3 = + {\tt O|C}: {\tt O}: normally open, {\tt C}: normally closed;\\ + if arg4={\tt D}: arg3 = same as for dswitch \seesect{Twoterminal:}}% +\macrodef{sw\_}{sw_}{}% + {gen}% + {.sw with respect to current direction}% % \Letter{T}% \macrodef{tapped}{tapped}{(`{\sl two-terminal element}', [{\sl arrowhd} | type={\sl arrowhd};name={\sl Name}], - {\sl fraction, length, fraction, length,} $\cdots$)} - {cct} + {\sl fraction, length, fraction, length,} $\cdots$)}% + {cct}% {Draw the two-terminal element with taps in a [ ] block (see {\tt addtaps}). {\sl arrowhd} = blank or one of {\tt . - <- -> <->}. Each fraction @@ -2498,237 +2852,260 @@ justification})} length to the left. Tap names are Tap1, Tap2, $\cdots$ by default or Name1, Name2, $\cdots$ if specified. Internal block names are {\tt .Start, .End,} and {.C} corresponding to the drawn element, - and the tap names \seesect{Composite:} } -\macrodef{ta\_xy}{ta_xy}{({\sl x, y})} - {cct} - {macro-internal coordinates adjusted for {\tt L|R}} -\macrodef{tbox}{tbox}{({\sl text,wid,ht},<|>|<>,{\sl type})} - {cct} + and the tap names \seesect{Composite:} }% +\macrodef{ta\_xy}{ta_xy}{({\sl x, y})}% + {cct}% + {macro-internal coordinates adjusted for {\tt L|R}}% +\macrodef{tbox}{tbox}{({\sl text,wid,ht},<|>|<>,{\sl attributes})}% + {cct}% {Pointed terminal box. The {\sl text} is placed at the rectangular center in math mode unless the text begins with {\tt "} or {\tt sprintf} in which case the arument is used literally. Arg 4 determines whether the point is forward, backward, or both with respect to the current drawing direction. - \seesect{Composite:}} -\macrodef{tconn}{tconn}{({\sl linespec, chars}|{\sl keys}, {\sl wid})} - {cct} - {Terminal connector drawn on a linespec, with head enclosed in a {\tt [ ]} + \seesect{Composite:}}% +\macrodef{tconn}{tconn}{({\sl linespec, chars}|{\sl keys}, {\sl wid})}% + {cct}% + {Terminal connector drawn on a linespec, with head enclosed in a {\tt []}% block. The permissible {\sl chars} are: - {\tt > | >> | < | << | A | AA | M | O | OF}. + {\tt > | >{}> | < | <{}< | A | AA | M | O | OF}. Type {\tt O} draws a node (circle); {\tt OF} a filled circle. - Type {\tt M} is a black bar; {\tt A} is an open arc end; type {\tt AA} + Type {\tt M} is a black bar; {\tt A} is an open arc end; type {\tt AA}% a double open arc. Type {\tt >} (the default) is an arrow-like output connector; {\tt <} and {\tt <<} input connectors. Arg 3 is arrowhead width or circle diameter when key-value pairs are not used. If keys are specified, they are {\tt type=}{\sl chars} as previously; {\tt wdth=}{\sl expr}; {\tt lgth=}{\sl expr}; {\tt sep=}{\sl expr}; - {\tt head=}{\sl attributes except} {\tt lgth, wdth.} + {\tt head=}{\sl attributes except} {\tt lgth, wdth.}% The key {\tt sep=} is the double-head separation - \seesect{Composite:}} -\macrodef{tgate}{tgate}{({\sl linespec,} [B][R|L])} - {cct} + \seesect{Composite:}}% +\macrodef{testexpr}{testexpr}{({\sl variable, expr1, expr2, \ldots})}% + {dpictools}% + {$\;\;$ Set the variable given by arg1 to the index of the first true + alternative in a sequence of logical expressions, e.g., + {\tt testexpr(i, 1>2, 1<2 )} sets {\sl i} to 2. The variable is set to 0 + if no test is true.}% +\macrodef{tgate}{tgate}{({\sl linespec,} [B][R|L])}% + {cct}% {transmission gate, {\tt B=} ebox type; {\tt L=} oriented left - \seesect{Semiconductors:}} -\macrodef{thermocouple}{thermocouple}{({\sl linespec, wid, ht,} L|R [T])} - {cct} + \seesect{Semiconductors:}}% +\macrodef{thermocouple}{thermocouple}{({\sl linespec, wid, ht,} L|R [T])}% + {cct}% { Thermocouple drawn to the left (by default) of the {\sl linespec} line. A {\tt T} argument truncates the leads so - only the two branches appear. {\tt R=} - right orientation. \seesect{Twoterminal:}} -\macrodef{thicklines\_}{thicklines_}{({\sl number})} - {gen} - {set line thickness in points} -\macrodef{thinlines\_}{thinlines_}{({\sl number})} - {gen} - {set line thickness in points} -\macrodef{threeD\_init}{threeD_init}{} - {3D} {initialize 3D transformations (reads {\tt lib3D.m4})} + only the two branches appear. {\tt R=}% + right orientation. \seesect{Twoterminal:}}% +\macrodef{thicklines\_}{thicklines_}{({\sl number})}% + {gen}% + {set line thickness in points}% +\macrodef{thinlines\_}{thinlines_}{({\sl number})}% + {gen}% + {set line thickness in points}% +\macrodef{threeD\_init}{threeD_init}{}% + {3D} {initialize 3D transformations (reads {\tt lib3D.m4})}% \macrodef{thyristor}{thyristor}{(\linespec,% - {\tt [SCR|SCS|SUS|SBS|IEC][{\sl chars}]})} - {cct} - {Composite thyristor element in {\tt []}block: - types - SCR: silicon controlled rectifier - (default), SCS: silicon controlled - switch, SUS: silicon unilateral switch, - SBS: silicon bilateral switch, IEC: - type IEC. - {\sl Chars} to modify or define the element: - K: open arrowheads, A: arrowhead, F: - half arrowhead, B: bidirectional diode, - E: adds envelope, H: perpendicular - gate (endpoint G), N: anode gate - (endpoint Ga), U: centre line in diodes - V: perpendicular gate across arrowhead - centre, - R=right orientation, E=envelope - \seesect{Semiconductors:}} -\macrodef{thyristor\_t}{thyristor_t}{({\sl linespec, chars, label})} - {cct} + {\tt [SCR|SCS|SUS|SBS|IEC][{\sl chars}]})}% + {cct}% + {Composite thyristor element in {\tt []}block, types:\\ + {\tt SCR}: silicon controlled rectifier (default),\\ + {\tt SCS}: silicon controlled switch,\\ + {\tt SUS}: silicon unilateral switch,\\ + {\tt SBS}: silicon bilateral switch,\\ + {\tt IEC}: type IEC.\\ + {\sl Chars} to modify or define the element:\\ + {\tt K}: open arrowheads,\\ + {\tt A}: arrowhead,\\ + {\tt F}: half arrowhead,\\ + {\tt B}: bidirectional diode,\\ + {\tt E}: adds envelope,\\ + {\tt H}: perpendicular gate (endpoint {\sl G}),\\ + {\tt N}: anode gate (endpoint {\sl Ga}),\\ + {\tt U}: centre line in diodes,\\ + {\tt V}: perpendicular gate across arrowhead centre,\\ + {\tt R}: right orientation,\\ + {\tt E}: envelope + \seesect{Semiconductors:}}% +\macrodef{thyristor\_t}{thyristor_t}{({\sl linespec, chars, label})}% + {cct}% {Wrapper to place a thyristor as a two-terminal element with {\tt [ ]} block label given by the third argument - \seesect{Semiconductors:}} -\macrodef{tikznode}{tikznode}{({\sl \Tikz node name, position}) } - {pgf} - {insert \Tikz code to define a zero-size \Tikz node at {\sl location} + \seesect{Semiconductors:}}% +\macrodef{tikznode}{tikznode}{({\sl \Tikz node name, position}) }% + {pgf}% + {insert \Tikz code to define a zero-size \Tikz node at {\sl location}% (default {\tt Here}) to assist with inclusion of \pic code output in \Tikz diagrams. This macro must be invoked in the outermost - \pic scope. \seesect{Tikzwithpic:}} -\macrodef{tline}{tline}{(\linespec,{\sl wid},{\sl ht}) } - {cct} - {transmission line, manhattan direction\seesect{Twoterminal:}} -\macrodef{ToPos}{ToPos}{({\sl position}, U|D|L|R|{\sl degrees}, {\sl length}) } - {gen} + \pic scope. \seesect{Tikzwithpic:}}% +\macrodef{tline}{tline}{(\linespec,{\sl wid},{\sl ht}) }% + {cct}% + {transmission line, manhattan direction\seesect{Twoterminal:}}% +\macrodef{ToPos}{ToPos}{({\sl position}, U|D|L|R|{\sl degrees}, {\sl length}) }% + {gen}% {Evaluates to {\tt from {\sl position} - Rect\_({\sl length, angle}) to - {\sl position}} from the polar-coordinate data in the arguments } + {\sl position}} from the polar-coordinate data in the arguments }% \macrodef{transformer}{transformer}{(\linespec,L|R,{\sl np},% -[A|P][W|L][D1|D2|D12|D21],{\sl ns})} - {cct} - {2-winding transformer or choke with terminals P1, P2, TP, S1, - S2, TS: - arg2: L = left, R = right, arg3: np primary arcs, arg5: ns secondary - arcs, arg4: A = air core, P = powder (dashed) core, W = wide windings, - L = looped windings, D1: phase dots at P1 and S1 end; D2 at P2 and - S2 end; D12 at P1 and S2 end; D21 at P2 and S1 end - \seesect{Composite:}} -\macrodef{tr\_xy\_init}{tr_xy_init}{({\sl origin, unit size, sign })} - {cct} - {initialize {\tt tr\_xy}} -\macrodef{tr\_xy}{tr_xy}{({\sl x, y})} - {cct} - {relative macro internal coordinates adjusted for {\tt L|R}} -\macrodef{tstrip}{tstrip}{(R|L|U|D|{\sl degrees, nterms, chars})} - {cct} +[A|P][W|L][D1|D2|D12|D21],{\sl ns})}% + {cct}% + {2-winding transformer or choke with terminals {\sl P1, P2, TP, S1, S2, TS}:\\ + arg2: {\tt L}: left, {\tt R}: right,\\ + arg3: np primary arcs,\\ + arg5: ns secondary arcs,\\ + arg4: + {\tt A}: air core,\\ + {\tt P}: powder (dashed) core,\\ + {\tt W}: wide windings,\\ + {\tt L}: looped windings,\\ + {\tt D1}: phase dots at {\sl P1} and {\sl S1} end;\\ + {\tt D2}: at {\sl P2} and {\sl S2} end;\\ + {\tt D12}: at {\sl P1} and {\sl S2} end;\\ + {\tt D21} at {\sl P2} and {\sl S1} end + \seesect{Composite:}}% +\macrodef{tr\_xy\_init}{tr_xy_init}{({\sl origin, unit size, sign })}% + {cct}% + {initialize {\tt tr\_xy}}% +\macrodef{tr\_xy}{tr_xy}{({\sl x, y})}% + {cct}% + {relative macro internal coordinates adjusted for {\tt L|R}}% +\macrodef{tstrip}{tstrip}{(R|L|U|D|{\sl degrees, nterms, chars})}% + {cct}% {terminal strip, chars: - I=invisible terminals, C=circle terminals (default), D=dot terminals, - O=omitted separator lines, {\tt wid=}value{\tt ;} total strip width, - {\tt ht=}value{\tt ;} strip height - \seesect{Composite:}} + I (invisible terminals), C (default circle terminals), D (dot terminals), + O (omitted separator lines), {\tt wid=}value{\tt ;} total strip width, + {\tt ht=}value{\tt ;} strip height, {\tt box={\sl shaded etc.};}% + \seesect{Composite:}}% \macrodef{ttmotor}{ttmotor}{({\sl linespec, string, diameter, brushwid, -brushht})} - {cct} - {motor with label\seesect{Twoterminal:}} -\macrodef{twopi\_}{twopi_}{} - {gen} - {$2\pi$} +brushht})}% + {cct}% + {motor with label\seesect{Twoterminal:}}% +\macrodef{twopi\_}{twopi_}{}% + {gen}% + {$2\pi$}% % \Letter{U}% -\macrodef{ujt}{ujt}{(\linespec,R,P,E)} - {cct} +\macrodef{ujt}{ujt}{(\linespec,R,P,E)}% + {cct}% {unijunction transistor, right, P-channel, envelope - \seesect{Semiconductors:}} -\macrodef{unit3D}{unit3D}{(x,y,z)} - {3D} {unit triple in the direction of triple x,y,z} -\macrodef{up\_\_}{up__}{} - {gen} - {up with respect to current direction} -\macrodef{up\_}{up_}{} - {gen} - {set current direction up \seesect{Placing:}} + \seesect{Semiconductors:}}% +\macrodef{unit3D}{unit3D}{(x,y,z)}% + {3D} {unit triple in the direction of triple x,y,z}% +\macrodef{up\_\_}{up__}{}% + {gen}% + {up with respect to current direction}% +\macrodef{up\_}{up_}{}% + {gen}% + {set current direction up \seesect{Placing:}}% % \Letter{V}% -\macrodef{variable}{variable}{(`{\sl element}', - {\tt [A|P|L|[u]N|[u]NN][C|S]}, [+|-]{\sl angle}, - {\sl length}, at position)} - {cct} - {overlaid arrow or line to indicate variable 2-terminal element: - {\tt A}=arrow, {\tt P}=preset, {\tt L}=linear, {\tt N}= symmetric - nonlinear, {\tt C}=continuous, {\tt S}=setpwise; {\tt u} changes - the nonlinearity direction. The angle is absolute but preceding - it with a sign makes the angle (often -30 or -45) relative to the - element drawing direction. If arg5 is blank the symbol is placed - over the last {\tt [ ]} block - \seesect{Twoterminal:}} -\macrodef{Vcoords\_}{Vcoords_}{({\sl position})} - {gen} - {The $x, y$ coordinate pair of the position} -\macrodef{Vdiff\_}{Vdiff_}{({\sl position},{\sl position})} - {gen} +\macrodef{variable}{variable}{(`{\sl element}', {\sl chars}, [+|-]{\sl angle}, + {\sl length}, at position)}% +% {\tt [A|P|L|[u]N|[u]NN][C|S]}, + {cct}% + {Overlaid arrow or line to indicate variable 2-terminal element: + The {\sl chars} are\\ + {\tt A}: arrow,\\ + {\tt P}: preset,\\ + {\tt L}: linear,\\ + {\tt N}: symmetric nonlinear,\\ + {\tt C}: continuous,\\ + {\tt S}: setpwise;\\ + {\tt u} changes the nonlinearity direction. The angle is absolute + but preceding it with a sign makes the angle (often -30 or -45) + relative to the element drawing direction.\\ + If arg5 is blank the symbol is placed over the last {\tt []} block + \seesect{Twoterminal:}}% +\macrodef{Vcoords\_}{Vcoords_}{({\sl position})}% + {gen}% + {The $x, y$ coordinate pair of the position}% +\macrodef{Vdiff\_}{Vdiff_}{({\sl position},{\sl position})}% + {gen}% {{\tt Vdiff\_(A,B)} evaluates to {\tt A-(B)} with dpic, {\tt - A-(B.x,B.y)} - with gpic} -\macrodef{vec\_}{vec_}{({\sl x},{\sl y})} - {gen} - {position rotated with respect to current direction} -\macrodef{View3D}{View3D}{} - {3D} {The view vector (triple) defined by {\tt setview({\sl azim, - elev})}. The - {\tt project} macro projects onto the plane perpendicular to this - vector} -\macrodef{vlength}{vlength}{({\sl x},{\sl y})} - {gen} - {vector length $\sqrt{x^2+y^2}$} -\macrodef{vperp}{vperp}{({\sl linear object})} - {gen} - {unit-vector pair CCW-perpendicular to linear object} -\macrodef{Vperp}{Vperp}{({\sl position name}, {\sl position name})} - {gen} + A-(B.x,B.y)}% + with gpic}% +\macrodef{vec\_}{vec_}{({\sl x},{\sl y})}% + {gen}% + {position rotated with respect to current direction}% +\macrodef{vec3}{vec3}{({\sl vector})}% + {dpictools}% + {$\;\;$ Expands to the threee components of the vector argument separated + by commas.}% +\macrodef{View3D}{View3D}{}% + {3D} {The view vector (triple) defined by {\tt setview({\sl azimuth, + elevation, rotation})}. The {\tt project} macro projects onto the plane + through {\tt (0,0)} and orthogonal to this vector.}% +\macrodef{vlength}{vlength}{({\sl x},{\sl y})}% + {gen}% + {vector length $\sqrt{x^2+y^2}$}% +\macrodef{vperp}{vperp}{({\sl linear object})}% + {gen}% + {unit-vector pair CCW-perpendicular to linear object}% +\macrodef{Vperp}{Vperp}{({\sl position name}, {\sl position name})}% + {gen}% {unit-vector pair CCW-perpendicular to line joining two named - positions} -\macrodef{vrot\_}{vrot_}{({\sl x},{\sl y},{\sl xcosine},{\sl ycosine})} - {gen} - {rotation operator} -\macrodef{vscal\_}{vscal_}{({\sl number},{\sl x},{\sl y})} - {gen} - {vector scale operator} -\macrodef{Vsprod\_}{Vsprod_}{({\sl position}, {\sl expression})} - {gen} - {The vector in arg 1 multiplied by the scalar in arg 2} -\macrodef{Vsum\_}{Vsum_}{({\sl position},{\sl position})} - {gen} + positions}% +\macrodef{vrot\_}{vrot_}{({\sl x},{\sl y},{\sl xcosine},{\sl ycosine})}% + {gen}% + {rotation operator}% +\macrodef{vscal\_}{vscal_}{({\sl number},{\sl x},{\sl y})}% + {gen}% + {vector scale operator}% +\macrodef{Vsprod\_}{Vsprod_}{({\sl position}, {\sl expression})}% + {gen}% + {The vector in arg 1 multiplied by the scalar in arg 2}% +\macrodef{Vsum\_}{Vsum_}{({\sl position},{\sl position})}% + {gen}% {{\tt Vsum\_(A,B)} evaluates to {\tt A+B} with dpic, {\tt - A+(B.x,B.y)} - with gpic} + A+(B.x,B.y)}% + with gpic}% % \Letter{W}% -\macrodef{while\_}{while_}{(`{\sl test}',`{\sl actions}')} - {gen} - {Integer m4 while loop} -\macrodef{wid\_}{wid_}{} - {gen} - {width with respect to current direction} +\macrodef{while\_}{while_}{(`{\sl test}',`{\sl actions}')}% + {gen}% + {Integer m4 while loop}% +\macrodef{wid\_}{wid_}{}% + {gen}% + {width with respect to current direction}% \macrodef{winding}{winding}{(L|R, {\sl diam, pitch, turns, core wid, - core color})} - {cct} - {core winding drawn in the current direction; {\tt R}=right-handed - \seesect{Composite:}} -\macrodef{w\_}{w_}{} - {gen} - {.w with respect to current direction} -\macrodef{XOR\_gate}{XOR_gate}{({\sl n},N)} - {log} - {`xor' gate, 2 or {\sl n\/} inputs; N=negated input. + core color})}% + {cct}% + {core winding drawn in the current direction; {\tt R}: right-handed + \seesect{Composite:}}% +\macrodef{w\_}{w_}{}% + {gen}% + {.w with respect to current direction}% +\macrodef{XOR\_gate}{XOR_gate}{({\sl n},N)}% + {log}% + {`xor' gate, 2 or {\sl n\/} inputs; {\tt N}: negated input. Otherwise, arg1 can be a sequence of letters {\tt P|N} to define normal or negated inputs. - \seesect{Logicgates:}} -\macrodef{XOR\_off}{XOR_off}{} - {log} - {XOR and NXOR offset of input face} + \seesect{Logicgates:}}% +\macrodef{XOR\_off}{XOR_off}{}% + {log}% + {XOR and NXOR offset of input face}% % \Letter{X}% -\macrodef{xtal}{xtal}{(\linespec,{\sl keys})} - {cct} +\macrodef{xtal}{xtal}{(\linespec,{\sl keys})}% + {cct}% {Quartz crystal. The {\sl keys} are - {\tt type=N} (default) or {\tt R} (round); - type {\tt N} keys: - {\tt lgth=}{\sl expr} (body length); - {\tt wdth=}{\sl expr} (body width); - {\tt bxwd=}{\sl expr} (body inner box width); - {\tt box=} box attributes ({\tt shaded} $\ldots$); - type {\tt R} keys: - {\tt outerdiam=}{\sl expr}; - {\tt innerdiam=}{\sl expr}; - {\tt outer=} outer circle attributes ({\tt dotted} $\ldots$); + {\tt type=N} (default) or {\tt type=R} (round);\\ + type {\tt N} keys:\\ + {\tt lgth=}{\sl expr} (body length);\\ + {\tt wdth=}{\sl expr} (body width);\\ + {\tt bxwd=}{\sl expr} (body inner box width);\\ + {\tt box=} box attributes ({\tt shaded} $\ldots$);\\ + type {\tt R} keys:\\ + {\tt outerdiam=}{\sl expr};\\ + {\tt innerdiam=}{\sl expr};\\ + {\tt outer=} outer circle attributes ({\tt dotted} $\ldots$);\\ {\tt inner=} inner circle attributes ({\tt shaded} $\ldots$)% -\seesect{Twoterminal:}} -\macrodef{xtract}{xtract}{({\sl string, substr1, substr2, $\ldots$})} - {gen} - {returns substrings if present} +\seesect{Twoterminal:}}% +\macrodef{xtract}{xtract}{({\sl string, substr1, substr2, $\ldots$})}% + {gen}% + {returns substrings if present}% \Letter{Y}% \macrodef{Ysymbol}{Ysymbol}{(at {\sl position},keys, - U|D|L|R|{\sl degrees}) (default {\tt U} for up)} - {cct} + U|D|L|R|{\sl degrees}) (default {\tt U} for up)}% + {cct}% {Y symbol for power-system diagrams - {\sl keys:} {\tt size={\sl expression}; type=G}} -% \end{tabbing} + {\sl keys:} {\tt size={\sl expression}; type=G}}% +% \end{tabbing}% -- cgit v1.2.3