PS
# `thyristor.m4'
cct_init

define labels { {
  "\sl $1"  ht 11 pt__ $2 at last[].$1
  "\sl $3" $4 at last[].$3
  "\sl $5" $6 at last[].$5
  "\tt $7" ht 11 pt__  $9 at (last[].s+(0,$8)) } }

down_
Row1: [
 {thyristor
  labels(A,above,K,below,G,ljust,`thyristor',-0.25,wid 0.75) }

 move right 0.50 ; down_
 {thyristor(,B)
  labels(T1,above,T2,below,G,below ljust,`...(,B)',-0.35) }

 move right 0.50 ; down_
 {thyristor(down_ dimen_*0.8,BRK)
  labels(T1,above,T2,below,G,below rjust,`...(,BRK)',-0.22) }

 move right 0.60 ; down_
 {thyristor(,BE)
  labels(T1,above,T2,below,G,below ljust,`...(,BE)',-0.35) }

 move right 0.50 ; down_
 {thyristor(,A) at (Here,last [])
  labels(A,above,K,below,G,ljust,`...(,A)',-0.35) }

 move right 0.50 ; down_
 {thyristor(,F) at (Here,last [])
  labels(A,above,K,below,G,ljust,`...(,F)',-0.22) }

 move right 0.65 ; down_
 {thyristor(,BRE)
  labels(T1,above,T2,below,G,below rjust,`...(,BRE)',-0.35) }

 move right 0.75 ; down_
 {thyristor(,UARE) at (Here,last [])
  labels(A,above,K,below,G,rjust below,`...(,UARE)',-0.22) }

 move right 0.50 ; down_
 {thyristor(,AV,G: G+(0.1,0.1)) at (Here,last [])
  thinlines_
  spline -> from last[].G left 0.05 then left 0.05 down 0.1
  thicklines_
  labels(A,above,K,below,G,ljust,`...(,AV)',-0.35) }

 move right 0.50 ; down_
 {thyristor(,IEC)
  labels(A,above ljust,K,below ljust,G,ljust,`...(,IEC)',-0.22) }
 ]
Row2: [
 down_
 {thyristor(,UAH)
  labels(A,rjust above,K,rjust below,G,ljust,`...(,UAH)',-0.35,wid 0.65) }

 move right 0.55 ; down_
 {thyristor(,N) at (Here,last [])
  labels(A,above,K,below,Ga,rjust,`...(,N)',-0.22) }

 move right 0.55 ; down_
 {thyristor(,UANRE) at (Here,last [])
  labels(A,above,K,below,Ga,ljust above,`...(,UANRE)',-0.35) }
 move right 0.55 ; down_
 {thyristor(,SCR) at (Here,last [])
  labels(A,above,K,below rjust,G,below ljust,`...(,SCR)',-0.22) }

 move right 0.55 ; down_
 {thyristor(,SCRE) at (Here,last [])
  labels(A,above,K,below,G,ljust below,`...(SCRE)',-0.35) }

 move right 0.65 ; down_
 {thyristor(,SCRRE) at (Here,last [])
  labels(A,above,K,below,G,rjust below,`...(SCRRE)',-0.22) }

 move right 0.55 ; down_
 {thyristor(,SCS) at (Here,last [])
  labels(A,above,K,below,G,ljust,`...(SCS)',-0.35) }
 { "\sl Ga" rjust above at last[].Ga }

 move right 0.55 ; down_
 {thyristor(,SCSE) at (Here,last [])
  labels(A,above,K,below,G,ljust below,`...(SCSE)',-0.22) }
 { "\sl Ga" rjust above at last[].Ga }

 move right 0.65 ; down_
 {thyristor(,SUSE) at (Here,last [])
  labels(A,above,K,below,G,rjust,`...(SUSE)',-0.35) }

 move right 0.65 ; down_
 {thyristor(,SBSE) at (Here,last [])
  labels(T1,above,T2,below,G,rjust,`...(SBSE)',-0.22) }

 ] with .nw at Row1.sw + (0,-0.20)

Twoterms: [ right_
 { scr(,,Q) ; `"\tt scr(,{,}Q)"' at last [].e ljust}
 { "\sl Q.G" at Q.G above }

 move down 0.4; right_
 { scs(,,Q2) ; `"\tt scs(,{,}Q2)"' at last [].e ljust }
 { "\sl Q2.G" at Q2.G above }
 { "\sl Q2.Ga" at Q2.Ga below }
 ] with .nw at Row2.sw+(0,-0.2)

 [ right_
 { sus(,RE,Q3) ; `"\tt sus(,RE,Q3)"' at last [].e ljust}
 { "\sl Q3.G" at Q3.G above }

 move right_ 1.2 from last line.end
 { sbs(,E,Q4) ; `"\tt sbs(,E,Q4)"' at last [].e ljust}
 { "\sl Q4.G" at Q4.G below }
 ] with .w at last [].e+(1.0,0)

PE