summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/circuit-macros/examples/keyval.m4
blob: dc81fd123f018932898a5fd2e2b1fcd6888f66fc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
.PS
# keyval.m4
cct_init

#An experiment in defining macro options as key1=val1;key2=val2; ...
#                                `resistor( linespec,
#                                           cycles=n;type=E|Q|H;side=L|R)
#                                 chars : E=ebox
#                                         Q=offset
#                                         H=squared (default 3 cycles)
#                                         R=to right of drawing direction'
define(`xesistor',
`print "`$0'($@)" ;
  setkey_(`$2',cycles,4,N)dnl
  setkey_(`$2',type,N,N)dnl
  setkey_(`$2',side,R,N)dnl
  print "cycles:m4cycles"
  print "type:m4type"
  print "side:m4side"
ifelse(
 m4type,E,
   `ebox(`$1',shift(shift(shift($@))))',
 `eleminit_(`$1')
  ifelse(m4type,N,
   `define(`m4n',`eval((m4cycles)*2)')dnl
    define(`m4h',`dimen_/24')dnl
    define(`m4v',2)dnl
    if m4h*m4n*2 > rp_len then { eleminit_(to rvec_(m4h*m4n*2,0)) }
    tr_xy_init(last line.c, m4h, ifelse(m4side,R,-))dnl
    { line from last line.start to tr_xy(-m4n,0)\
      for_(2,m4n,2,
        `then to tr_xy(eval(2*m4x-3-m4n), m4v) \
         then to tr_xy(eval(2*m4x-1-m4n),-m4v) \')dnl
      then to tr_xy(m4n, 0) then to last line.end
      [box invis ht_ m4h*m4v*2 wid_ m4h*m4n*2] at 2nd last line.c
      }',
  m4type,Q,
   `define(`m4n',`eval(2*(m4cycles))')dnl
    define(`m4h',`dimen_/24')dnl
    define(`m4v',2)dnl
    if m4h*m4n*2 > rp_len then { eleminit_(to rvec_(m4h*m4n*2,0)) }
    tr_xy_init(last line.c, m4h, ifelse(m4side,R,-))dnl
    { line from last line.start to tr_xy(-m4n,0)\
      for_(2,m4n,2,
       `then to tr_xy(eval(2*m4x-2-m4n), m4v*2) \
        then to tr_xy(eval(2*m4x-m4n),0) \')dnl
      then to tr_xy(m4n, 0) then to last line.end
      [box invis ht_ m4h*m4v*2 wid_ m4h*m4n*2] at 2nd last line.c + ta_xy(0,m4v)
      }',
  m4type,H,
   `define(`m4n',`ifelse(`$2',,5,`eval(2*$2-1)')')dnl
    define(`m4h',`dimen_/20')dnl
    define(`m4v',7/3)dnl
    if m4h*m4n*2 > rp_len then { eleminit_(to rvec_(m4h*m4n*2,0)) }
    tr_xy_init(last line.c, m4h, ifelse(m4side,R,-))dnl
    { line from last line.start to tr_xy(-m4n,0)\
      for_(-m4n,m4n,2,
       `ifelse(eval(((m4x+m4n)/2)%2),0,
         `then to tr_xy(m4x,m4v) then to tr_xy(eval(m4x+2),m4v) \',
         `then to tr_xy(m4x,0) \
          ifelse(m4x,m4n,,`then to tr_xy(eval(m4x+2),0)')\')')dnl
      then to tr_xy(m4n, 0) then to last line.end
      [box invis ht_ m4h*m4v wid_ m4h*m4n*2] at 2nd last line.c+(0,m4h*m4v/2)
      }')
  line invis from 2nd last line.start to 2nd last line.end ')

  popdef(`m4cycles')dnl
  popdef(`m4type')dnl
  popdef(`m4side')dnl
')

  xesistor(,type=E;cycles=5;)
  xesistor(,type=Q;cycles=3;side=L)
.PE