summaryrefslogtreecommitdiff
path: root/info/examples/lgc2/circuit/darrow.m4
blob: acb4185327649292935ffa0832287f3be67704da (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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
divert(-1)
  darrow.m4                     Macros for double lines and arrows

* Circuit_macros Version 5.86, copyright (c) 2006 J. D. Aplevich, under    *
* the LaTeX Project Public License. The files of this distribution may be *
* redistributed or modified, provided that this copyright notice is       *
* included, and provided that modifications are clearly marked to         *
* distinguish them from this distribution.  There is no warranty          *
* whatsoever for these files.                                             *

                                Installation directory.  You can set HOMELIB_
                                to the null string if you use an environment
                                variable to tell m4 where to search:
ifdef(`HOMELIB_',,
 `define(`HOMELIB_',`./circuit/')')
#`define(`HOMELIB_',`C:\Dwight\lib\')')

                                Default pic processor: gpic.  To make dpic -p
                                the default, change gpic to pstricks here:
ifdef(`m4picprocessor',,`include(HOMELIB_`'gpic.m4)divert(-1)')

ifdef(`elen_',,`define(`elen_',linewid*3/2)')

               `dline(linespec,start truncation,end truncation,width,
                  |-| or -| or |- )'
define(`dline',`m4dl_init(`$1',`$2',`$3',`$4')
  define(`m4lj',`ifelse(`$5',,0,`$5',`-|',0,`linethick bp__/2')')dnl
  define(`m4rj',`ifelse(`$5',,0,`$5',`|-',0,`linethick bp__/2')')dnl
  ifelse(m4postprocessor,pstricks,
   `command "\pscustom[linestyle=none,fillcolor=white,fillstyle=solid]{"
    {line from rvec_(m4lj, m4dlw/2) to rvec_(m4dll-m4rj, m4dlw/2)}
    {line from rvec_(m4dll-m4rj,-m4dlw/2) to rvec_(m4lj,-m4dlw/2)}
    command "}%"',
  m4postprocessor,postscript,
   `{line thick m4dlw/(1bp__) color "1 1 1" \
       from rvec_(m4lj,0) to rvec_(m4dll-m4rj,0)}',
  m4postprocessor,gpic,, # No white fill for gpic
   `m4_tmpthick = linethick; linethick=0
    shade(1,{line from rvec_(m4lj, m4dlw/2) to rvec_(m4dll-m4rj, m4dlw/2)}
            {line from rvec_(m4dll-m4rj,-m4dlw/2) to rvec_(m4lj,-m4dlw/2)})
    linethick = m4_tmpthick')
  ifelse(m4lj,0,,`{line from rvec_(0,-m4dlw/2) to rvec_(0,m4dlw/2)}')
  {line from rvec_(    0, m4dlw/2) to rvec_(m4dll, m4dlw/2)}
  ifelse(m4rj,0,,`{line from rvec_(m4dll,m4dlw/2) to rvec_(m4dll,-m4dlw/2)}')
  {line from rvec_(m4dll,-m4dlw/2) to rvec_(    0,-m4dlw/2)}
   line invis to rvec_(m4dll,0)')

                                Turn left, leaving current location at exit
                                of corner 
define(`dleft',`dnl
  {line from rvec_(0,-dlinewid/2) to rvec_(dlinewid,-dlinewid/2) \
   then to rvec_(dlinewid,dlinewid/2)}
   line invis to rvec_(dlinewid/2,dlinewid/2)
   define(`dir_',up__) manhattan dir_')

                                Turn right, leaving current location at exit
                                of corner
define(`dright',`dnl
  {line from rvec_(0, dlinewid/2) to rvec_(dlinewid, dlinewid/2) \
   then to rvec_(dlinewid,-dlinewid/2)}
   line invis to rvec_(dlinewid/2,-dlinewid/2)
   define(`dir_',dn_) manhattan dir_')

                `darrow(linespec,start truncation,end truncation,width,
                   arrow wid, arrow ht,<- or <-| or |)'
define(`darrow',`m4dl_init(`$1',`$2',`$3',`$4');{
  ifelse(substr(`$7',0,2),<-,
   `move to rvec_(m4dll,0); rp_ang = rp_ang+twopi_/2 dnl
    define(`m4m',`substr(`$7',2)')',`define(`m4m',`$7')')
  ifelse(m4m,|,,
  `{ line from rvec_(0,m4dlw/2) to rvec_(linethick bp__/2,m4dlw/2) }
   { line from rvec_(0,-m4dlw/2) to rvec_(linethick bp__/2,-m4dlw/2) }')
  define(`m4h',`ifelse(`$5',,m4dlw,(`$5')/2)')dnl
  define(`m4v',`ifelse(`$6',,m4dlw*3/2,(`$6'))')dnl
  ifelse(m4postprocessor,pstricks,
   `command "\pscustom[linestyle=solid,fillcolor=white,fillstyle=solid]{"',
  m4postprocessor,gpic,,
   `shade(1,')
  {line from rvec_(linethick bp__/2,m4dlw/2) to rvec_(m4dll-m4v,m4dlw/2) \
    then to rvec_(m4dll-m4v,m4h) then to rvec_(m4dll,0) \
    then to rvec_(m4dll-m4v,-m4h) then to rvec_(m4dll-m4v,-m4dlw/2)\
    then to rvec_(linethick bp__/2,-m4dlw/2) ifelse(m4m,|,
     `then to rvec_(0,-m4dlw/2) then to rvec_(0,m4dlw/2) \
      then to rvec_(linethick bp__/2,m4dlw/2)')}
  ifelse(m4postprocessor,pstricks,`command "}%"',m4postprocessor,gpic,,`)')
  ifelse(substr(`$7',0,2),<-,`move to rvec_(m4dll,0); rp_ang=rp_ang+twopi_/2')
    }; line invis to rvec_(m4dll,0)')

                          `dtee([L|R]) Construct tee with tail right, left,
                           or back along current direction, leaving current
                           location at tee centre; eg
                           dline(right_,,t); dtee(R);
                           { darrow(down_,t) }; darrow(right_,t)'
define(`dtee',`rpoint_(to rvec_(dlinewid,0)); move to last line.c
  ifelse(`$1',L,`rp_ang = rp_ang-pi_/2',`$1',R,`rp_ang = rp_ang+pi_/2',`$1')
  {line from rvec_(dlinewid/2,-dlinewid/2) to rvec_(dlinewid/2,dlinewid/2)}
  {line from rvec_(-dlinewid/2,-dlinewid/2) to rvec_(-dlinewid/2,-dlinewid/2)}
  {line from rvec_(-dlinewid/2, dlinewid/2) to rvec_(-dlinewid/2, dlinewid/2)}')

                                Close off line end: `dend([at position])'
define(`dend',`ifelse(`$1',,,`move to substr(`$1',eval(index(`$1',at)+2))')
 {line from rvec_(0,-dlinewid/2) to rvec_(0,dlinewid/2) chop -linethick/2pt__}')

                               `above, below, ljust, rjust but displaced
                                by dlinewid/2 eg "string" dabove(at position)'
define(`dabove',`above ifelse(`$1',,`at Here',`$1')+(0,dlinewid/2)')
define(`dbelow',`below ifelse(`$1',,`at Here',`$1')-(0,dlinewid/2)')
define(`dljust',`ljust ifelse(`$1',,`at Here',`$1')+(dlinewid/2,0)')
define(`drjust',`rjust ifelse(`$1',,`at Here',`$1')-(dlinewid/2,0)')

                               `dline initialization'
define(`deleminit_',`rpoint_(ifelse(`$1',,`to rvec_(linewid,0)',`$1')) ')

                               `m4dl_init_( linespec,T,T,dlinewid )'
define(`m4dl_init',`deleminit_(`$1')
   m4dlw=ifelse(`$4',,dlinewid,`$4')
   m4dll=rp_len ifelse(`$3',,,`-m4dlw/2') ifelse(`$2',,,
    `-m4dlw/2; move to rvec_(m4dlw/2,0)') ')

                               `Standard width of lines'
define(`dlinewid',`0.08*scale')

                                Sets global variables.
define(`darrow_init',`dnl
   ifdef(`if_rpoint__',,`gen_init')
   ')
divert(0)dnl