texlive[68264] Master/texmf-dist/doc/latex/circuit-macros:

commits+karl at tug.org commits+karl at tug.org
Wed Sep 13 22:35:42 CEST 2023


Revision: 68264
          http://tug.org/svn/texlive?view=revision&revision=68264
Author:   karl
Date:     2023-09-13 22:35:42 +0200 (Wed, 13 Sep 2023)
Log Message:
-----------
circuit_macros (13sep23)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/circuit-macros/CHANGES
    trunk/Master/texmf-dist/doc/latex/circuit-macros/Copying
    trunk/Master/texmf-dist/doc/latex/circuit-macros/README
    trunk/Master/texmf-dist/doc/latex/circuit-macros/darrow.m4
    trunk/Master/texmf-dist/doc/latex/circuit-macros/doc/Circuit_macros.pdf
    trunk/Master/texmf-dist/doc/latex/circuit-macros/doc/SourcesMan.m4
    trunk/Master/texmf-dist/doc/latex/circuit-macros/doc/Version.tex
    trunk/Master/texmf-dist/doc/latex/circuit-macros/doc/body.tex
    trunk/Master/texmf-dist/doc/latex/circuit-macros/doc/defines.tex
    trunk/Master/texmf-dist/doc/latex/circuit-macros/dpictools.pic
    trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/Alogix.m4
    trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/Smithchart.m4
    trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/Sources.m4
    trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/dpv/SourcesDPV.m4
    trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/ex05.m4
    trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/examples.pdf
    trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/extras/Koch.m4
    trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/extras/Makefile
    trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/extras/README_extras
    trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/extras/TR_fill.m4
    trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/extras/Views.m4
    trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/mf/cct.mf
    trunk/Master/texmf-dist/doc/latex/circuit-macros/gpic.m4
    trunk/Master/texmf-dist/doc/latex/circuit-macros/lib3D.m4
    trunk/Master/texmf-dist/doc/latex/circuit-macros/libSLD.m4
    trunk/Master/texmf-dist/doc/latex/circuit-macros/libcct.m4
    trunk/Master/texmf-dist/doc/latex/circuit-macros/libgen.m4
    trunk/Master/texmf-dist/doc/latex/circuit-macros/liblog.m4
    trunk/Master/texmf-dist/doc/latex/circuit-macros/mfpic.m4
    trunk/Master/texmf-dist/doc/latex/circuit-macros/mpost.m4
    trunk/Master/texmf-dist/doc/latex/circuit-macros/pdf.m4
    trunk/Master/texmf-dist/doc/latex/circuit-macros/pgf.m4
    trunk/Master/texmf-dist/doc/latex/circuit-macros/postscript.m4
    trunk/Master/texmf-dist/doc/latex/circuit-macros/psfrag.m4
    trunk/Master/texmf-dist/doc/latex/circuit-macros/pstricks.m4
    trunk/Master/texmf-dist/doc/latex/circuit-macros/svg.m4
    trunk/Master/texmf-dist/doc/latex/circuit-macros/xfig.m4

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/CHANGES
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/CHANGES	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/CHANGES	2023-09-13 20:35:42 UTC (rev 68264)
@@ -1,5 +1,6 @@
 CHANGES
 
+Version 10.4: New options for source, sarrow, darrow routines.
 Version 10.3: Tweaked sfg_init and NeedDpicTools functionality;
   macro lin_ang, langle, ACsymbol, DCsymbol, Ysymbol, Deltasymbol,
   Autologix.  New macro polygon.

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/Copying
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/Copying	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/Copying	2023-09-13 20:35:42 UTC (rev 68264)
@@ -1,4 +1,4 @@
-* Circuit_macros Version 10.3, copyright (c) 2023 J. D. Aplevich under     *
+* Circuit_macros Version 10.4, copyright (c) 2023 J. D. Aplevich under     *
 * the LaTeX Project Public Licence in file Licence.txt. The files of       *
 * this distribution may be redistributed or modified provided that this    *
 * copyright notice is included and provided that modifications are clearly *

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/README
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/README	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/README	2023-09-13 20:35:42 UTC (rev 68264)
@@ -1,5 +1,5 @@
 
-* Circuit_macros Version 10.3, copyright (c) 2023 J. D. Aplevich under     *
+* Circuit_macros Version 10.4, copyright (c) 2023 J. D. Aplevich under     *
 * the LaTeX Project Public Licence in file Licence.txt. The files of       *
 * this distribution may be redistributed or modified provided that this    *
 * copyright notice is included and provided that modifications are clearly *

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/darrow.m4
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/darrow.m4	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/darrow.m4	2023-09-13 20:35:42 UTC (rev 68264)
@@ -1,7 +1,7 @@
 divert(-1)
   darrow.m4                     Macros for double lines and arrows
 
-* Circuit_macros Version 10.3, copyright (c) 2023 J. D. Aplevich under     *
+* Circuit_macros Version 10.4, copyright (c) 2023 J. D. Aplevich under     *
 * the LaTeX Project Public Licence in file Licence.txt. The files of       *
 * this distribution may be redistributed or modified provided that this    *
 * copyright notice is included and provided that modifications are clearly *
@@ -8,33 +8,35 @@
 * marked to distinguish them from this distribution.  There is no warranty *
 * whatsoever for these files.                                              *
 
+` Some of these macros have uncomfortably many arguments for specifying
+  options, so wrappers beginning with upper-case letters (Dline,
+  Darrow, Darc) are provided and implement key=val;key=val... option
+  specifications.  Sometimes however, cleaner code results from using
+  the original macros.  Could these be written in a more straightforward
+  fashion? Probably, but the current versions have evolved from macros
+  written very early on and backward compatibility has been kept, with
+  only a few exceptions.
 
-`Notes: these macros have been reworked (Jan 2013) so that dlthick is the
-  total outside width, consistent with solid lines and arrows, and to add
-  the !- and -! half-linethick line caps to simplify butting to boxes.
-
-  Some of these macros have uncomfortably many arguments for specifying
-  options, so wrappers beginning with upper-case letters (Dline, Darrow, Darc)
-  are provided and implement key=val;key=val... option specifications.
+  The drawn elements are
+    darc darrow dend dleft dline dright dtee dturn
+  and there are wrappers
+    Darc Darrow Dline
 '
-
-=============================================================================
 define(`darrow_')
 ifdef(`libgen_',,`include(libgen.m4)divert(-1)')
 
