From 6b10e9901a24325e837f0fdc2cbce8f43f18ccff Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
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