+=============================================================================
+# Style defaults:
                                 Default width (thickness) of double lines
 define(`dlthick',`(0.08*scale+lthick)')
-#efine(`dlinewid',`dlthick')    Obsolete, keep for a while for compatibility.
 
                                `ELement fill color (default white)
-                                e.g. define(`dfillcolor',`1,0.84,0')
-                                Obsolete:
-                                command "\definecolor{gold}{rgb}{1,0.84,0}"
-                                define(`dfillcolor',gold)'
-define(`dfillcolor',`1,1,1')
+                                e.g. define(`dfillcolor',`1,0.84,0')'
+define(`dfillcolor',`1,1,1')   `=white'
 
 define(`dfillgrey',1)          `fill shade for gpic'
 define(`darcrad',`dlthick*2')  `default darc radius'
+define(`dfillext',0.25bp__) `extended length of dtee, dleft, dright fill'
 
                                `Default length:'
 ifdef(`elen_',,`define(`elen_',linewid*3/2)')
@@ -53,103 +55,119 @@
 define(`dljust',`ljust ifelse(`$1',,`at Here',`$1')+(dlthick/2,0)')
 define(`drjust',`rjust ifelse(`$1',,`at Here',`$1')-(dlthick/2,0)')
 
-               `dline(linespec,start truncation,end truncation,dlthick, ends )
+               `dline(linespec,start truncation,end truncation,dlthick, ends,
+                  outline attributes, inner attributes )
                   ends= blank, x-x, -x, x-, where x means ! or |'
 define(`dline',`deleminit_(`$1',,`$4')
-  M4DL: line from last line.start to last line.end \
+  M4DL: line invis from last line.start to last line.end \
     chop ifelse(`$2',,0,m4dlthk/2) chop ifelse(`$3',,0,m4dlthk/2)
-  ifelse(rgbstring(1,1,1),"",,
-   `{line thick m4dlthk/(1bp__) from M4DL.start to M4DL.end }
-    {line thick m4dlthk/(1bp__)-2*linethick outlined rgbstring(dfillcolor) \
-     from M4DL.start \
-      ifinstr(`$5',|-,`+vec_(lthick,0)',`$5',!-,`+vec_(lthick/2,0)') \
+  {line thick m4dlthk/(1bp__) `$6' from M4DL.start to M4DL.end }
+  ifelse(rgbstring(dfillcolor),"",,
+   `{line thick m4dlthk/(1bp__)-2*linethick \
+      ifelse(`$7',,`outlined rgbstring(dfillcolor)',`$7') \
+      from M4DL.start \
+        ifinstr(`$5',|-,`+vec_(lthick,0)',`$5',!-,`+vec_(lthick/2,0)') \
       to M4DL.end \
-      ifinstr(`$5',-|,`-vec_(lthick,0)',`$5',-!,`-vec_(lthick/2,0)') }')
+        ifinstr(`$5',-|,`-vec_(lthick,0)',`$5',-!,`-vec_(lthick/2,0)') }')
   ifgpic(`M4dV: vec_(0,m4dlthk/2-lthick/2); shade(dfillgrey,
     {line from M4DL.start+(M4dV.x,M4dV.y) to M4DL.end+(M4dV.x,M4dV.y)}
     {line from M4DL.start-(M4dV.x,M4dV.y) to M4DL.end-(M4dV.x,M4dV.y)})')
    line invis from M4DL.start to M4DL.end')
 
-               `Dline(linespec,params)
-                 params is a semicolon-separated list of items:
-                   S truncate at start by dline thickness/2
-                   E truncate at end by dline thickness/2
-                   thick=val   (total thicknes, ie width)
-                   ends= x-x or -x or x- where x is ! or |
-                   |- closed end with full-width line
-                   !- closed end with half-width line
-                eg Dline(from A to B,E;ends=|-)'
-define(`Dline',
- `pushkey_(`$2',thick,dlthick)
-  pushkey_(`$2',ends)pushdef(`m4ends',substr(m4ends,1,eval(len(m4ends)-2)))
-  dline(`$1',ifinstr(`$2',S,t),ifinstr(`$2',E,t),m4thick,m4ends)
-  popdef(`m4ends')popdef(`m4ends')popdef(`m4thick')
-  ')
-
-                               `dleft(at position,dlthick) Turn left,
-                                leaving current location at exit of corner'
+                               `dleft(at position,dlthick,attribs)
+                                Turn left, leaving current location
+                                at exit of corner.
+                                attribs=
+                                  innershade=(r,g,b)|"color";
+                                  outline=(r,g,b)|"color";'
 define(`dleft',`deleminit_(,ifelse(`$2',,dlthick,`$2'),`$2')
+  pushkeys_(`$3',innershade::N;outline::N;) dnl
   ifelse(`$1',,,`move to substr(`$1',eval(index(`$1',t)+1))-vec_(m4dlthk/2,0)')
   { line thick m4dlthk/(1bp__) to rvec_(m4dlthk,0) }
-  ifelse(rgbstring(1,1,1),"",,
-   `line thick m4dlthk/(1bp__)-2*linethick outlined rgbstring(dfillcolor) \
-      to rvec_(m4dlthk/2,0) then to rvec_(m4dlthk/2,m4dlthk/2)')
+  ifelse(rgbstring(dfillcolor),"",,
+   `{line thick m4dlthk/(1bp__)-2*linethick \
+      m4osh(m4innershade,outlined,`dfillcolor') \
+      to rvec_(m4dlthk/2,0) then to rvec_(m4dlthk/2,m4dlthk/2+dfillext)}
+    move to rvec_(m4dlthk/2,0) then to rvec_(m4dlthk/2,m4dlthk/2) ')
   ifgpic(`{line from rvec_(0,m4dlthk/2-lthick/2) to rvec_(0,m4dlthk/2-lthick/2)}
    {line from rvec_(m4dlthk-lthick/2,m4dlthk/2) \
      to rvec_(m4dlthk-lthick/2,-m4dlthk/2+lthick/2) then \
      to rvec_(0,-m4dlthk/2+lthick/2)}
-   move to rvec_(m4dlthk/2,m4dlthk/2)')
+   move to rvec_(m4dlthk/2,m4dlthk/2)') popdef(`m4innershade',`m4outline')
    rp_ang = rp_ang+pi__/2')
-                               `dright(at position,dlthick) Turn right,
-                                leaving current location at exit of corner'
+                               `dright(at position,dlthick,attribs)
+                                Turn right, leaving current location
+                                at exit of corner.
+                                attribs=
+                                  innershade=(r,g,b)|"color";
+                                  outline=(r,g,b)|"color";'
 define(`dright',`deleminit_(,ifelse(`$2',,dlthick,`$2'),`$2')
+  pushkeys_(`$3',innershade::N;outline::N;) dnl
   ifelse(`$1',,,`move to substr(`$1',eval(index(`$1',t)+1))-vec_(m4dlthk/2,0)')
   { line thick m4dlthk/(1bp__) to rvec_(m4dlthk,0) }
-  ifelse(rgbstring(1,1,1),"",,
-   `line thick m4dlthk/(1bp__)-2*linethick outlined rgbstring(dfillcolor) \
-      to rvec_(m4dlthk/2,0) then to rvec_(m4dlthk/2,-m4dlthk/2)')
+  ifelse(rgbstring(dfillcolor),"",,
+   `{line thick m4dlthk/(1bp__)-2*linethick \
+      m4osh(m4innershade,outlined,`dfillcolor') \
+      to rvec_(m4dlthk/2,0) then to rvec_(m4dlthk/2,-m4dlthk/2-dfillext)}
+    move to rvec_(m4dlthk/2,0) then to rvec_(m4dlthk/2,-m4dlthk/2) ')
   ifgpic(`{line from rvec_(0,-m4dlthk/2+lthick/2) \
                   to rvec_(0,-m4dlthk/2+lthick/2)}
    {line from rvec_(m4dlthk-lthick/2,-m4dlthk/2) \
      to rvec_(m4dlthk-lthick/2,m4dlthk/2-lthick/2) then \
      to rvec_(0,m4dlthk/2-lthick/2)}
-   move to rvec_(m4dlthk/2,-m4dlthk/2)')
+   move to rvec_(m4dlthk/2,-m4dlthk/2)') popdef(`m4innershade',`m4outline')
    rp_ang = rp_ang-pi__/2')
 
-                               `dturn(arg,dlthick) 
-                                Turn arg relative degrees ccw'
+
+  define(`m4osh',`ifelse(`$1',,`ifelse(`$3',,,``$2' rgbstring($3)')',
+    index(`$1',`"'),0,``$2' `$1'' ,
+    ``$2' rgbstring(m4ctrunc(`$1'))')')dnl
+
+                               `dturn(arg,dlthick,attribs) 
+                                Turn arg relative degrees ccw
+                                attribs=
+                                  innershade=(r,g,b)|"color";
+                                  outline=(r,g,b)|"color";'
 define(`dturn',`deleminit_(,ifelse(`$2',,dlthick,`$2'),`$2')
-[S: Here
+[S: Here pushkeys_(`$3',innershade::N;outline::N;)
   deg = ifelse(`$1',,0,`$1')
   c = cosd(deg); s = sind(deg); sgn = sign(deg); r = (dlthick-lthick)/2
+  G: S+vec_(lthick/2*abs(s),sgn*dlthick/2)
   A: S+vec_(lthick/2*abs(s),sgn*r)
   B: A+vec_(vscal_(lthick/2*abs(s),c,s))
+  H: G+vec_(vscal_(lthick/2*abs(s),c,s))
   C: S+vec_(0, sgn*r)
+  J: S+vec_(0, sgn*dlthick/2)
   if deg==0 then {t = 0} else { t = (1-c)/s } # t = tan(deg/2)
   D: A+vec_(vscal_(r*2,sgn*t,-sgn))
   E: B+vec_(vscal_(r*2,sgn*s,-sgn*c))
   F: S+vec_(0,-sgn*r)
-  T: 0.5 between A and D
   X: 0.5 between B and E
-  ifelse(rgbstring(1,1,1),"",,
-   `line thick r*2/(1bp__) outlined rgbstring(dfillcolor) \
-      from S to T then to X')
+  ifelse(rgbstring(dfillcolor),`""',,`line thick 0 \
+    m4osh(m4innershade,outlined,`dfillcolor') \
+    m4osh(m4innershade,shaded,`dfillcolor') \
+    from S to F then to D then to E then to H then to G then to J then to S')
   ifgpic(`m4tmpth = linethick; linethick=0
     shade(dfillgrey,`line from C to A then to B; line from E to D then to F')
     linethick = m4tmpth')
-  line from C to A then to B
-  line from E to D then to F
-#{"A" at A;"B" at B;"C" at C;"D" at D;"E" at E; "F" at F;"T" at T;"X" at X}
-  `$3'] with .S at Here
+  line thick lthick/(1bp__) m4osh(m4outline,outlined) from C to A then to B
+  line thick lthick/(1bp__) m4osh(m4outline,outlined) from E to D then to F
+# Loopover_(`Px',`"Px" at Px above;', A,B,C,D,E,F,S,X)
+# Loopover_(`Px',`"Px" at Px above;', G,H,J)
+  `$4' popdef(`m4innershade',`m4outline')] with .S at Here
   move to last [].X
   ifelse(`$1',,,`Point_(`$1'+rp_ang*rtod_)') ')
 
                 `darrow(linespec, start truncation, end truncation, dlthick,
-                   arrow wid, arrow ht, terminals)
+                   arrowhd wid, arrowhd ht, terminals,color attribs)
                  terminals is blank or x-, ->, x->, <-, <-x, <-> where x is
                    ! for closed end with half-width line or
                    | for closed end with full-width line'
+                 `e.g.,
+                   linethick=5; rgbdraw(1,0,0,darrow(down_ 2,,,0.5,0.75,0.75,|)'
+
 define(`darrow',`deleminit_(`$1',,`$4')
+  arrow invis from last line.start to last line.end
   ifelse(ifinstr(`$7',<->,,`$7',<-,T),T,
    `define(`m4dx',`ifinstr(`$7',|,|,`$7',!,!)'->)dnl
     M4DA: line invis from last line.end to last line.start \
@@ -170,7 +188,7 @@
     W: vec_(lthick/2,0)
     X: ifinstr(`$7',<->,C,m4dx,!,S,m4dx,|,S+(W.x,W.y),S)
   ifgpic(`shade(dfillgrey,') line dnl
-  ifelse(rgbstring(1,1,1),"",,`shaded rgbstring(dfillcolor)') from dnl
+  ifelse(rgbstring(dfillcolor),"",,`shaded rgbstring(dfillcolor)') `$8' from dnl
     ifinstr(m4dx,|,`X to X+(V.x,V.y) then',`X+(V.x,V.y)') to \
     E-(T.x,T.y)+(V.x,V.y) then to E-(T.x,T.y)+(Vt.x,Vt.y) \
     then to E-(P.x,P.y) \
@@ -195,109 +213,187 @@
    `arrow invis from M4DA.start to M4DA.end')
 ')
 
-               `Darrow(linespec,params)
-                 params is a semicolon-separated list of items:
-                   S truncate at start by dline thickness/2
-                   E truncate at end by dline thickness/2
-                   thick=val   (total thicknes, ie width)
-                   wid=val     (arrowhead width)
-                   ht=val      (arrowhead height)
-                   ends= -> or x-> or <- or <-x or <-> where x is | or ! 
-                   |- closed end with full-width line
-                   !- closed end with half-width line
-                eg Darrow(from A to B,E;ends=<-|)'
-define(`Darrow',
- `pushkey_(`$2',thick,dlthick)
-  pushkey_(`$2',wid,dlthick*3/2)
-  pushkey_(`$2',ht,dlthick)
-  pushkey_(`$2',ends)pushdef(`m4ends',substr(m4ends,1,eval(len(m4ends)-2)))
-  darrow(`$1',ifinstr(`$2',S,t),ifinstr(`$2',E,t),m4thick,m4wid,m4ht,m4ends)dnl
-  popdef(`m4ends')popdef(`m4ends')popdef(`m4ht',`m4wid',`m4thick')')
-
-                          `dtee([L|R],dlthick) Construct tee with tail right,
-                           left, or back along current direction, leaving
-                           current location at tee centre; eg
+                          `dtee([L|R],dlthick|attribs)
+                           Construct tee with tail to back (default), left,
+                           or right of current direction, leaving current
+                           location at tee centre; eg
                            dline(right_,,t); dtee(R);
-                           { darrow(down_,t) }; darrow(right_,t)'
-define(`dtee',`deleminit_(,ifelse(`$2',,dlthick,`$2'),`$2')
+                           { darrow(down_,t) }; darrow(right_,t)
+                           attribs:
+                             thick=expr; (line thickness in drawing units)
+                             innershade=(r,g,b)|"color";
+                             outline=(r,g,b)|"color";'
+define(`dtee',`pushkeys_(`$2',thick:m4nil;innershade::N;outline::N;)dnl
+  deleminit_(,ifelse(m4thick,(m4nil),dlthick,m4thick))
   move to last line.c
-  ifelse(`$1',L,`rp_ang = rp_ang-pi_/2',`$1',R,`rp_ang = rp_ang+pi_/2')
-  ifelse(rgbstring(1,1,1),"",,
-   `{line thick dlthick/(1bp__) from rvec_(-m4dlthk/2,0) to rvec_(m4dlthk/2,0)}
-    {line thick dlthick/(1bp__)-2*linethick outlined rgbstring(dfillcolor) \
-       to rvec_(-m4dlthk/2,0) }
-    {line thick dlthick/(1bp__)-2*linethick outlined rgbstring(dfillcolor) \
-      from rvec_(0,-m4dlthk/2) to rvec_(0,m4dlthk/2) } ')
+  ifelse(`$1',L,`rp_ang = rp_ang-pi_/2', `$1',R,`rp_ang = rp_ang+pi_/2')
+  ifelse(m4innershade,,,`pushdef(`dfillcolor',`m4ctrunc(m4innershade)')') dnl
+  {line thick m4dlthk/(1bp__) dnl
+    ifelse(m4outline,,,index(m4outline,`"'),0,`outlined m4outline',
+    `outlined rgbstring(m4ctrunc(m4outline))') dnl
+    from rvec_(-m4dlthk/2,0) to rvec_(m4dlthk/2,0)}
+  pushdef(`m4dll',(m4dlthk/2+dfillext))dnl
+  pushdef(`m4df',`rgbstring(dfillcolor)')dnl
+  ifelse(m4df,"",,
+   `{line thick m4dlthk/(1bp__)-2*linethick outlined m4df to rvec_(-m4dll,0) }
+    {line thick m4dlthk/(1bp__)-2*linethick outlined m4df \
+       from rvec_(0,-m4dll) to rvec_(0,m4dll) } ')
   ifgpic(`m4tmpth = linethick; linethick=0; shade(dfillgrey,
     {line from rvec_(-m4dlthk/2, m4dlthk/2) to rvec_( m4dlthk/2, m4dlthk/2)}
     {line from rvec_( m4dlthk/2,-m4dlthk/2) to rvec_(-m4dlthk/2,-m4dlthk/2)})
-    linethick = m4tmpth') ')
+    linethick = m4tmpth')
+  ifelse(m4innershade,,,`popdef(`dfillcolor')')dnl
+  popdef(`m4thick',`m4innershade',`m4outline',`m4dll',`m4df')')
 
-                                Close off line end: `dend([at position])'
-define(`dend',`deleminit_(,lthick)
- ifelse(`$1',,,`move to substr(`$1',eval(index(`$1',at)+2))')
- {line from rvec_(0,-dlthick/2) to rvec_(0,dlthick/2)}
- move to rvec_(lthick/2,0) ')
+                           `dend([at position],dlthick|attribs)
+                           Close off line end
+                           attribs:
+                             thick=expr; (line thickness in drawing units)
+                             outline=(r,g,b)|"color";'
+define(`dend',`pushkeys_(`$2',thick:m4nil;outline::N;)dnl
+  pushdef(`m4thk',`ifelse(m4thick,(m4nil),dlthick,m4thick)')dnl
+  ifelse(`$1',,,`move to patsubst(`$1',`^ *at *')')
+  {line ifelse(m4outline,,,`outlined m4outline') ifinstr(`$2',=,,`$2') dnl
+    from rvec_(0,-m4thk/2) to rvec_(0,m4thk/2) }
+  move to rvec_(last line.thick pt__/2,0)dnl
+  popdef(`m4thick',`m4outline',`m4thk')')
 
                 `darc(center pos, radius, start radians, end radians, dlthick,
-                      arrow wid, arrow ht, symbols )  draw CCW arc
+                      arrow wid, arrow ht, symbols,
+                      outline attributes, inner attributes )
+                 draw CCW arc in a [ ] block
                  symbols= x-, -x, x-x, ->, x->, <-, <-x, <->
                  where x is | or ! ; arrowheads for dpic only '
-define(`darc',`[ C: (0,0)
-  dlth=ifelse(`$5',,dlthick,`$5')
-  w = ifelse(`$6',,dlth*1.75,(`$6'))
-  h = ifelse(`$7',,dlth,(`$7'))
-  r = ifelse(`$2',,darcrad,`($2)')
-  p = sqrt((w/2)^2+h^2)/(w/2)*lthick
-  as = ifelse(`$3',,rp_ang-pi__/2,`$3')
-  tas = as ifinstr(`$8',<-,`+ p/r')
-  ae = ifelse(`$4',,as+pi__/2,`$4')
-  tae = ae ifinstr(`$8',<-,`- p/r')
-  S: (rect_(r,as)); TS: (rect_(r,tas))
-  E: (rect_(r,ae)); TE: (rect_(r,tae))
-  arc thick dlth/(1bp__) wid w ht h dnl
-   ifinstr(`$8',<-,<-`'ifinstr(`$8',->,>),`$8',->,->) from S to E with .c at C
-  ifelse(rgbstring(1,1,1),"",,
-   `arc thick dlth/(1bp__)-linethick*2 wid (h-p-lthick)/h*w ht h-p-lthick \
-      colored rgbstring(dfillcolor) \
+pushdef(`darc',`pushdef(`m4r',`(ifelse(`$2',,darcrad,`($2)'))') dnl
+  pushdef(`m4C',`ifelse(`$1',,rvec_(0,m4r),`$1')') dnl
+  pushdef(`m4as',`(ifelse(`$3',,rp_ang-pi__/2,`$3'))') dnl
+  pushdef(`m4ae',`(ifelse(`$4',,m4as+pi__/2,`$4'))') dnl
+  arc invis from m4C+(rect_(m4r,m4as)) to m4C+(rect_(m4r,m4ae)) with .c at m4C
+  C_darc: last arc.c; Start_darc: last arc.start; End_darc: Here
+  r_darc = m4r; as_darc = m4as; ae_darc = m4ae popdef(`m4r',`m4C',`m4as',`m4ae')
+  dlth_darc=ifelse(`$5',,dlthick,(`$5'))
+  w_darc = ifelse(`$6',,dlth_darc*1.75,(`$6'))
+  h_darc = ifelse(`$7',,dlth_darc,(`$7'))
+  p_darc = sqrt((w_darc/2)^2+h_darc^2)/(w_darc/2)*lthick
+  tas_darc = as_darc ifinstr(`$8',<-,`+ p_darc/r_darc')
+  tae_darc = ae_darc ifinstr(`$8',->,`- p_darc/r_darc')
+  TS: C_darc+(rect_(r_darc,tas_darc))
+  TE: C_darc+(rect_(r_darc,tae_darc))
+  { arc thick dlth_darc/(1bp__) wid w_darc ht h_darc dnl
+    ifinstr(`$8',<-,<-`'ifinstr(`$8',->,>),`$8',->,->) dnl
+    `$9' from Start_darc to End_darc with .c at C_darc }
+  pushdef(`m4inn',`ifelse(`$10',,`ifelse(rgbstring(dfillcolor),"",,
+    ifdef(`dfillcolor',T),T,`outlined rgbstring(dfillcolor)')',`$10')') dnl
+  ifelse(m4inn,,,
+   `arc thick dlth_darc/(1bp__)-linethick*2 \
+      wid (h_darc-p_darc-lthick)/h_darc*w_darc ht h_darc-p_darc-lthick \
       ifinstr(`$8',<-,<-`'ifinstr(`$8',->,>),`$8',->,->) \
-      from TS to TE rad r with .c at C')
-  ifinstr(`$8',|-,`X: (vscal_(lthick/2,-sin(as),cos(as)))
-    line from C+(rect_(r+dlthick/2-lthick/2,as))+(X.x,X.y) to \
-              C+(rect_(r-dlthick/2+lthick/2,as))+(X.x,X.y)',
-  `$8',!-,`X: (vscal_(lthick/4,-sin(as),cos(as)))
-    line thick linethick/2 \
-      from C+(rect_(r+dlthick/2-lthick/4,as))+(X.x,X.y) to \
-           C+(rect_(r-dlthick/2+lthick/4,as))+(X.x,X.y)')
-  ifinstr(`$8',-|,`X: (vscal_(lthick/2,-sin(ae),cos(ae)))
-    line from C+(rect_(r+dlthick/2-lthick/2,ae))-(X.x,X.y) to \
-              C+(rect_(r-dlthick/2+lthick/2,ae))-(X.x,X.y)',
-  `$8',!-,`X: (vscal_(lthick/4,-sin(ae),cos(ae)))
-    line thick linethick/2 \
-      from C+(rect_(r+dlthick/2-lthick/4,ae))-(X.x,X.y) to \
-           C+(rect_(r-dlthick/2+lthick/4,ae))-(X.x,X.y)')
-  rp_ang := ae+pi__/2
-  ] with ifelse(`$1',,.S at Here,.C at `$1')
-  move to last [].E
-  ')
+      m4inn from TS to TE with .c at C_darc') popdef(`m4inn')
+  ifinstr(`$8',|-,`X: (vscal_(lthick/2,-sin(as_darc),cos(as_darc)))
+    line `$9' \
+    from C_darc+(rect_(r_darc+dlth_darc/2-lthick/2,as_darc))+X to \
+         C_darc+(rect_(r_darc-dlth_darc/2+lthick/2,as_darc))+X',
+  `$8',!-,`X: (vscal_(lthick/4,-sin(as_darc),cos(as_darc)))
+    line `$9' thick linethick/2 \
+      from C_darc+(rect_(r_darc+dlth_darc/2-lthick/4,as_darc))+X to \
+           C_darc+(rect_(r_darc-dlth_darc/2+lthick/4,as_darc))+X')
+  ifinstr(`$8',-|,`X: (vscal_(lthick/2,-sin(ae_darc),cos(ae_darc)))
+    line `$9' from C_darc+(rect_(r_darc+dlth_darc/2-lthick/2,ae_darc))-X to \
+              C_darc+(rect_(r_darc-dlth_darc/2+lthick/2,ae_darc))-X',
+  `$8',-!,`X: (vscal_(lthick/4,-sin(ae_darc),cos(ae_darc)))
+    line `$9' thick linethick/2 \
+      from C_darc+(rect_(r_darc+dlth_darc/2-lthick/4,ae_darc))-X to \
+           C_darc+(rect_(r_darc-dlth_darc/2+lthick/4,ae_darc))-X')
+  rp_ang := ae_darc+pi__/2 ')
 
                 `Darc(center pos, radius, start radians, end radians, params)
+                   or
+                 Darc(,params)
                  draw CCW arc
-                 params is a semicolon-separated list of items:
-                   thick=val   (total thicknes, ie width)
-                   wid=val     (arrowhead width)
-                   ht=val      (arrowhead height)
+                 params is a semicolon-separated list:
+                   thick=val;  (total thicknes, ie width)
+                   wid=val;    (arrowhead width)
+                   ht=val;     (arrowhead height)
+                   outline=color; (e.g. "red" or (1,0,0) )
+                   innershade=color;  (e.g. (0,1,1) or "cyan")
                    ends= x-, -x, x-x, ->, x->, <-, <-x, <-> where x is ! or |
                      < and > work for dpic only
                    |- closed end with full-width line
                    !- closed end with half-width line
+                If arg1 is null then the additional list items are accepted:
+                   centre=Position;
+                   rad=expr;
+                   startdeg=degrees;  NOTE: degrees
+                   enddeg=degrees;    NOTE: degrees
                 eg Darc(C,r,ang1,ang2,ends=<-|)'
 define(`Darc',
- `pushkey_(`$5',thick,dlthick)
-  pushkey_(`$5',wid,dlthick*1.75)
-  pushkey_(`$5',ht,dlthick)
-  pushkey_(`$5',ends)pushdef(`m4ends',substr(m4ends,1,eval(len(m4ends)-2)))
-  darc(`$1',`$2',`$3',`$4',m4thick,m4wid,m4ht,m4ends)dnl
-  popdef(`m4ends')popdef(`m4ends')popdef(`m4ht',`m4wid',`m4thick')')
+ `pushkeys_(ifelse(`$1',,`$2',`$5'),thick:dlthick;wid:dlthick*1.75;ht:dlthick;
+    outline::N;innershade::N;ends::N;centre:Here:N;rad:darcrad;
+    startdeg::;enddeg::;)dnl
+  pushdef(`m4ou',`m4osh(m4outline,outlined)')dnl
+  pushdef(`m4sh',`m4osh(m4innershade,outlined,`dfillcolor')')dnl
+  ifelse(`$1',,
+   `darc(m4centre,m4rad,m4startdeg*dtor_,m4enddeg*dtor_,
+      m4thick,m4wid,m4ht,m4ends,m4ou,m4sh)',
+   `darc(`$1',`$2',ifelse(m4startdeg,,`$3',m4startdeg*dtor_),
+     ifelse(m4enddeg,,`$4',m4enddeg*dtor_),
+     m4thick,m4wid,m4ht,m4ends,m4ou,m4sh)') dnl
+  popdef(`m4thick',`m4wid',`m4ht',`m4outline',`m4innershade',`m4ends',
+    `m4centre',`m4rad',`m4startdeg',`m4enddeg',`m4ou',`m4sh')')')
 
+               `darrow(linespec,params)
+                 params is a semicolon-separated list of items:
+                   s; truncate at start by dline thickness/2
+                   e; truncate at end by dline thickness/2
+                   thick=expr;   (total thicknes, ie width)
+                   wid=expr;     (arrowhead width)
+                   ht=expr;      (arrowhead height)
+                   outline=color; (e.g. "red" or (1,0,0) )
+                   innershade=color;  (e.g. (0,1,1) or "cyan")
+                   name=name;    (name of underlying invis line)
+                   ends= -> or x-> or <- or <-x or <-> where x is | or ! 
+                     |- closed end with full-width line
+                     !- closed end with half-width line
+                     eg Darrow(from A to B,E;ends=<-|)'
+define(`Darrow',
+ `pushkeys_(`$2',thick:dlthick;wid:dlthick*3/2;ht:dlthick;
+    outline::N;innershade::N;name::N;ends::N;)dnl
+  ifelse(m4innershade,,,`pushdef(`dfillcolor',`m4ctrunc(m4innershade)')')dnl
+  pushdef(`m4nm',ifelse(m4name,,,m4name:))dnl
+  ifelse(m4outline,,
+   `m4nm darrow(`$1',ifinstr(`$2',S,t),ifinstr(`$2',E,t),
+     m4thick,m4wid,m4ht,m4ends)',
+  index(m4outline,`"'),0,
+   `m4nm darrow(`$1',ifinstr(`$2',S,t),ifinstr(`$2',E,t),
+     m4thick,m4wid,m4ht,m4ends,outlined m4outline)',
+   `rgbdraw(m4ctrunc(m4outline),
+     m4nm darrow(`$1',ifinstr(`$2',S,t),ifinstr(`$2',E,t),
+     m4thick,m4wid,m4ht,m4ends))')
+  ifelse(m4innershade,,,`popdef(`dfillcolor')')dnl
+  popdef(`m4ends',`m4thick',`m4wid',`m4ht',`m4outline',`m4innershade',`m4name',
+   `m4nm')')
+
+               `Dline(linespec,params)
+                 params is a semicolon-separated list of items:
+                   S; truncate at start by dline thickness/2
+                   E; truncate at end by dline thickness/2
+                   thick=val;   (total thicknes, ie width)
+                   outline=color; (e.g. "red" or (1,0,0) )
+                   innershade=color;  (e.g. (0,1,1) or "cyan")
+                   name=Name;
+                   ends= x-x; or -x; or x-; where x is ! or |
+                   |- closed end with full-width line
+                   !- closed end with half-width line
+                eg Dline(from A to B,E;ends=|-)'
+define(`Dline',
+ `pushkeys_(`$2',thick:dlthick;outline::N;innershade::N;ends::N;name::N;)dnl
+  ifelse(m4name,,,m4name:) dline(`$1',ifinstr(`$2',S;,t),ifinstr(`$2',E;,t),
+    m4thick,m4ends,m4osh(m4outline,outlined),
+                   m4osh(m4innershade,outlined,`dfillcolor'))
+  popdef(`m4thick',`m4outline',`m4innershade',`m4ends',`m4name') ')
+
+define(`m4ctrunc',`substr(`$1',1,eval(len(`$1')-2))')
+
+#efine(`mark',`{dot(at `$1'); "`$1'" at last [].s below}')
+#efine(`pure',`patsubst(`$1',`"',`\\"')')
 divert(0)dnl

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/doc/Circuit_macros.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/doc/SourcesMan.m4
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/doc/SourcesMan.m4	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/doc/SourcesMan.m4	2023-09-13 20:35:42 UTC (rev 68264)
@@ -14,6 +14,7 @@
    {source     ; move ; "`source'" ljust} NL
    {source(,I) ; move ; "`source(,I)'" ljust} NL
    {source(,i) ; move ; "`source(,i)'" ljust} NL
+   {source(,ii) ; move ; "`source(,ii)'" ljust} NL
    {source(,V) ; move ; "`source(,V)'" ljust} NL
    {source(,v) ; move ; "`source(,v)'" ljust} NL
    {source(,S) ; move ; "`source(,S)'" ljust} NL

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/doc/Version.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/doc/Version.tex	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/doc/Version.tex	2023-09-13 20:35:42 UTC (rev 68264)
@@ -1 +1 @@
-Version 10.3
+Version 10.4

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/doc/body.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/doc/body.tex	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/doc/body.tex	2023-09-13 20:35:42 UTC (rev 68264)
@@ -946,6 +946,7 @@
 and
 {\tt Ysymbol(at {\sl position, keys,} U|D|L|R|{\sl degrees})},
 
+\enlargethispage{\baselineskip}
 Diodes are shown in \FR{Diodes}.
 \begin{figure}[H]
    \input DiodesMan
@@ -2481,7 +2482,7 @@
 
 The fourth argument is like the third but controls a breaker or slash
 symbol in the output
-lead. The example, {\tt sl\_transformer(right\_ elen\_ from A,,C,C)}
+lead. The example, {\tt sl\_transformer(right\_ elen\_ from A,{},C,C)}
 draws a transformer with closed breakers in the input and output leads.
 
 Exception are the {\tt sl\_drawout()} element which does not have breakers

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/doc/defines.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/doc/defines.tex	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/doc/defines.tex	2023-09-13 20:35:42 UTC (rev 68264)
@@ -187,14 +187,14 @@
   {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}
   {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'}}
-\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{Autologix}{Autologix}%
  {({\sl Boolean function sequence},%
     [N[oconnect]][L[eftinputs]][R][V][M][;offset={\sl value}])}
@@ -239,6 +239,14 @@
    {\tt Autologix(Xor([PN],And(x,y),And(x,y)),LRV)}}
 
 \Letter{B}%
+\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}
+  {n-cell battery: default 1 cell,
+  R=reversed polarity\seesect{Twoterminal:}}
 \macrodef{b\_}{b_}{}
   {gen}
   {blue color value}
@@ -247,14 +255,6 @@
   {cct}
   {labelled branch-current arrow to {\sl frac} between branch end and body
     \seesect{Branchcurrent:}}
-\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}
-  {n-cell battery: default 1 cell,
-  R=reversed polarity\seesect{Twoterminal:}}
 \macrodef{beginshade}{beginshade}{({\sl gray value})}
   {gen}
   {begin gray shading, see {\tt shade}
@@ -270,10 +270,10 @@
   {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{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:}}
+\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:
@@ -291,15 +291,10 @@
    {\tt [u]T}=thyristor trigger line;
    arg 4 = E: envelope
     \seesect{Semiconductors:}}
-\macrodef{binary\_}{binary_}{($n$, [$m$])}
-  {gen}
-  {binary representation of $n,$ left padded to $m$ digits if the second
-   argument is nonblank}
-\macrodef{BOX\_gate}{BOX_gate}{({\sl inputs,output,swid,sht,label})}
-  {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{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:}}
 \macrodef{boxcoord}{boxcoord}{({\sl planar obj},{\sl x fraction},{\sl y
     fraction})}
   {gen}
@@ -309,6 +304,11 @@
   {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}
+  {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})}
@@ -316,12 +316,6 @@
   {cct}
   {pushbutton switch R=right orientation (default L=left);
      chars: O= normally open, C=normally closed }
-\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{BUFFER\_gate}{BUFFER_gate}{(\linespec, [N|B],
   {\sl wid, ht,} [N|P]\char42, [N|P]\char42, [N|P]\char42)}
   {log}
@@ -339,14 +333,17 @@
             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}
   {buzzer, {\sl In1} to {\sl In3} defined, C=curved
    \seesect{Composite:}}
 \Letter{C}%
-\macrodef{c\_fet}{c_fet}{(\linespec,R,P)}
-  {cct}
-  {left or right, plain or negated pin simplified MOSFET}
 \macrodef{capacitor}{capacitor}{(\linespec,{\sl chars},R,
     {\sl height}, {\sl wid})}
   {cct}
@@ -385,6 +382,9 @@
    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
@@ -457,14 +457,14 @@
     {\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}
   {Plots a small cross.  The possible key-value pairs are:
     {\tt size={\sl expr};},
     {\tt line={\sl attributes};} }
-\macrodef{cross3D}{cross3D}{({\sl x1,y1,z1,x2,y2,z2})}
-  {3D}
-  {cross product of two triples}
 \macrodef{crossover}{crossover}{(\linespec, [L|R][:{\sl line attributes}],
   Line1, Line2, .{.}.)}
   {cct}
@@ -476,10 +476,6 @@
   {cct}
   {controlled-source width}
 \Letter{D}%
-\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{dabove}{dabove}{(at {\sl location})}
   {darrow}
   {above (displaced dlinewid/2)}
@@ -488,18 +484,6 @@
   {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:}}
-\macrodef{darc}{darc}{({\sl center position},
-  {\sl radius}, {\sl start radians}, {\sl end radians}, {\sl dline thickness},
-  {\sl arrowhead wid}, {\sl arrowhead ht},
-  {\sl terminals})}
-  {darrow}
-  {See also {\tt Darc}.
-   CCW arc in {\tt dline} style, with closed ends or (dpic only) arrowheads.
-  Permissible {\sl terminals}:
-  {\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 !}.}
 \macrodef{Darc}{Darc}{({\sl center position},
   {\sl radius}, {\sl start radians}, {\sl end radians},
   {\sl parameters})}
@@ -512,6 +496,20 @@
   {\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 !}.}
+\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}
+  {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 <->}
+  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}
   {Composite Darlington pair Q1 and Q2 with internal locations E, B, C;
@@ -524,33 +522,44 @@
    R2= Q2 bias resistor; E1= ebox,
    Z= zener bias diode 
     \seesect{Semiconductors:}}
-\macrodef{darrow\_init}{darrow_init}{}
+\macrodef{darrow}{darrow}{(\linespec,
+  t,t,{\sl width},{\sl arrowhd wd},{\sl arrowhd ht},{\sl parameters},
+    {\sl color attributes})}
   {darrow}
-  {initialize darrow drawing parameters (reads {\tt darrow.m4})}
+  {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}}
+    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}
   {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 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).}
-\macrodef{darrow}{darrow}{(\linespec,
-  t,t,{\sl width},{\sl arrowhd wd},{\sl arrowhd ht},{\sl parameters})}
+       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}
-  {See also {\tt Darrow}.
-   double arrow, truncated at beginning or end, specified sizes,
-    with arrowhead or closed stem.
-    {\sl parameters=}
-    {\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. }
+  {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}
@@ -567,14 +576,14 @@
   {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$}
+   {\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{delay}{delay}{(\linespec,{\sl size})}
-  {cct}
-  {delay element\seesect{Twoterminal:}}
 \macrodef{deleminit\_}{deleminit_}{}
   {darrow}
   {sets drawing direction for dlines}
@@ -599,18 +608,26 @@
     {\tt S[{\sl n}]} puts the Sel inputs at the bottom (default)
     {\tt OE} ({\tt N=}negated) {\tt OE} pin
     \seesect{Logicgates:}}
-\macrodef{dend}{dend}{(at {\sl location})}
+\macrodef{dend}{dend}{(at {\sl location},
+  {\sl line thickness}{\tt |}{\sl attributes})}
   {darrow}
-  {close (or start) double line}
+  {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}
+  {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{diff3D}{diff3D}{({\sl x1,y1,z1,x2,y2,z2})}
-  {3D}
-  {difference of two triples}
 \macrodef{dimen\_}{dimen_}{}
   {cct}
   {size parameter for scaling circuit element bodies \seesect{Circuitscaling:}}
@@ -671,20 +688,27 @@
       line rather than the centre of the last {\tt [ ]};
     L,R,A,B align labels ljust, rjust, above,
       or below (absolute) respectively  \seesect{Labels:}}
-\macrodef{dleft}{dleft}{}
+\macrodef{dleft}{dleft}{({\tt at} {\sl position}, {\sl line thickness},
+      {\sl attributes})}
   {darrow}
-  {double line left turn}
+  {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}
   {Wrapper for {\tt dline}.
-  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);
+  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).}
+       or {\tt |;} (full-width line).}
 \macrodef{dline}{dline}{(\linespec,t,t,{\sl width},{\sl parameters})}
   {darrow}
   {See also {\tt Dline}.
@@ -701,15 +725,18 @@
 \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{dna\_}{dna_}{}
-  {cct}
-  {internal character sequence that specifies which subcomponents are drawn}
 %\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}
   {Filled circle (third arg= gray value: 0=black, 1=white). The possible
@@ -716,9 +743,6 @@
    key-value pairs are:
     {\tt rad={\sl expr};} and
     {\tt circle={\sl attributes};} }
-\macrodef{dot3D}{dot3D}{({\sl x1,y1,z1,x2,y2,z2})}
-  {3D}
-  {dot product of two triples}
 \macrodef{dotrad\_}{dotrad_}{}
   {gen}
   {dot radius}
@@ -725,9 +749,13 @@
 \macrodef{down\_}{down_}{}
   {gen}
   {sets current direction to down \seesect{Placing:}}
-\macrodef{dright}{dright}{}
+\macrodef{dright}{dright}{({\tt at} {\sl position}, {\sl line thickness},
+      {\sl attributes})}
   {darrow}
-  {double arrow right turn}
+  {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)}
@@ -763,28 +791,30 @@
          Y = pull switch,
          Z = turn switch
    \seesect{Twoterminal:}}
-\macrodef{dtee}{dtee}{([L|R])}
+\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 }
+  {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.,
+   {\tt dline(right\_,{,}t); dtee(R);
+    \{ 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}
-\macrodef{dturn}{dturn}{({\sl degrees ccw})}
+\macrodef{dturn}{dturn}{({\sl degrees ccw},{\sl line thickness},
+  {\sl attributes})}
   {darrow}
-  {turn dline arg1 degrees left (ccw)}
+  {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.}
+%
 \Letter{E}%
-\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{earphone}{earphone}{( U|D|L|R|{\sl degrees, size})}
   {cct}
   {earphone, {\sl In1} to {\sl In3} defined
@@ -800,6 +830,17 @@
    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}
+  {left or right, N or P enhancement MOSFET, normal
+   or simplified, without or with envelope
+    \seesect{Semiconductors:}}
 \macrodef{elchop}{elchop}{({\sl Name1,Name2})}
   {gen}
   {{\tt chop} for ellipses: evaluates to {\tt chop} $r$ where $r$ is
@@ -812,6 +853,13 @@
 \macrodef{elen\_}{elen_}{}
   {cct}
   {default element length}
+\macrodef{ellipsearc}{ellipsearc}{({\sl width, height, startangle, endangle,
+   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]}
@@ -832,6 +880,7 @@
 \macrodef{expe}{expe}{}
   {gen}
   {exponential, base $e$}
+%
 \Letter{F}%
 \macrodef{f\_box}{f_box}{({\sl boxspecs},{\sl text},{\sl expr1},$\cdots$)}
   {gen}
@@ -860,11 +909,6 @@
 \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{FlipFlop}{FlipFlop}{(D|T|RS|JK,{\sl label},{\sl boxspec},%
- {\sl pinlength})}
-  {log}
-  {flip-flops,
-  {\sl boxspec}=e.g.\ ht x wid y \seesect{Logicgates:}}
 \macrodef{FlipFlop6}{FlipFlop6}{({\sl label},{\sl spec},{\sl boxspec})}
   {log}
   {{\em This macro (6-input flip-flops)
@@ -873,6 +917,11 @@
     {\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 }
+\macrodef{FlipFlop}{FlipFlop}{(D|T|RS|JK,{\sl label},{\sl boxspec},%
+ {\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)
@@ -903,9 +952,6 @@
  {\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{for\_}{for_}{({\sl start},{\sl end},{\sl increment},`{\sl actions}')}
-  {gen}
-  {integer for loop with index variable {\tt m4x} \seesect{Looping:}}
 \macrodef{foreach\_}{foreach_}{(`{\sl variable}',{\sl actions},{\sl
   value1, value2, $\ldots$})}
   {gen}
@@ -913,6 +959,9 @@
    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}
   {Feed-through capacitor; example of a composite element derived from
@@ -923,17 +972,8 @@
   {cct}
   {fuse symbol, type$=$
   {\tt  A|B|C|D|S|HB|HC|SB} or {\tt dA=D}\seesect{Twoterminal:}}
+%
 \Letter{G}%
-\macrodef{g\_}{g_}{}
-  {gen}
-  {green color value}
-\macrodef{G\_hht}{G_hht}{}
-  {log}
-  {gate half-height in {\tt L\_unit}s}
-\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{gap}{gap}{(\linespec,{\sl fill},A)}
   {cct}
   {gap with (filled) dots, A=chopped arrow between dots\seesect{Twoterminal:}}
@@ -941,6 +981,16 @@
   {gen}
   {initialize environment for general diagrams
     (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}
@@ -978,10 +1028,12 @@
   {Gyrator two-port wrapper for {\tt nport}, {\tt N} omits pin dots; {\tt V}
    gives a vertical orientation
    \seesect{Composite:}}
+%
 \Letter{H}%
-\macrodef{H\_ht}{H_ht}{}
-  {log}
-  {hysteresis symbol dimension in {\tt L\_unit}s}
+\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}
   {Header block with 1 or 2 columns and square Pin 1:
@@ -995,17 +1047,6 @@
   {log}
   {General pin for {\tt Header} macro; arg 4 specifies pin direction
    with respect to the current drawing direction)}
-\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{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]),}
-    otherwise a
-    {\tt heatert({\sl linespec, nparts, wid, ht, boxspec})}} 
 \macrodef{heatere}{heatere}{({\sl linespec, keys,} [R][T])}
   {cct}
   {Heater element with curved sides\seesect{Twoterminal:}.
@@ -1016,6 +1057,13 @@
     {\tt wdth={\sl expr};} (default {\tt lgth*2/5});
     {\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]),}
+    otherwise a
+    {\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:}.
@@ -1026,13 +1074,16 @@
     {\tt box={\sl body attributes};}
       (e.g., {\tt dotted, dashed, outlined, shaded}).
     Args 3--5 are unused if any key is given}
-\macrodef{hex\_digit}{hex_digit}{($n$)}
-  {gen}
-  {hexadecimal digit for $0 \leq n < 16$}
 \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}
@@ -1042,6 +1093,7 @@
 \macrodef{ht\_}{ht_}{}
   {gen}
   {height relative to current direction}
+%
 \Letter{I}%
 \macrodef{ifdpic}{ifdpic}{({\sl if true},{\sl if false})}
   {gen}
@@ -1086,9 +1138,6 @@
   {cct}
   {left or right IGBT, L=alternate gate type, D=parallel diode,
    dD=dotted connections }
-\macrodef{in\_\_}{in__}{}
-  {gen}
-  {absolute inches}
 \macrodef{inductor}{inductor}{(\linespec, W|L, {\sl cycles}, M[n]|P[n]|K[n],
    {\sl loop wid})}
   {cct}
@@ -1099,12 +1148,12 @@
      {\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{Int\_}{Int_}{}
-  {gen}
-  {corrected (old) gpic $int()$ function}
 \macrodef{integrator}{integrator}{(\linespec,{\sl size})}
   {cct}
   {integrating amplifier\seesect{Twoterminal:}}
@@ -1115,6 +1164,9 @@
 \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}
@@ -1121,11 +1173,8 @@
     along the line; {\tt P}= label only;
     {\tt N}=with {\tt NOT\_circle};
     {\tt R}=circle to right of current direction }
+%
 \Letter{J}%
-\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{jack}{jack}{(U|D|L|R|{\sl degrees},{\sl chars})}
   {cct}
   {arg1: drawing direction; string arg2: {\tt R}=right orientation,
@@ -1132,6 +1181,10 @@
    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}
+  {left or right, N or P JFET, without or with envelope
+    \seesect{Semiconductors:}}
 \macrodef{jumper}{jumper}{({\sl linespec, chars}|{\sl keys})}
   {cct}
   { Two-terminal solder jumper with named body parts.
@@ -1147,19 +1200,22 @@
                         {\tt wdth=}{\sl expr};
                         {\tt name=}{\sl chars} (the body name)%
 \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:}}
+%
 \Letter{L}%
-\macrodef{L\_unit}{L_unit}{}
-  {log}
-  {logic-element grid size}
 \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}
   {arrow {\sl dist} to left of last-drawn 2-terminal element
@@ -1177,13 +1233,13 @@
 \macrodef{left\_}{left_}{}
   {gen}
   {left with respect to current direction \seesect{Placing:}}
-\macrodef{length3D}{length3D}{(x,y,z)}
-  {3D}
-  {Euclidean length of triple x,y,z}
 \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}
@@ -1218,13 +1274,13 @@
   {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{linethick\_}{linethick_}{({\sl number})}
-  {gen}
-  {set line thickness in points}
 \macrodef{ljust\_}{ljust_}{}
   {gen}
   {ljust with respect to current direction}
@@ -1243,10 +1299,6 @@
 \macrodef{loc\_}{loc_}{({\sl x}, {\sl y})}
   {gen}
   {location adjusted for current direction}
-\macrodef{log\_init}{log_init}{}
-  {log}
-  {initialize environment for logic diagrams
-    (customizable, reads {\tt liblog.m4})}
 \macrodef{log10E\_}{log10E_}{}
   {gen}
   {constant $\log_{10}(e)$}
@@ -1253,6 +1305,10 @@
 \macrodef{loge}{loge}{}
   {gen}
   {logarithm, base $e$}
+\macrodef{log\_init}{log_init}{}
+  {log}
+  {initialize environment for logic diagrams
+    (customizable, reads {\tt liblog.m4})}
 \macrodef{Loopover\_}{Loopover_}{(`{\sl variable}',{\sl actions},{\sl
   value1, value2, $\ldots$})}
   {gen}
@@ -1259,19 +1315,22 @@
   {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{lp\_xy}{lp_xy}{}
-  {log}
-  {coordinates used by {\tt lg\_pin}}
 \macrodef{lpop}{lpop}{({\sl xcoord}, {\sl ycoord}, {\sl radius},
 {\sl fill},
   {\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}
   {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}
@@ -1278,9 +1337,10 @@
 \macrodef{LT\_symbol}{LT_symbol}{(U|D|L|R|{\sl degrees})}
   {log}
   {logic-gate triangle symbol}
-\macrodef{lthick}{lthick}{}
-  {gen}
-  {current line thickness in drawing units}
+\macrodef{L\_unit}{L_unit}{}
+  {log}
+  {logic-element grid size}
+%
 \Letter{M}%
 \macrodef{m4\_arrow}{m4_arrow}{(\linespec,{\sl ht},{\sl wid})}
   {gen}
@@ -1360,9 +1420,6 @@
 \macrodef{Mux\_ht}{Mux_ht}{}
   {cct}
   {Mux height parameter in {\tt L\_unit}s}
-\macrodef{Mux\_wid}{Mux_wid}{}
-  {cct}
-  {Mux width 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}
@@ -1373,19 +1430,14 @@
     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}
+%
 \Letter{N}%
-\macrodef{n\_}{n_}{}
-  {gen}
-  {.n with respect to current direction}
-\macrodef{N\_diam}{N_diam}{}
-  {log}
-  {diameter of `not' circles in {\tt L\_unit}s}
-\macrodef{N\_rad}{N_rad}{}
-  {log}
-  {radius of `not' circles in {\tt L\_unit}s}
 \macrodef{NAND\_gate}{NAND_gate}{({\sl n},N)}
   {log}
   {`nand' gate, 2 or {\sl n\/} inputs; N=negated input.
@@ -1392,9 +1444,9 @@
    Otherwise, arg1 can be a sequence of letters {\tt P|N} to define
    normal or negated inputs.
     \seesect{Logicgates:}}
-\macrodef{ne\_}{ne_}{}
-  {gen}
-  {.ne with respect to current direction}
+\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
@@ -1402,6 +1454,15 @@
 \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.
@@ -1408,9 +1469,6 @@
    Otherwise, arg1 can be a sequence of letters {\tt P|N} to define
    normal or negated inputs.
     \seesect{Logicgates:}}
-\macrodef{norator}{norator}{(\linespec,{\sl width},{\sl ht})}
-  {cct}
-  { norator two-terminal element \seesect{Twoterminal:}}
 \macrodef{NOT\_circle}{NOT_circle}{}
   {log}
   {`not' circle}
@@ -1441,6 +1499,9 @@
     (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}
 \macrodef{nterm}{nterm}{({\sl box spec{\tt ;}other commands,
 nw,nn,ne,ns,pin lgth,style, other commands})}
   {cct}
@@ -1463,6 +1524,7 @@
    Otherwise, arg1 can be a sequence of letters {\tt P|N} to define
    normal or negated inputs.
     \seesect{Logicgates:}}
+%
 \Letter{O}%
 \macrodef{opamp}{opamp}{(\linespec,{\sl label},{\sl
 label},{\sl size},{\sl
@@ -1495,9 +1557,9 @@
 \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,%
+\macrodef{parallel\_}{parallel_}{(\char96{\sl elementspec}\char39,%
  \char96{\sl elementspec}\char39 $\ldots$)}
   {cct}
   { Parallel combination of two-terminal elements in a {\tt [
@@ -1512,20 +1574,6 @@
     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{par\_}{par_}{({\sl element},{\sl element},{\sl separation})}
-%  {cct} %  {two same-direction, same-length elements in parallel}
-\macrodef{proximity}{proximity}{(\sl linespec)}
-  {cct}
-  {proximity detector (= {\tt consource(,P)})}
-\macrodef{pc\_\_}{pc__}{}
-  {gen}
-  {absolute points}
-\macrodef{pvcell}{pvcell}{({\sl linespec, width, height})}
-  {cct}
-  {PV cell}
-\macrodef{px\_\_}{px__}{}
-  {gen}
-  {absolute SVG screen pixels}
 \macrodef{pconnex}{pconnex}{(R|L|U|D|{\sl degrees},{\sl chars})}
   {cct}
   {power connectors, arg 1: drawing direction; {\sl chars:}
@@ -1533,6 +1581,19 @@
    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}
+  {{\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}
+  {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$}
@@ -1546,16 +1607,6 @@
 \macrodef{point\_}{point_}{({\sl angle})}
   {gen}
   {(radians) set direction cosines}
-\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}
-  {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{Point\_}{Point_}{({\sl integer})}
   {gen}
   {sets direction cosines in degrees \seesect{Placing:}}
@@ -1562,10 +1613,6 @@
 \macrodef{polar\_}{polar_}{({\sl x},{\sl y})}
   {gen}
   {rectangular-to polar conversion}
-\macrodef{langle}{langle}{({\sl Start, End})}
-  {gen}
-  {Angle in radians from horizontal of the line from {\sl Start}
-  to {\sl End}.}
 \macrodef{potentiometer}{potentiometer}{(\linespec,%
   {\sl cycles},{\sl fractional pos},{\sl length},$\cdots$)} {cct}
   {resistor with taps T1, T2, $\ldots$
@@ -1580,17 +1627,20 @@
   {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{pt\_\_}{pt__}{}
-  {gen}
-  {\TeX\ point-size factor, in scaled inches, ({\tt *scale/72.27})}
 \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}
   {pass transistor; {\tt L=} left orientation
@@ -1613,10 +1663,14 @@
    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}
+%
 \Letter{R}%
-\macrodef{r\_}{r_}{}
-  {gen}
-  {red color value}
 \macrodef{rarrow}{rarrow}{({\sl label,{\tt ->|<-},{\sl dist}})}
   {cct}
   {arrow {\sl dist} to right of last-drawn 2-terminal element
@@ -1633,14 +1687,6 @@
   {Enclosed reed two-terminal contact;
    {\tt R}=right orientation; {\tt C}=closed contact; e.g., {\tt
    reed(,,dimen\_/5,shaded "lightgreen"} \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{relaycoil}{relaycoil}{({\sl chars, wid, ht,} R|L|U|D|{\sl
 degrees})}
   {cct}
@@ -1654,6 +1700,14 @@
     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\_}}
@@ -1699,21 +1753,14 @@
    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}
-\macrodef{right\_}{right_}{}
-  {gen}
-  {set current direction right \seesect{Placing:}}
 \macrodef{RightAngle}{RightAngle}{({\sl Pos1, Pos2, Pos3, line len,
   attributes})} {gen}
   {Draw a right-angle symbol at {\sl Pos2}, of size
   given by arg4. Arg5 =
    line attributes, e.g., {\tt outlined "gray"}}
-\macrodef{r\_text}{r_text}{({\sl degrees},{\sl text},at {\sl position})}
+\macrodef{right\_}{right_}{}
   {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:}}
+  {set current direction right \seesect{Placing:}}
 \macrodef{rjust\_}{rjust_}{}
   {gen}
   {right justify with respect to current direction}
@@ -1735,12 +1782,6 @@
   {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{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{rotbox}{rotbox}{({\sl wid,ht,type},[r|t={\sl val}])}
   {gen}
   {box oriented in current direction in {\tt [ ]} block;
@@ -1754,6 +1795,12 @@
   {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}
   {filled circle for rounded corners; attributes={\tt colored
@@ -1766,6 +1813,9 @@
 \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))}}
@@ -1785,9 +1835,13 @@
 \macrodef{rsvec\_}{rsvec_}{({\sl position})}
   {gen}
   {Here + {\sl position}}
-\macrodef{rt\_}{rt_}{}
+\macrodef{r\_text}{r_text}{({\sl degrees},{\sl text},at {\sl position})}
   {gen}
-  {right with respect to current direction}
+  {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}
@@ -1794,54 +1848,36 @@
 \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{s\_}{s_}{}
-  {gen}
-  {.s with respect to current direction}
-\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{s\_dp}{s_dp}{({\sl name},{\sl default})}
-  {gen}
-  {depth of the most recent (or named) {\tt s\_box}
-    \seesect{Interaction:}}
-\macrodef{s\_ht}{s_ht}{({\sl name},{\sl default})}
-  {gen}
-  {height of the most recent (or named) {\tt s\_box}
-    \seesect{Interaction:}}
-\macrodef{s\_init}{s_init}{({\sl name})}
-  {gen}
-  {initialize {\tt s\_box} string label to {\sl name} which should
-  be unique
-    \seesect{Interaction:}}
-\macrodef{s\_name}{s_name}{}
-  {gen}
-  {the value of the last {\tt s\_init} argument
-    \seesect{Interaction:}}
-\macrodef{s\_wd}{s_wd}{({\sl name},{\sl default})}
-  {gen}
-  {width of the most recent (or named) {\tt s\_box}
-    \seesect{Interaction:}}
 \macrodef{sarrow}{sarrow}{(\linespec,{\sl keys})}
   {gen}
   {Single-segment, single-headed special arrows.
     The {\sl keys} are
        {\tt type=}{\tt O[pen]} (default)
-          | {\tt D[iamond]} | {\tt C[rowfoot]} | {\tt P[lain]}{\tt ;}
+          | {\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 name=}{\sl Name}{\tt ;} (default {\sl Sarrow\_})
   \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}
+  {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}
   {Wrapper to place an SBS thyristor as a two-terminal element with
@@ -1860,9 +1896,10 @@
   {Wrapper to place an SCS thyristor as a two-terminal element with
    {\tt [ ]} block label given by the third argument
     \seesect{Semiconductors:}}
-\macrodef{se\_}{se_}{}
+\macrodef{s\_dp}{s_dp}{({\sl name},{\sl default})}
   {gen}
-  {.se with respect to current direction}
+  {depth of the most recent (or named) {\tt s\_box}
+    \seesect{Interaction:}}
 \macrodef{series\_}{series_}{({\sl elementspec}, {\sl elementspec},
 $\ldots$)}
   {cct}
@@ -1873,6 +1910,9 @@
     [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}
@@ -1881,11 +1921,6 @@
     resetdir\_}).  The directions may be spelled out, i.e., Right,
     Left, $\ldots$
    \seesect{Seriesandparallel:}}
-\macrodef{setrgb}{setrgb}{({\sl red value, green value, blue value},[{\sl
-   name}])}
-  {gen}
-  {define colour for lines and text, optionally named (default
-   {\tt lcspec}); \seesect{Semiconductors:}}
 \macrodef{setkey\_}{setkey_}{({\sl string, key, default,}[N])}
   {gen}
   {Key-value definition, like {\tt pushkey\_()} but the resulting
@@ -1896,14 +1931,14 @@
   {Multiple key-value definition using {\tt define()} rather than
    {\tt pushdef().} See macro {\tt pushkeys\_}.
    \seesect{Macroarguments:}}
+\macrodef{setrgb}{setrgb}{({\sl red value, green value, blue value},[{\sl
+   name}])}
+  {gen}
+  {define colour for lines and text, optionally named (default
+   {\tt lcspec}); \seesect{Semiconductors:}}
 \macrodef{setview}{setview}{({\sl azimuth degrees},{\sl elevation
 degrees})}
   {3D} {set projection viewpoint}
-\macrodef{sfg\_init}{sfg_init}{({\sl default line len, node rad,
-arrowhd len,
-  arrowhd wid}), (reads {\tt libcct.m4})} {cct}
-  {initialization of signal
-  flow graph macros}
 \macrodef{sfgabove}{sfgabove}{}
   {cct}
   {like above but with extra space}
@@ -1916,6 +1951,11 @@
 \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}
+  {initialization of signal
+  flow graph macros}
 \macrodef{sfgline}{sfgline}{(\linespec,{\sl text},{\sl text
 justification})}
   {cct}
@@ -1932,11 +1972,6 @@
   {cct}
   {self-loop drawn at angle {\sl angle} from a node,
      with text label and a size-adjustment parameter }
-\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} }
@@ -1950,6 +1985,11 @@
    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}
 \macrodef{shadowed}{shadowed}{(box|circle|ellipse|line,
   {\sl position spec, keys})}
   {gen}
@@ -1969,6 +2009,10 @@
     (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}
   {Sets {\tt scale = 25.4} for drawing units in mm, and sets
@@ -1979,9 +2023,6 @@
 \macrodef{sign\_}{sign_}{({\sl number})}
   {gen}
   {sign function}
-\macrodef{Sin}{Sin}{({\sl integer})}
-  {gen}
-  {sine function, {\sl integer\/} degrees}
 \macrodef{sinc}{sinc}{({\sl number})}
   {gen}
   {the $\hbox{sinc}(x)$ function}
@@ -1988,6 +2029,14 @@
 \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}
 \macrodef{sinusoid}{sinusoid}{({\sl amplitude, frequency, phase, tmin,
   tmax, linetype})}
   {gen}
@@ -2234,6 +2283,36 @@
    {\tt size=}{\sl expr} (default {\tt ht dimen\_/3}).
    \seesect{SingleLine:}}
 %
+\macrodef{sl\_transformer3}{sl_transformer3}{({\sl linespec, keys,
+    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.
+
+   Argument 2 contains semicolon (;)-separated key-value body attributes:
+   {\tt name={\sl{}Name}} (default {\sl Body});
+   {\tt type=S|C} (default {\tt S});
+   {\tt scale={\sl expr}} (body size factor, default 1.0);
+   {\tt direct=L|R} (default {\tt L}) direction of the tertiary
+     circle and terminal relative to the drawing direction;
+   {\tt body={\sl circle attributes}}.
+
+   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}
+   and {\sl BrO} as for
+   {\tt sl\_transformer,} and {\sl Br} for the third breaker. 
+
+   Argument 4 is colon (:)-separated sequence of up to three symbol
+   specifications for the input, output, and teriary circle
+   in order.  A null or blank means no symbol;
+   {\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:}}
+%
 \macrodef{sl\_transformer}{sl_transformer}{({\sl linespec, keys,
     input breaker keys, output breaker keys,
     input circle inner object, output circle inner object})}
@@ -2273,35 +2352,6 @@
    otherwise, other customization commands expanded in a {\tt \lbr\rbr} pair.
    \seesect{SingleLine:}}
 %
-\macrodef{sl\_transformer3}{sl_transformer3}{({\sl linespec, keys,
-    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.
-
-   Argument 2 contains semicolon (;)-separated key-value body attributes:
-   {\tt name={\sl{}Name}} (default {\sl Body});
-   {\tt type=S|C} (default {\tt S});
-   {\tt scale={\sl expr}} (body size factor, default 1.0);
-   {\tt direct=L|R} (default {\tt L}) direction of the tertiary
-     circle and terminal relative to the drawing direction;
-   {\tt body={\sl circle attributes}}.
-
-   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}
-   and {\sl BrO} as for
-   {\tt sl\_transformer,} and {\sl Br} for the third breaker. 
-
-   Argument 4 is colon (:)-separated sequence of up to three symbol
-   specifications for the input, output, and teriary circle
-   in order.  A null or blank means no symbol;
-   {\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:}}
 \macrodef{sl\_ttbox}{sl_ttbox}{({\sl linespec, keys, input breaker keys,
     output breaker keys})}
   {SLD}
@@ -2326,28 +2376,29 @@
    except that the default breaker name is {\sl BrO}.
    \label{sl_ttbox}%
    \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}
 \macrodef{source}{source}{(\linespec,
-   V|v|I|i|AC|B|F|G|H|J|Q|L|N|P|S[C[r]]|E[r]]|T|X|U|{\sl other}, {\sl
+   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; 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
+                     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{sourcerad\_}{sourcerad_}{}
-  {cct}
-  {default source radius}
-\macrodef{sp\_}{sp_}{}
-  {gen}
-  {evaluates to medium space for gpic strings}
 \macrodef{speaker}{speaker}{( U|D|L|R|{\sl degrees},{\sl size},H)}
   {cct}
   {speaker, {\sl In1} to {\sl In7} defined; {\tt H}=horn
@@ -2354,6 +2405,9 @@
    \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}
   {square root of the absolute value of {\sl arg}; i.e.,
@@ -2364,6 +2418,9 @@
    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}
@@ -2398,11 +2455,11 @@
   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{sum3D}{sum3D}{({\sl x1,y1,z1,x2,y2,z2})}
-  {3D} {sum of two triples}
 \macrodef{sus}{sus}{({\sl linespec, chars, label})}
   {cct}
   {Wrapper to place an SUS thyristor as a two-terminal element with
@@ -2411,9 +2468,10 @@
 \macrodef{svec\_}{svec_}{({\sl x},{\sl y})}
   {log}
   {scaled and rotated grid coordinate vector}
-\macrodef{sw\_}{sw_}{}
+\macrodef{s\_wd}{s_wd}{({\sl name},{\sl default})}
   {gen}
-  {.sw with respect to current direction}
+  {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),
@@ -2423,10 +2481,11 @@
      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}
+%
 \Letter{T}%
-\macrodef{ta\_xy}{ta_xy}{({\sl x, y})}
-  {cct}
-  {macro-internal coordinates adjusted for {\tt L|R}}
 \macrodef{tapped}{tapped}{(`{\sl two-terminal element}',
   [{\sl arrowhd} | type={\sl arrowhd};name={\sl Name}],
     {\sl fraction, length, fraction, length,} $\cdots$)}
@@ -2440,6 +2499,9 @@
    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}
   {Pointed terminal box. The {\sl text} is placed at the rectangular
@@ -2520,12 +2582,6 @@
   {gen}
   {Evaluates to {\tt from {\sl position} - Rect\_({\sl length, angle}) to
    {\sl position}} from the polar-coordinate data in the arguments }
-\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{transformer}{transformer}{(\linespec,L|R,{\sl np},%
 [A|P][W|L][D1|D2|D12|D21],{\sl ns})}
   {cct}
@@ -2536,6 +2592,12 @@
     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}
   {terminal strip, chars:
@@ -2550,6 +2612,7 @@
 \macrodef{twopi\_}{twopi_}{}
   {gen}
   {$2\pi$}
+%
 \Letter{U}%
 \macrodef{ujt}{ujt}{(\linespec,R,P,E)}
   {cct}
@@ -2563,6 +2626,7 @@
 \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},
@@ -2616,10 +2680,8 @@
   {{\tt Vsum\_(A,B)} evaluates to {\tt A+B} with dpic, {\tt
   A+(B.x,B.y)}
    with gpic}
+%
 \Letter{W}%
-\macrodef{w\_}{w_}{}
-  {gen}
-  {.w with respect to current direction}
 \macrodef{while\_}{while_}{(`{\sl test}',`{\sl actions}')}
   {gen}
   {Integer m4 while loop}
@@ -2631,6 +2693,9 @@
   {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.
@@ -2640,6 +2705,7 @@
 \macrodef{XOR\_off}{XOR_off}{}
   {log}
   {XOR and NXOR offset of input face}
+%
 \Letter{X}%
 \macrodef{xtal}{xtal}{(\linespec,{\sl keys})}
   {cct}

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/dpictools.pic
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/dpictools.pic	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/dpictools.pic	2023-09-13 20:35:42 UTC (rev 68264)
@@ -3,7 +3,7 @@
 # m4 macro NeedDpicTools or the pic statement copy "HOMELIB_/dpictools.pic"
 # when HOMELIB_ is defined or, generically, copy "<path>dpictools.pic"
 
-# Circuit_macros Version 10.3, copyright (c) 2023 J. D. Aplevich under     #
+# Circuit_macros Version 10.4, copyright (c) 2023 J. D. Aplevich under     #
 # the LaTeX Project Public Licence in file Licence.txt. The files of       #
 # this distribution may be redistributed or modified provided that this    #
 # copyright notice is included and provided that modifications are clearly #

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/Alogix.m4
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/Alogix.m4	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/Alogix.m4	2023-09-13 20:35:42 UTC (rev 68264)
@@ -9,7 +9,7 @@
     move left 10bp__ from A.InCk
     "\sl Out1" at A.Out1 ljust
     "\sl Out2" at A.Out2 ljust
-    Loopover_(`v_', `"$v_$" at A.In`'v_ above ', A,B,C,Ck)
+    foreach_(`v_', `"$v_$" at A.In`'v_ above ', A,B,C,Ck)
  `"\shortstack[l]{
   \tt Autologix( \\ \tt \quad
      Nand(And(Or(A,C),Or(B,\~{}C),Or(\~{}A,B,C)),Ck);\\ \tt \quad
@@ -67,7 +67,7 @@
 ifdef(`extras',`
   Q1: Autologix(Nor(Nor(A,And(B,C)),Nand(Not(B),D))) \
     with .nw at A.sw+(0,-61bp__)
-  Loopover_(`x',`"\sf x" at last [].In`'x above',A,B,C,D)
+  foreach_(`x',`"\sf x" at last [].In`'x above',A,B,C,D)
 
   `"\shortstack[l]{%
     \tt Q1: Autologix(Nor(Nor(A,And(B,C)),Nand(Not(B),D)),<options>)\\
@@ -76,37 +76,37 @@
 
   Q2: Autologix(Nor(Nor(A,And(B,~C)),Nand(Not(B),D)),V) \
    with .nw at last "".sw+(0,-14bp__)
-  Loopover_(`x',`"\sf x" at last [].In`'x above',A,B,C,D)
+  foreach_(`x',`"\sf x" at last [].In`'x above',A,B,C,D)
   "\sf V" at last [].se above rjust
 
   Q3: Autologix(Nor(Nor(A,And(B,C)),Nand(Not(B),D)),R) \
    with .nw at last [].sw+(0,-0.2)
-  Loopover_(`x',`"\sf x" at last [].In`'x above',A,B,C,D)
+  foreach_(`x',`"\sf x" at last [].In`'x above',A,B,C,D)
   "\sf R" at last [].se above rjust
 
   Q4: Autologix(Nor(Nor(A,And(B,C)),Nand(Not(B),D)),RV) \
    with .nw at last [].sw+(0,-0.2)
-  Loopover_(`x',`"\sf x" at last [].In`'x above',A,B,C,D)
+  foreach_(`x',`"\sf x" at last [].In`'x above',A,B,C,D)
   "\sf RV" at last [].se above rjust
 
   Autologix(Nor(Nor(A,And(B,C)),Nand(Not(B),D)),LRV) \
    with .Out at Q4.Out+(3.5,0)
-  Loopover_(`x',`"\sf x" at last [].In`'x rjust',A,B,C,D)
+  foreach_(`x',`"\sf x" at last [].In`'x rjust',A,B,C,D)
   "\sf LRV" at last [].se above rjust
 
   Autologix(Nor(Nor(A,And(B,C)),Nand(Not(B),D)),LR;offset=-L_unit*1.5) \
    with .Out at Q3.Out+(3.5,0)
-  Loopover_(`x',`"\sf x" at last [].In`'x rjust',A,B,C,D)
+  foreach_(`x',`"\sf x" at last [].In`'x rjust',A,B,C,D)
   "\sf LR" at last [].se above rjust
 
   Autologix(Nor(Nor(A,And(B,~C)),Nand(Not(B),D)),LV;offset=L_unit*2) \
    with .Out at Q2.Out+(3.5,0)
-  Loopover_(`x',`"\sf x" at last [].In`'x rjust',A,B,C,D)
+  foreach_(`x',`"\sf x" at last [].In`'x rjust',A,B,C,D)
   "\sf LV" at last [].se above rjust
 
   Autologix(Nor(Nor(A,And(B,C)),Nand(Not(B),D)),L) \
    with .Out at Q1.Out+(3.5,0)
-  Loopover_(`x',`"\sf x" at last [].In`'x rjust',A,B,C,D)
+  foreach_(`x',`"\sf x" at last [].In`'x rjust',A,B,C,D)
   "\sf L" at last [].se above rjust
 ')
 

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/Smithchart.m4
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/Smithchart.m4	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/Smithchart.m4	2023-09-13 20:35:42 UTC (rev 68264)
@@ -56,7 +56,7 @@
   line thick thk grayline(thkg) from C.w to C.e
 
 Rc(50): circle thick thk grayline(thkg) rad rar(50) at Rac(50)
-Loopover_(`term',`RaArc1(patsubst(term,:,`,'))',
+foreach_(`term',`RaArc1(patsubst(term,:,`,'))',
  20:thn:50,
  30 to 40 by 10:thn:50,
  20:thk:20,
@@ -86,7 +86,7 @@
  0.01 to 0.191 by 0.01:thn:0.2,
  0.05 to 0.151 by 0.1:thk:0.2)
 
-Loopover_(`term',`RaArc2(patsubst(term,:,`,'))',
+foreach_(`term',`RaArc2(patsubst(term,:,`,'))',
  0.05 to 0.451 by 0.1:thn:1:0.5,
  0.02 to 0.181 by 0.02:thn:0.5:0.1)
 
@@ -95,7 +95,7 @@
 Xc(-50): arct(thk) grayline(thkg) from C.e \
   to SGamma(0,-50) with .c at Xac(-50)
 
-Loopover_(`term',`XaArc2(patsubst(term,:,`,'))',
+foreach_(`term',`XaArc2(patsubst(term,:,`,'))',
  10 to 20 by 10:thn:0:50,
  7 to 9 by 2:thn:0:10,
  2 to 18 by 2:thn:0:20,
@@ -112,7 +112,7 @@
  0.2 to 0.81 by 0.2:thk:0:2,
  0.1 to 0.91 by 0.2:thk:0:1)
 
-Loopover_(`term',`XaArc2(patsubst(term,:,`,'))',
+foreach_(`term',`XaArc2(patsubst(term,:,`,'))',
  0.05 to 0.451 by 0.1:thn:0.5:1,
  0.02 to 0.181 by 0.02:thn:0:0.5,
  0.02 to 0.191 by 0.01:thn:0:0.2, dnl 0.02 should be 0.01
@@ -125,12 +125,12 @@
 dnl                         Internal labels start here 
   textht = C.wid/120
 #                           Horizontal axis
-Loopover_(`t',`box wid textht ht textht*1.5 colored "white" \
+foreach_(`t',`box wid textht ht textht*1.5 colored "white" \
   with .se at Rc(t).w+(-2bp__,2bp__)
   r_text(90,"t",at Rc(t).w+(-textht/3,textht*1.5))',
   0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9, 1,1.2,1.4,1.6,1.8, 2,3,4,5,10,20,50)
 #                           Xc=1 labels
-Loopover_(`tt',
+foreach_(`tt',
  `define(`m4ta',patsubst(tt,:.*))define(`m4vl',patsubst(tt,.*:))dnl
   X: SGamma(m4vl,1)
   M: move from Rc(m4vl) to X; ax = lin_ang(M)*rtod_-90  #; print ax
@@ -139,7 +139,7 @@
   r_text(-m4ta,m4vl,at X+(Rect_(textht*1.7,-(ax+30)))) ',
   10:0.2, 19:0.4, 26:0.6, 32:0.8, 37:1)
 #                           right-side circumference
-Loopover_(`tt',
+foreach_(`tt',
  `define(`m4ta',patsubst(tt,:.*))define(`m4vl',patsubst(tt,.*:))dnl
   X: Xc(m4vl).start; ax = atan2(X.y,X.x)*rtod_ ; # print round_(ax)
   r_text(m4ta,m4vl,at X+(Rect_(textht*2,ax-120)))
@@ -148,13 +148,13 @@
   else { r_text(-m4ta,m4vl,at (X.x,-X.y)+(Rect_(textht*2,-ax+150))) } ',
   6:20, 11:10, 23:5, 28:4, 37:3, 53:2, 58:1.8, 64:1.6, 71:1.4, 80:1.2, 90:1)
 #                           left-side circumference
-Loopover_(`tt',
+foreach_(`tt',
  `X: Xc(m4Lx*0.1).start; # print round_(atan2(X.y,X.x)*rtod_-180)
   r_text(-patsubst(tt,:,`,'),at X+(Rect_(textht*1.7,-m4Lx*11+40)))
   r_text( patsubst(tt,:,`,'),at (X.x,-X.y)+(Rect_(textht*2.1,m4Lx*11-30))) ',
  11:0.1, 23:0.2, 33:0.3, 44:0.4, 53:0.5, 62:0.6, 70:0.7, 77:0.8, 84:0.9)
 #                           Ra=1 labels
-Loopover_(`tt',`X: SGamma(1,m4Lx*0.2)
+foreach_(`tt',`X: SGamma(1,m4Lx*0.2)
   M: move from Rac(1) to X; # print round_(lin_ang(M)*rtod_-180)
   r_text(-eval(m4Lx*11),ifelse(m4Lx,5,1,0.eval(m4Lx*2)),
    at X+(Rect_(textht*1.5,-m4Lx*11+40)))
@@ -188,7 +188,7 @@
   r_text(eval( 90-m4x),-m4x,at A+(Rect_(A.rad+textht*1.2,-m4x)))
  ')
   r_text(90,180,at A-(A.rad+textht/2,0))
-Loopover_(`rca',
+foreach_(`rca',
  `r_text(eval(90-(180-rca/10)),eval(m4Lx*5+5),
     at A+(Rect_(A.rad-textht*0.7,rca/10)))
   r_text(eval(-90+(180-rca/10)),eval(-m4Lx*5-5),
@@ -199,16 +199,16 @@
 #                           Internal labels
   setrgb(thng,thng,thkg)
   "RESISTANCE R/Zo OR CONDUCTANCE G/Yo" at C+SGamma(0.5,0)-(0,C.rad/40) 
-  Loopover_(`Lttr',`ifelse(Lttr,*,,`r_text(eval(87-m4Lx*86/100),Lttr,
+  foreach_(`Lttr',`ifelse(Lttr,*,,`r_text(eval(87-m4Lx*86/100),Lttr,
     at W+(Rect_(W.rad+wltic/2+textht*0.5, 177-m4Lx*0.86))) ')',
     W,A,V,E,L,E,N,G,T,H,S,*,T,O,W,A,R,D,*,G,E,N,E,R,A,T,O,R)
-  Loopover_(`Lttr',`ifelse(Lttr,*,,`r_text(eval(115-m4Lx*86/100),Lttr,
+  foreach_(`Lttr',`ifelse(Lttr,*,,`r_text(eval(115-m4Lx*86/100),Lttr,
     at W+(Rect_(W.rad-wltic/2-textht*1.0, 204-m4Lx*0.86))) ')',
     W,A,V,E,L,E,N,G,T,H,S,*,T,O,W,A,R,D,*,L,O,A,D)
-  Loopover_(`Lttr',`ifelse(Lttr,*,,`define(`xa','13-m4Lx*86/100`)
+  foreach_(`Lttr',`ifelse(Lttr,*,,`define(`xa','13-m4Lx*86/100`)
     r_text(eval(xa-90),Lttr,at A+(Rect_(A.rad+textht*0.7, xa))) ')',
     R,E,F,L,E,C,T,I,O,N,*,C,O,E,F,F,I,C,I,E,N,T,*,A,N,G,L,E)
-  Loopover_(`Lttr',`ifelse(Lttr,*,,`define(`xa','14-m4Lx*86/100`)
+  foreach_(`Lttr',`ifelse(Lttr,*,,`define(`xa','14-m4Lx*86/100`)
     r_text(eval(xa-90),Lttr,at A+(Rect_(A.rad-textht*0.7, xa))) ')',
     T,R,A,N,S,M,I,S,S,I,O,N,*,C,O,E,F,F,I,C,I,E,N,T,*,A,N,G,L,E)
   resetrgb

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/Sources.m4
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/Sources.m4	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/Sources.m4	2023-09-13 20:35:42 UTC (rev 68264)
@@ -14,6 +14,7 @@
    {source     ; move ; "`source'" ljust} NL
    {source(,I) ; move ; "`source(,I)'" ljust} NL
    {source(,i) ; move ; "`source(,i)'" ljust} NL
+   {source(,ii) ; move ; "`source(,ii)'" ljust} NL
    {source(,V) ; move ; "`source(,V)'" ljust} NL
    {source(,v) ; move ; "`source(,v)'" ljust} NL
    {source(,SC) ; move ; "`source(,SC)'" ljust} NL
@@ -51,7 +52,8 @@
    {consource(,V) ; move ;  "`consource(,V)'" ljust} NL(0.32)
    {consource(,v) ; move ;  "`consource(,v)'" ljust} NL(0.3)
    {battery       ; move ;  "`battery'" ljust}       NL(0.3)
-   {battery(,3,R) ; move ;  "`battery(,3,R)'" ljust}
+   {battery(,3,R) ; move ;  "`battery(,3,R)'" ljust} NL(0.35)
+   {ttmotor(,G)   ; move ;  "`ttmotor(,G)'" ljust}
 
 iflatex(`ifpsfrag(,`latexcommand(})')')
 .PE

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/dpv/SourcesDPV.m4
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/dpv/SourcesDPV.m4	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/dpv/SourcesDPV.m4	2023-09-13 20:35:42 UTC (rev 68264)
@@ -9,6 +9,7 @@
    {source     ; move ; "`source'" ljust} NL
    {source(,I) ; move ; "`source(,I)'" ljust} NL
    {source(,i) ; move ; "`source(,i)'" ljust} NL
+   {source(,i) ; move ; "`source(,ii)'" ljust} NL
    {source(,V) ; move ; "`source(,V)'" ljust} NL
    {source(,v) ; move ; "`source(,v)'" ljust} NL
    {source(,AC); move ; "`source(,AC)'" ljust} NL
@@ -41,8 +42,9 @@
    {consource(,i) ; move ;  "`consource(,i)'" ljust} NL(0.32)
    {consource(,V) ; move ;  "`consource(,V)'" ljust} NL(0.32)
    {consource(,v) ; move ;  "`consource(,v)'" ljust} NL(0.3)
-   {battery       ; move ;  "`battery'" ljust}       NL
-   {battery(,3,R) ; move ;  "`battery(,3,R)'" ljust}
+   {battery       ; move ;  "`battery'" ljust}       NL(0.3)
+   {battery(,3,R) ; move ;  "`battery(,3,R)'" ljust} NL(0.35)
+   {ttmotor(,G)   ; move ;  "`ttmotor(,G)'" ljust}
 
  command "</g>" # end font
 .PE

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/ex05.m4
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/ex05.m4	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/ex05.m4	2023-09-13 20:35:42 UTC (rev 68264)
@@ -5,6 +5,7 @@
 
 Kalman: [
   fillval = 0.8              # environmental variable
+  linethick = 1              # slightly thicker for better screen pdf
 
   dx = boxht/5               # diagram parameters wrt scaled env variables
   circlerad = boxht*3/8
@@ -96,8 +97,10 @@
 
   define(`customarc',
    `pushdef(`dfillcolor',`0.7,0.7,0.7') linethick_(0.4); dnl
-    Darc(`$1',linewid, (`$2')*dtor_, (`$3')*dtor_,
-      thick=linewid/6; wid=linewid*0.3; ht=linewid/6; ends=<->)dnl
+#   Darc(`$1',linewid, (`$2')*dtor_, (`$3')*dtor_,
+#     thick=linewid/6; wid=linewid*0.3; ht=linewid/6; ends=<->)dnl
+    Darc(,centre=`$1';rad=linewid;startdeg= (`$2');enddeg=(`$3');
+      thick=linewid/6; wid=linewid*0.3; ht=linewid/6; ends=<->)
     linethick_(customlinethick); popdef(`dfillcolor')')
 
   customarc((linewid,-linewid/3), 25,155)

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/examples.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/extras/Koch.m4
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/extras/Koch.m4	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/extras/Koch.m4	2023-09-13 20:35:42 UTC (rev 68264)
@@ -25,8 +25,9 @@
   line from X to X
   for i=1 to nsides do {
    a += rot[i]
-   X: X+(Rect_(leng,a))
-   continue to X
+#  X: X+(Rect_(leng,a))
+#  continue to X
+   continue by (Rect_(leng,a))
    }
 
 .PE

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/extras/Makefile
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/extras/Makefile	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/extras/Makefile	2023-09-13 20:35:42 UTC (rev 68264)
@@ -165,7 +165,7 @@
      file=`basename $$fl .m4` ; \
      echo $$file.m4 ; \
      $(M4) pgf.m4 extras.dim $$file.m4 | $(PIC) -g > $$file.tex ; \
-      printf "\n\n|parbox{|textwidth}{\n" | $(BS) >> extras.tex ; \
+      printf "\n\n|noindent|parbox{|textwidth}{\n" | $(BS) >> extras.tex ; \
       printf "|input{$$file.tex}\n" | $(BS) >> extras.tex ; \
       printf "\n $$file.m4\n}\n|vspace{|baselineskip}" \
        | sed -e 's/_/|_/g' | $(BS) >> extras.tex ; \
@@ -208,4 +208,4 @@
 	dvips $(DVIPSOPTS) tst -o tst.ps
 
 clean:
-	rm -f *.ps *.pdf *.tex *.dim *.pic *.log *.dms *.aux
+	rm -f *.ps *.pdf *.tex *.dim *.pic *.log *.dms *.aux *.svg

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/extras/README_extras
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/extras/README_extras	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/extras/README_extras	2023-09-13 20:35:42 UTC (rev 68264)
@@ -1,11 +1,11 @@
 
-THIS DIRECTORY contains a Makefile and m4 sources for diagrams not
-included in the examples files.  Many of these correspond to questions
-asked on stackexchange, of the form "How do I draw ... with tikz?"
-Producing drawings like these can be satisfying, as shown by the alacrity
-with which knowledgable people assist when questions are asked.  Often,
-the question has more to do with geometry than drawing language, and
-the examples here using m4 with dpic merely confirm that the coding can
+THIS DIRECTORY contains a Makefile and m4 sources for some diagrams
+not included in the main examples files.  Many of these correspond to
+questions asked on stackexchange, of the form "How do I draw ... with
+tikz?"  Producing drawings like these can be satisfying, as shown by the
+alacrity with which knowledgable people assist when questions are asked.
+The questions often have more to do with geometry than drawing language,
+and the examples here using m4 with dpic confirm that the coding can
 often be done reasonably in several possible languages.
 
 This directory is assumed to be a subdirectory of the examples directory

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/extras/TR_fill.m4
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/extras/TR_fill.m4	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/extras/TR_fill.m4	2023-09-13 20:35:42 UTC (rev 68264)
@@ -1,8 +1,8 @@
 .PS
+gen_init
+[
 # TR_fill.m4
 # https://tex.stackexchange.com/questions/654117/fill-parts-of-a-shape
-gen_init
-
   B: (0,0); "B" at B below
   C: (5,0); "C" at C below
   A: Cintersect(B,4,C,3); "A" at A above
@@ -13,5 +13,42 @@
     arc from A to B rad 2
     arc cw to C rad 2.5
     arc to A rad 1.5 )
+  ]
+[
+# Fillbetween
+# https://tex.stackexchange.com/questions/688273/polar-curve-shading-error-with-fillbetween
+NeedDpicTools
+  
+  sc = 0.5
+  define coord {(($1,$2)*sc)}
+  define X1 {coord(Rect_(6*sind($1),$1))}
+  define X2 {coord(Rect_(2+2*sind($1),$1))}
+  define interp {$1+($2-($1))*($3)}
+  define axes {
+    arrow from coord(-6,0) to coord(6,0)
+      "$x$" rjust above
+      for x=-5 to 5 do {line up_ 0.1 at coord(x,0)}
+      "${-}5$" at coord(-5,-0.05/sc) below
+      "${}5$" at coord(5,-0.05/sc) below
+    arrow from coord(0,-2) to coord(0,7)
+      "$y$" at Here+(8bp__,-10bp__)
+      for y=-1 to 5 do {line right 0.1 at coord(0,y)}
+      "${}5$" at coord(-0.05/sc,5) rjust
+    }
 
+  n = 36
+  for i=0 to n do { t = interp(30,150,i/n); C3[i]: X1(t) }
+  for i=0 to n do { t = interp(150,150-360,i/n); C4[i]: X2(t) }
+  for i=0 to n do { t = interp(150,210,i/n); C5[i]: X1(t) }
+  rgbfill(0.9,0.9,0.9,
+    fitcurve(C3,n)
+    fitcurve(C4,n)
+    fitcurve(C5,n) )
+  fitcurve(C3,n,outlined "orange" )
+  fitcurve(C4,n,outlined "red" )
+  fitcurve(C5,n,outlined "orange" )
+
+  axes
+  ] with .nw at last [].sw+(0,-0.2)
+
 .PE

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/extras/Views.m4
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/extras/Views.m4	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/extras/Views.m4	2023-09-13 20:35:42 UTC (rev 68264)
@@ -43,9 +43,9 @@
  define vec4  { $4[1] = $1; $4[2] = $2; $4[3] = $3; $4[4] = 1 }
 #        copy4( vector, vector )
  define copy4 { $2[1] = $1[1]; $2[2] = $1[2]; $2[3] = $1[3]; $2[4] = $1[4] }
-#        pr4( vector, label )
+#        pr4( vector, label ) # projected vector (see pr below)
  define pr4 { if $1[4]==0 then { print "Divide by zero" } \
-               else { $2: pr($1[1]/$1[4],$1[2]/$1[4],$1[3]/$1[4]) }}
+              else { $2: pr($1[1]/$1[4],$1[2]/$1[4],$1[3]/$1[4]) }}
 
  define print4 { print sprintf("%g,%g,%g,%g",$1[1],$1[2],$1[3],$1[4]) }
 '

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/mf/cct.mf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/mf/cct.mf	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/examples/mf/cct.mf	2023-09-13 20:35:42 UTC (rev 68264)
@@ -1,5 +1,5 @@
 % cct.mf, generated by Mfpic, v1.10 2012/12/03,
-% from TeX source "font" on 2023/05/31 at 20:45
+% from TeX source "font" on 2023/09/11 at 22:43
 numeric mfpicversion; mfpicversion := 110;
 if unknown mode: mode := localfont; fi
 if unknown mag: mag := 1000/1000; fi

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/gpic.m4
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/gpic.m4	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/gpic.m4	2023-09-13 20:35:42 UTC (rev 68264)
@@ -1,7 +1,7 @@
 divert(-1)
   gpic.m4                       Initialization for gpic.
 
-* Circuit_macros Version 10.3, copyright (c) 2023 J. D. Aplevich under     *
+* Circuit_macros Version 10.4, copyright (c) 2023 J. D. Aplevich under     *
 * the LaTeX Project Public Licence in file Licence.txt. The files of       *
 * this distribution may be redistributed or modified provided that this    *
 * copyright notice is included and provided that modifications are clearly *

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/lib3D.m4
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/lib3D.m4	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/lib3D.m4	2023-09-13 20:35:42 UTC (rev 68264)
@@ -3,7 +3,7 @@
                                 operations on argument triples representing
                                 3D vectors or colors.
 
-* Circuit_macros Version 10.3, copyright (c) 2023 J. D. Aplevich under     *
+* Circuit_macros Version 10.4, copyright (c) 2023 J. D. Aplevich under     *
 * the LaTeX Project Public Licence in file Licence.txt. The files of       *
 * this distribution may be redistributed or modified provided that this    *
 * copyright notice is included and provided that modifications are clearly *

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/libSLD.m4
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/libSLD.m4	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/libSLD.m4	2023-09-13 20:35:42 UTC (rev 68264)
@@ -2,7 +2,7 @@
  
   libSLD.m4                    Draft macros for single-line diagram elements
 
-* Circuit_macros Version 10.3, copyright (c) 2023 J. D. Aplevich under     *
+* Circuit_macros Version 10.4, copyright (c) 2023 J. D. Aplevich under     *
 * the LaTeX Project Public Licence in file Licence.txt. The files of       *
 * this distribution may be redistributed or modified provided that this    *
 * copyright notice is included and provided that modifications are clearly *

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/libcct.m4
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/libcct.m4	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/libcct.m4	2023-09-13 20:35:42 UTC (rev 68264)
@@ -1,7 +1,7 @@
 divert(-1)
   libcct.m4
 
-* Circuit_macros Version 10.3, copyright (c) 2023 J. D. Aplevich under     *
+* Circuit_macros Version 10.4, copyright (c) 2023 J. D. Aplevich under     *
 * the LaTeX Project Public Licence in file Licence.txt. The files of       *
 * this distribution may be redistributed or modified provided that this    *
 * copyright notice is included and provided that modifications are clearly *
@@ -617,10 +617,11 @@
  line to rvec_(rp_len,0) invis ')
 
                   `source( linespec,
-                     V|v|I|i|AC|B|F|G|H|Q|L|N|P|R|S[C[r]|E[r]]]|T|X|U|other,
+                     V|v|I|i|ii|AC|B|F|G|H|Q|L|N|P|R|S[C[r]|E[r]]]|T|X|U|other,
                      diameter, R, attributes,body name)
                      V = voltage source; v = alternate voltage source;
                      I = current source; i = alternate current source;
+                     ii = double arrowhead 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
@@ -651,6 +652,14 @@
           to rvec_(m4h/2,0)}',
   `$2',I,`{arrow from rvec_(-m4h*3/4,0) \
           to rvec_(m4h*3/4,0)}',
+  `$2',ii,`{line from rvec_(-m4h,0) \
+          to rvec_(m4h,0)}
+          {line thick 1.2*linethick from rvec_(m4h/12,-m4h*0.45) \
+          to rvec_(m4h*5/6,0) \
+          then to rvec_(m4h/12,m4h*0.45)}
+          {line thick 1.2*linethick from rvec_(-m4h*3/4,-m4h*0.45) \
+          to Here \
+          then to rvec_(-m4h*3/4,m4h*0.45)}',
   `$2',i,`{line from rvec_(0,-m4h) \
           to rvec_(0,m4h)}',
   `$2',B,`{line from rvec_(-m4h,0) \

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/libgen.m4
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/libgen.m4	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/libgen.m4	2023-09-13 20:35:42 UTC (rev 68264)
@@ -2,7 +2,7 @@
  
    libgen.m4                    Base macros for dpic and gpic diagrams
 
-* Circuit_macros Version 10.3, copyright (c) 2023 J. D. Aplevich under     *
+* Circuit_macros Version 10.4, copyright (c) 2023 J. D. Aplevich under     *
 * the LaTeX Project Public Licence in file Licence.txt. The files of       *
 * this distribution may be redistributed or modified provided that this    *
 * copyright notice is included and provided that modifications are clearly *
@@ -199,7 +199,7 @@
    `$2')')
 
 define(`m4announceprocessor',`dnl Do not change the format of the next line:
-`#' `$1' Version 10.3: ifelse(m4picprocessor,gpic,`Gpic',
+`#' `$1' Version 10.4: ifelse(m4picprocessor,gpic,`Gpic',
   m4postprocessor,pstricks,`PSTricks',
   m4postprocessor,pgf,`TikZ PGF',
   m4postprocessor,mfpic,`Mfpic',
@@ -334,7 +334,7 @@
 define(`drawdir_',`define(`m4sectang',`ifelse(`$2',,90,(`$2'))')dnl
   (int(pmod(`$1'+m4sectang/2,360)/m4sectang)*m4sectang)')
 
-                               `arcr( position, radius,
+                               `arcr( centre, radius,
                                       start radians, end radians,
                                       modifiers, ht)
                                 Unique ccw arc. If arg 5 contains -> or <-
@@ -362,7 +362,7 @@
   arc patsubst(patsubst(`$5',->,),<-,) \
     from M4aStart to M4aEnd rad m4arad with .c at M4aCtr ')
 
-                               `arcd( position, radius,
+                               `arcd( centre, radius,
                                       start degrees, end degrees,
                                       attributes, ht)
                                 Like arcr but with angles in degrees:
@@ -518,8 +518,6 @@
     ifelse(`$5',G,,
      `if m4ti < dashline_n then {')move to rvec_(m4gap,0)ifelse(`$5',G,,})
     } ')
-
-                               `round(at location,line thickness,attributes)
                                 filled circle for rounded corners'
 define(`round',`{ circle thick ifelse(`$2',,`linethick/2',(`$2')/2) \
   diameter ifelse(`$2',,`linethick',`($2)')/2 pt__ \
@@ -1443,32 +1441,73 @@
                                             D[iamond]
                                             C[rowfoot]
                                             P[lain]
+                                            R[ight]
+                                            L[eft]
                                        wdth=expr (default arrowwid)
                                        lgth=expr (default arrowht)
                                        shaft= attributes (dashed etc)
-                                       head= attributes (shaded etc)'
-define(`sarrow',`arrow invis `$1' ; M4_E: Here
-  pushkeys_(`$2',type:O:N;head::N;shaft::N;wdth:arrowwid;lgth:arrowht)
-  line from last arrow.start to last arrow.end chop 0 chop m4lgth m4shaft
-  M4_X: Here; M4_P: Vperp(M4_E,M4_X,m4wdth/2)
+                                       head= attributes (shaded etc)
+                                       name=Name (default Sarrow_)'
+define(`sarrow',
+ `pushkeys_(`$2',
+   type:O:N;head::N;shaft:m4head:N;wdth:arrowwid;lgth:arrowht;name:Sarrow_:N)dnl
+  arrow `$1' m4head invis
+  m4_dx = last arrow.end.x-last arrow.start.x
+  m4_dy = last arrow.end.y-last arrow.start.y
+  m4_t = last arrow.thick bp__
+m4name: [
+  ifelse(ifelse(m4type,L,L,m4type,R,R),,,`poppushdef(`m4wdth',(m4wdth*2))')
+  Point: Here; Shaft: Point-(m4_dx,m4_dy)
+  C: (Shaft-Point)/distance(Shaft,Point)
+  X: m4affine(m4lgth,0,Point,C)
+  if m4wdth == 0.0 then { po = 0.0 } \
+  else { po = min((m4_t/m4wdth)*sqrt((m4lgth)^2+(m4wdth)^2/4),m4lgth) }
+  P: m4affine(po,0,Point,C)
+  h = m4lgth-m4_t/2;
+  x = h - po;
+  if m4lgth == 0.0 then { v = 0.0 } else { v = ((m4wdth/2)/m4lgth)*x }
+  R: m4affine(h, v,Point,C);
+  L: m4affine(h,-v,Point,C);
+  if x == 0.0 then { t = 1 } else { t = m4lgth/x }
+  if m4lgth==0 then { y = 0 } else { y = m4lgth-po+m4_t*m4wdth/m4lgth/4 }
+  Ly: (P*(x-y)+L*y)/x
+  Ry: (P*(x-y)+R*y)/x
   ifinstr(m4type,O,
-   `line from M4_E to M4_X+(M4_P.x,M4_P.y) then to M4_X-(M4_P.x,M4_P.y) \
-      then to M4_E ifelse(m4head,,fill_(1),m4head)',
+   `line from Shaft to (L+R)/2 m4shaft
+    line to L then to P then to R then to Here m4head',
   m4type,D,
-   `line from M4_X      to (0.5 between M4_E and M4_X)+(M4_P.x,M4_P.y) \
-      then to M4_E then to (0.5 between M4_E and M4_X)-(M4_P.x,M4_P.y) \
-      then to M4_X ifelse(m4head,,fill_(1),m4head)',
+   `poppushdef(`m4lgth',(m4lgth+m4_t))dnl
+    s = sqrt(m4lgth^2+m4wdth^2)/2
+    if m4wdth==0 then { pd = 0 } else { pd = m4_t*s/m4wdth }
+    PD: m4affine(pd,0,Point,C)
+    line from Shaft to X m4shaft
+    if m4lgth==0 then { pb = 0 } else { pb = m4_t*s/m4lgth }
+    PL: m4affine(m4lgth/2, m4wdth/2-pb,Point,C)
+    PR: m4affine(m4lgth/2,-m4wdth/2+pb,Point,C)
+    line to PL then to PD then to PR then to X \
+      ifelse(m4head,,fill_(1),m4head)',
   m4type,P,
-   `line to M4_E m4head
-    line from M4_X+(M4_P.x,M4_P.y) to M4_E then to M4_X-(M4_P.x,M4_P.y) m4head',
+   `line from Shaft to P m4shaft
+    line from Ly to P then to Ry m4head',
   m4type,C,
-   `line to M4_E m4head
-    ifdpic(`spline 0.4 from M4_E+M4_P to M4_X+M4_P then to M4_X-M4_P \
-        then to M4_E-M4_P',
-     `spline from M4_E+(M4_P.x,M4_P.y) to M4_X+(M4_P.x,M4_P.y) \
-       then to M4_X-(M4_P.x,M4_P.y) then to M4_E-(M4_P.x,M4_P.y)') m4head')
-  popdef(`m4type',`m4head',`m4shaft',`m4wdth',`m4lgth')dnl
-  move to M4_E')
+   `line from Shaft to Point m4head
+    Q: (-C.y,C.x)*((m4wdth-m4_t)/2)
+    Y: m4affine(m4lgth-m4_t/2,0,Point,C)
+    ifdpic(`spline 0.4 from Point+Q to Y+Q then to Y-Q then to Point-Q',
+     `spline from Point+(Q.x,Q.y) to Y+(Q.x,Q.y) \
+       then to Y-(Q.x,Q.y) then to Point-(Q.x,Q.y)') m4head',
+  m4type,R,
+   `line from Shaft to P m4shaft
+    circle diam m4_t/2 at Here m4shaft thick last line.thick/2
+    line from 1bp__/distance(Ly,P) between P and Ly to P then to Ry m4shaft',
+  m4type,L,
+   `line from Shaft to P m4shaft
+    circle diam m4_t/2 at Here m4shaft thick last line.thick/2
+    line from 1bp__/distance(Ry,P) between P and Ry to P then to Ly m4shaft')
+  popdef(`m4type',`m4head',`m4shaft',`m4wdth',`m4lgth',`m4name')dnl
+  ] with .Point at Here')
+define(`m4affine',
+ ``$3' + (`$4'.x*(`$1')-`$4'.y*(`$2'),`$4'.y*(`$1')+`$4'.x*(`$2'))')
 
                                 `open_arrow(linespec, ht, wid, head attribs)
                                  arrow with outlined head, like sarrow(,type=O)'
@@ -1828,7 +1867,7 @@
                                  `outlined string' or `shaded string'
                                  (mpost,PSTricks,pdf,tikz-pgf,postscript,svg
                                   only)
-                                 The 1: after rgb is a divisor for the values
+                                 The "1:" after rgb is a divisor for the values
                                  (xcolor manual p 16)'
 ifelse(
 m4postprocessor,pstricks,`define(`rgbstring',`ifelse(`$2',,`"$1"',

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/liblog.m4
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/liblog.m4	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/liblog.m4	2023-09-13 20:35:42 UTC (rev 68264)
@@ -1,7 +1,7 @@
 divert(-1)
    liblog.m4                    Logic gates
 
-* Circuit_macros Version 10.3, copyright (c) 2023 J. D. Aplevich under     *
+* Circuit_macros Version 10.4, copyright (c) 2023 J. D. Aplevich under     *
 * the LaTeX Project Public Licence in file Licence.txt. The files of       *
 * this distribution may be redistributed or modified provided that this    *
 * copyright notice is included and provided that modifications are clearly *

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/mfpic.m4
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/mfpic.m4	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/mfpic.m4	2023-09-13 20:35:42 UTC (rev 68264)
@@ -1,7 +1,7 @@
 divert(-1)
    mfpic.m4                     Initialization for mfpic.
 
-* Circuit_macros Version 10.3, copyright (c) 2023 J. D. Aplevich under     *
+* Circuit_macros Version 10.4, copyright (c) 2023 J. D. Aplevich under     *
 * the LaTeX Project Public Licence in file Licence.txt. The files of       *
 * this distribution may be redistributed or modified provided that this    *
 * copyright notice is included and provided that modifications are clearly *

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/mpost.m4
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/mpost.m4	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/mpost.m4	2023-09-13 20:35:42 UTC (rev 68264)
@@ -1,7 +1,7 @@
 divert(-1)
    mpost.m4                     Initialization for metapost.
 
-* Circuit_macros Version 10.3, copyright (c) 2023 J. D. Aplevich under     *
+* Circuit_macros Version 10.4, copyright (c) 2023 J. D. Aplevich under     *
 * the LaTeX Project Public Licence in file Licence.txt. The files of       *
 * this distribution may be redistributed or modified provided that this    *
 * copyright notice is included and provided that modifications are clearly *

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/pdf.m4
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/pdf.m4	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/pdf.m4	2023-09-13 20:35:42 UTC (rev 68264)
@@ -1,7 +1,7 @@
 divert(-1)
    pdf.m4                                    Initialization for pdf output.
 
-* Circuit_macros Version 10.3, copyright (c) 2023 J. D. Aplevich under     *
+* Circuit_macros Version 10.4, copyright (c) 2023 J. D. Aplevich under     *
 * the LaTeX Project Public Licence in file Licence.txt. The files of       *
 * this distribution may be redistributed or modified provided that this    *
 * copyright notice is included and provided that modifications are clearly *

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/pgf.m4
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/pgf.m4	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/pgf.m4	2023-09-13 20:35:42 UTC (rev 68264)
@@ -1,7 +1,7 @@
 divert(-1)
    pgf.m4                  Initialization for Tikz-pgf.
 
-* Circuit_macros Version 10.3, copyright (c) 2023 J. D. Aplevich under     *
+* Circuit_macros Version 10.4, copyright (c) 2023 J. D. Aplevich under     *
 * the LaTeX Project Public Licence in file Licence.txt. The files of       *
 * this distribution may be redistributed or modified provided that this    *
 * copyright notice is included and provided that modifications are clearly *

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/postscript.m4
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/postscript.m4	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/postscript.m4	2023-09-13 20:35:42 UTC (rev 68264)
@@ -1,7 +1,7 @@
 divert(-1)
    postscript.m4                  Initialization for Postscript output.
 
-* Circuit_macros Version 10.3, copyright (c) 2023 J. D. Aplevich under     *
+* Circuit_macros Version 10.4, copyright (c) 2023 J. D. Aplevich under     *
 * the LaTeX Project Public Licence in file Licence.txt. The files of       *
 * this distribution may be redistributed or modified provided that this    *
 * copyright notice is included and provided that modifications are clearly *

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/psfrag.m4
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/psfrag.m4	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/psfrag.m4	2023-09-13 20:35:42 UTC (rev 68264)
@@ -2,7 +2,7 @@
   psfrag.m4                  Initialization for dpic -f processing:
                              Postscript with psfrag strings
 
-* Circuit_macros Version 10.3, copyright (c) 2023 J. D. Aplevich under     *
+* Circuit_macros Version 10.4, copyright (c) 2023 J. D. Aplevich under     *
 * the LaTeX Project Public Licence in file Licence.txt. The files of       *
 * this distribution may be redistributed or modified provided that this    *
 * copyright notice is included and provided that modifications are clearly *

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/pstricks.m4
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/pstricks.m4	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/pstricks.m4	2023-09-13 20:35:42 UTC (rev 68264)
@@ -1,7 +1,7 @@
 divert(-1)
    pstricks.m4                  Initialization for PSTricks.
 
-* Circuit_macros Version 10.3, copyright (c) 2023 J. D. Aplevich under     *
+* Circuit_macros Version 10.4, copyright (c) 2023 J. D. Aplevich under     *
 * the LaTeX Project Public Licence in file Licence.txt. The files of       *
 * this distribution may be redistributed or modified provided that this    *
 * copyright notice is included and provided that modifications are clearly *

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/svg.m4
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/svg.m4	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/svg.m4	2023-09-13 20:35:42 UTC (rev 68264)
@@ -1,7 +1,7 @@
 divert(-1)
    svg.m4                       Initialization for svg output.
 
-* Circuit_macros Version 10.3, copyright (c) 2023 J. D. Aplevich under     *
+* Circuit_macros Version 10.4, copyright (c) 2023 J. D. Aplevich under     *
 * the LaTeX Project Public Licence in file Licence.txt. The files of       *
 * this distribution may be redistributed or modified provided that this    *
 * copyright notice is included and provided that modifications are clearly *

Modified: trunk/Master/texmf-dist/doc/latex/circuit-macros/xfig.m4
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuit-macros/xfig.m4	2023-09-13 20:34:37 UTC (rev 68263)
+++ trunk/Master/texmf-dist/doc/latex/circuit-macros/xfig.m4	2023-09-13 20:35:42 UTC (rev 68264)
@@ -1,7 +1,7 @@
 divert(-1)
    xfig.m4                      Initialization for xfig.
 
-* Circuit_macros Version 10.3, copyright (c) 2023 J. D. Aplevich under     *
+* Circuit_macros Version 10.4, copyright (c) 2023 J. D. Aplevich under     *
 * the LaTeX Project Public Licence in file Licence.txt. The files of       *
 * this distribution may be redistributed or modified provided that this    *
 * copyright notice is included and provided that modifications are clearly *



More information about the tex-live-commits mailing list.