From 1d1e7e5d6908b7deaaef42f68b53469b178deb25 Mon Sep 17 00:00:00 2001 From: Paul Wessel Date: Thu, 11 Nov 2021 16:56:32 -1000 Subject: [PATCH] Add inverted triangle to front symbol choices (#5983) * Add inverted triangle to front options This adds +v for inverted triangle as a new symbol. * Update front.ps * Update docs * Update explain_symbols.rst_ --- doc/rst/source/explain_symbols.rst_ | 4 +-- doc/scripts/GMT_base_symbols7.ps | Bin 25857 -> 27614 bytes doc/scripts/GMT_base_symbols7.sh | 3 ++- src/gmt_init.c | 3 ++- src/gmt_plot.c | 37 +++++++++++++++++++++++++++- src/gmt_plot.h | 1 + src/psxy.c | 7 +++--- test/psxy/front.ps | Bin 44021 -> 50067 bytes test/psxy/front.sh | 18 +++++++++----- 9 files changed, 59 insertions(+), 14 deletions(-) diff --git a/doc/rst/source/explain_symbols.rst_ b/doc/rst/source/explain_symbols.rst_ index cf4ea1bfe31..2da42bb6f07 100644 --- a/doc/rst/source/explain_symbols.rst_ +++ b/doc/rst/source/explain_symbols.rst_ @@ -318,7 +318,7 @@ plotted centered or as a half-symbols on one side. Special options exist for indicating motion (e.g., faults) along a line. - **-Sf**\ [±]\ *gap*\ [/*size*][**+l**\|\ **+r**][**+b**\|\ **+c**\|\ **+f**\|\ **+s**\ [*angle*]\ \|\ **+t**][**+o**\ *offset*][**+p**\ [*pen*]]. + **-Sf**\ [±]\ *gap*\ [/*size*][**+l**\|\ **+r**][**+b**\|\ **c**\|\ **f**\|\ **s**\ [*angle*]\ \|\ **t**\ \|\ **v**][**+o**\ *offset*][**+p**\ [*pen*]]. Draw a **f**\ ront. Supply distance *gap* between symbols and symbol *size*. If *gap* is negative, it is interpreted to mean the *number* of symbols along the front instead. If *gap* has a leading + then we use the value exactly as given @@ -327,7 +327,7 @@ and *size* is thus required. Append **+l** or **+r** to plot symbols on the left or right side of the front [Default is centered]. Append **+**\ *type* to specify which symbol to plot: **b**\ ox, **c**\ ircle, **f**\ ault, - **s**\ lip, or **t**\ riangle. [Default is **f**\ ault]. Slip means + **s**\ lip, **t**\ riangle or in\ **v**\ erted triangle. [Default is **f**\ ault]. Slip means left-lateral or right-lateral strike-slip arrows (centered is not an option). The **+s** modifier optionally accepts the angle used to draw the vector [20]. Alternatively, use **+S** which draws arcuate arrow diff --git a/doc/scripts/GMT_base_symbols7.ps b/doc/scripts/GMT_base_symbols7.ps index bbc079b53782c879c4dc47300be2f91e227f3d69..56c0e12faf08155937f7a2dfe2c01defcae55b1a 100644 GIT binary patch delta 1508 zcmc&y&rcIU6wVSQN)4 zPb?y-Qg$GZV>p~ITFxysDn(HQvG>7xxhq{*fC+OE5Tfs3EHQ}sfic`p0b18m$|ZGZ zT-B_bfb&=fkpW7>d9-$J0T3fLcJyMYlrs(6(F{i`RSFs`6|jYAcm*nE1?prOJzK&? zzHH_(4|wtnx7QrYoWom{Sgz-|z0)dp5i5DUtXXrOF|07x84!oY>%GO{b9IhlPU9y} zTvV`=?zS|;u4ooEa<{-&T!o?z)WrSXW_9oe>89bRqp(7ay(d@DEU*ja603zhMcv=9 z;yrq@p1)vG3#Vch4F@J*95TQq9BTpdT}5*WpxZE2jp$m*W}!9B;xUDWc*+P!aNaj# zl{We&x74|VZ&kfce20pr+n3DAr@trX7#ohn)* zpQ~zPYRou_aw1!|q0)b;QIQnw=Ul$2BfIU#5ATlpZ2*43!)evRi`cR;>s`xU?~d5j z(1?SVol?=jL>uaKXHNwV{`Vii=T?P4-Hef+L#Mj|YPZ`sQ#9V!r;a9TgxaRY^rwI^ zo7LnfC6GL-j0nNYZ!`*H;)QT@ZL_5`(sA}RI4%X z@IQHMR_QEHxa}8(T|&lfPj(B!6bVh2$wum%kRhLytK{|MSB^O(puFMObAB$7Kj{zj z+@4Ik!OYWY;>oLDIG7=+YoCNEH#98^JWD4pX0klQB@6;Caa&D7l{gvimE z0j_YREuM&j6p>>w`lWmFY$g;9BT0rh0$GNH3`l}7ib`~qAxzOQg~Jq&LtK{N42>u$ Ql9~*WebYf|d?f$-FBv}7`2YX_ delta 469 zcmcb2ow4y0ph#FbIU})1p*SPI9H;~Y3>30Ti%TjM@>0_k+#zC{pR257nk?d= zI9bg_cXNWq2^L1q$%eWj0s+B3@y;RfC8-r9IhlDt6BBhM#Ww$Ou40_r>8i5X%T1PJ z^G5&o%$pYlOEFH~n3OYFEA;B*MZqDHL&L5E`NfkLh93v>?NbCNpN|Lvie*pki#!b! z3*NjgY86D&v6#z1fzZhxV$T5;R8O{!-wW3ipO6F=vr9x46PjF-WW9M~k_97Fp#|9F jCn+aECQn`$B{5klZ3$2;d9qsiZLpf~jOxihvYr6|^GveX diff --git a/doc/scripts/GMT_base_symbols7.sh b/doc/scripts/GMT_base_symbols7.sh index 444f462e2ef..7688c744166 100755 --- a/doc/scripts/GMT_base_symbols7.sh +++ b/doc/scripts/GMT_base_symbols7.sh @@ -18,4 +18,5 @@ gmt psxy -R -J -O -K -W1p -Gred -Sf-1/0.1i+b -X0.6i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Gred -Sf-1/0.1i+c -X0.6i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Gred -Sf-1/0.1i+f -X0.6i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Sf-1/0.4i+S+l -X0.6i t.txt >> $ps -gmt psxy -R -J -O -W1p -Glightorange -Sf-1/0.1i+t -X0.6i t.txt >> $ps +gmt psxy -R -J -O -K -W1p -Glightorange -Sf-1/0.1i+t -X0.6i t.txt >> $ps +gmt psxy -R -J -O -W1p -Glightgreen -Sf-1/0.1i+v -X0.6i t.txt >> $ps diff --git a/src/gmt_init.c b/src/gmt_init.c index 761b8d09aef..b98782eca62 100644 --- a/src/gmt_init.c +++ b/src/gmt_init.c @@ -5761,7 +5761,7 @@ GMT_LOCAL int gmtinit_parse_front (struct GMT_CTRL *GMT, char *text, struct GMT_ char p[GMT_BUFSIZ] = {""}, txt_a[GMT_LEN256] = {""}, txt_b[GMT_LEN256] = {""}; /* text[0] is the leading 'f' for front */ - if (text[1] == '+' && !strchr ("bcfilrsStop", text[2])) S->f.f_exact = true, k0 = 2; /* Special leading + to be skipped when looking for modifiers */ + if (text[1] == '+' && !strchr ("bcfilrsStopv", text[2])) S->f.f_exact = true, k0 = 2; /* Special leading + to be skipped when looking for modifiers */ for (k = k0; text[k] && text[k] != '+'; k++); /* Either find the first plus or run out or chars */ strncpy (p, text, k); p[k] = 0; mods = (text[k] == '+'); @@ -5794,6 +5794,7 @@ GMT_LOCAL int gmtinit_parse_front (struct GMT_CTRL *GMT, char *text, struct GMT_ S->f.f_angle = (p[1]) ? atof (&p[1]) : 40.0; /* Set curved slip arrow angle [40] */ break; case 't': S->f.f_symbol = GMT_FRONT_TRIANGLE; break; /* Triangle front */ + case 'v': S->f.f_symbol = GMT_FRONT_ITRIANGLE; break; /* Inverted triangle front */ case 'o': S->f.f_off = gmt_M_to_inch (GMT, &p[1]); break; /* Symbol offset along line */ case 'p': if (p[1]) { /* Get alternate pen for front-symbol outline [-W] */ if (gmt_getpen (GMT, &p[1], &S->f.pen)) { diff --git a/src/gmt_plot.c b/src/gmt_plot.c index ede1afa7885..1bc15644869 100644 --- a/src/gmt_plot.c +++ b/src/gmt_plot.c @@ -9845,12 +9845,15 @@ void gmt_geo_rectangle (struct GMT_CTRL *GMT, double lon, double lat, double wid PSL_plotsymbol (PSL, xp, yp, dim, PSL_ROTRECT); } +#define M_PI_3 1.047197551196598 /* 60 degrees in radians */ + void gmt_draw_front (struct GMT_CTRL *GMT, double x[], double y[], uint64_t n, struct GMT_FRONTLINE *f) { int ngap, tmp_join = 0, tmp_limit = 0; bool skip; uint64_t i; - double *s = NULL, xx[4], yy[4], dist = 0.0, w, frac, dx, dy, angle, dir1, dir2; + double *s = NULL, xx[6], yy[6], dist = 0.0, w, frac, dx, dy, angle, dir1, dir2; double gap, x0, y0, xp, yp, len2, len3, len4, cosa, sina, sa, ca, offx, offy, dim[PSL_MAX_DIMS]; + double a1, a2, sina1, sina2, cosa1, cosa2; struct PSL_CTRL *PSL= GMT->PSL; if (n < 2) return; @@ -9960,6 +9963,38 @@ void gmt_draw_front (struct GMT_CTRL *GMT, double x[], double y[], uint64_t n, s } break; + case GMT_FRONT_ITRIANGLE: /* Inverted triangle */ + a1 = angle + M_PI_3; a2 = a1 + M_PI_3; + sincos (a1, &sina1, &cosa1); + sincos (a2, &sina2, &cosa2); + switch (f->f_sense) { + case GMT_FRONT_CENTERED: + xx[0] = x0 + f->f_len * cosa1; /* UR */ + yy[0] = y0 + f->f_len * sina1; + xx[1] = x0 + f->f_len * cosa2; /* UL */ + yy[1] = y0 + f->f_len * sina2; + xx[2] = x0; yy[2] = y0; /* MC */ + xx[3] = x0 - f->f_len * cosa1; /* LR */ + yy[3] = y0 - f->f_len * sina1; + xx[4] = x0 - f->f_len * cosa2; /* LL */ + yy[4] = y0 - f->f_len * sina2; + xx[5] = x0; yy[5] = y0; /* MC */ + PSL_plotpolygon (PSL, xx, yy, 6); + break; + case GMT_FRONT_RIGHT: + sina1 = -sina1; cosa1 = -cosa1; sina2 = -sina2; cosa2 = -cosa2; + /* Intentionally fall through - after changing the angle */ + case GMT_FRONT_LEFT: + xx[0] = x0 + f->f_len * cosa1; /* UR */ + yy[0] = y0 + f->f_len * sina1; + xx[1] = x0 + f->f_len * cosa2; /* UL */ + yy[1] = y0 + f->f_len * sina2; + xx[2] = x0; yy[2] = y0; /* MC */ + PSL_plotpolygon (PSL, xx, yy, 3); + break; + } + break; + case GMT_FRONT_CIRCLE: /* Circles */ switch (f->f_sense) { case GMT_FRONT_CENTERED: diff --git a/src/gmt_plot.h b/src/gmt_plot.h index c1ede2c68a9..bb5c0b66612 100644 --- a/src/gmt_plot.h +++ b/src/gmt_plot.h @@ -64,6 +64,7 @@ /*! FRONT symbols */ enum GMT_enum_front {GMT_FRONT_FAULT = 0, + GMT_FRONT_ITRIANGLE, GMT_FRONT_TRIANGLE, GMT_FRONT_SLIP, GMT_FRONT_SLIPC, diff --git a/src/psxy.c b/src/psxy.c index 46c23562f2e..2368a0dafec 100644 --- a/src/psxy.c +++ b/src/psxy.c @@ -619,7 +619,7 @@ static int usage (struct GMTAPI_CTRL *API, int level) { "Append any of the units in %s to the dimensions [Default is k]. " "For linear projection and -SJ we scale dimensions by the map scale.", GMT_LINE_BULLET, mod_name, GMT_LEN_UNITS_DISPLAY); - GMT_Usage (API, 2, "\n%s Front: -Sf[/][+r+l][+f+t+s+c+b][+o][+p]", GMT_LINE_BULLET); + GMT_Usage (API, 2, "\n%s Front: -Sf[/][+r|l][+f|t|s|c|b|v][+o][+p]", GMT_LINE_BULLET); GMT_Usage (API, -3, "If is negative it means the number of gaps instead. " "If has a leading + then is used exactly [adjusted to fit line length]. " "If not given, defaults to 15%% of . Append various modifiers:"); @@ -631,10 +631,11 @@ static int usage (struct GMTAPI_CTRL *API, int level) { GMT_Usage (API, 3, "+f Plot centered cross-tick or tick only in specified direction [Default]."); GMT_Usage (API, 3, "+s Plot left-or right-lateral strike-slip arrows. Optionally append the arrow angle [20]."); GMT_Usage (API, 3, "+S Same as +s but with curved arrow-heads."); - GMT_Usage (API, 3, "+t diagonal square when centered, directed triangle otherwise."); + GMT_Usage (API, 3, "+t Plot diagonal square when centered, directed triangle otherwise."); GMT_Usage (API, 3, "+o Plot first symbol when along-front distance is [0]."); GMT_Usage (API, 3, "+p Append for front symbol outline; if no then no outline [Outline with -W pen]."); - GMT_Usage (API, -3, "Only one of +b|c|f|i|s|S|t may be selected."); + GMT_Usage (API, 3, "+v Plot two inverted triangles, directed inverted triangle otherwise."); + GMT_Usage (API, -3, "Only one of +b|c|f|i|s|S|t|v may be selected."); GMT_Usage (API, 2, "\n%s Kustom: -Sk|K[/]", GMT_LINE_BULLET); GMT_Usage (API, -3, "Append immediately after 'k|K'; this will look for " diff --git a/test/psxy/front.ps b/test/psxy/front.ps index f478c1c0e01538f4e0afec47905900ee4d3d32ae..811b5c0b248eafe367fc526d1046469d664867d3 100644 GIT binary patch delta 6323 zcmc&&ZERat8J626S?{ujkWZFvoYJOjG>-4LeLMD%W^n~;;#AJZ(lA_qT*ppsY{$My z)1|?kC>xBnN^@4A1FhXCXe9y(8Hw=&A$|a5Xws-Q5J-G$Xg?6JAN)X?5brt1zPUB_ zb?^3r$g%Ia?|Yv2J@4mz@4tS%13$BKW2svjxGdRwZ48YG#` zn2{h_13~OBo{HvCA(cHrWRt&ivV1|5W$Yn4|8hRBXUtqSoiWiE8bwoxLYVnwonGal zW(p+>XtF{{MvVd?6{C4d3j>L689_WcTo$%oLvH9MJ?qG=pxeOfXf)73E|2Dy3+73b z(dW?NQh4vR9mTS>P_AG^VrjF01VvI&G?M_$^(6#R1?tndsu;@RR0NSSlHVGva5jro z;6<78(hD1N>EHbyYSPLULe#;-6Op{WqUQ@bu_d>Q`HZ*K&I>eeyHyct$XgU#UUOT9_T~Jih%041A2ddBp9+7tP6{?94UmeH4+M1 z45g#PfA`??`}X0Pf!@+vBY$bSkH$JR=_I#KJ;>_9L?mZK<9fu1#&iRu;p2~`9z<2q zHN^rujK&%wgn|U&uKz_K;ScFCR%$wO(DTvhRNB-(Q3&OtOOQV_i5_|gLH)=@=b&n> zq~kiV4F1^Yo44hRtcm|KdT$fekzDQ0<+F2O=v;*s|;^Mb`Wh9(p2%`6t?& zc|{FqA}q~jS(4>|pHg~0-O((IenBA1<34Fn5*5Y02?rwVh#x=hq#SY4j_6O_o6xg@ z|8(qU^!WL>qlDrVC-7C#;f0t-UJWTC5_k=%5b^@a1VMu}^1^Lc0~uB_k`x7n$2l*d zR`vvt>W2le0}$Na-XRGx@@pd7L8KG|NRa@@Z*2h_5XiOw5wuVNM+|K5@gqfsEg(fD znvka!4S_%af+bLqUk24xRod1}MW81YBbWDpbOm`w;C6YFrpoZxqp4(*d%v#XSd95} zPtwui;L||jVOKs~!|gi5ekIiiyM4L~znlD^OZ=DT82-S*z6L4Reyq1{%6(w|4H|QO z87Gu-%Kdd=f3u`YvLN7AL%(%>OB=>8DQ_eAH#sLUBzgXvdEnN8p}wuz5~s^_M6aJX zt|HoHpmF{EBbh`fHm~F7jXQUFRnnp)p2tJQ8GO$Qhkul9@hJG+v#(MMX(#HRVd!aM zp({&n%FF39CY7?Y!0_*UvJpOnW1lF?gHS;gT40eZ+E$y(-JP?vJ z7lzm{49su*o(4VlLL+?A4^&$Nkf4IwmUw8hyOVT)fS(e!8$x8WyT~3FXw9$N5L7T- zxgSUbV|yv1s)nF$cL0H~ZZAn4cs~t+*yN9AJF$UT@cr;gBfE@TtlbqDQY$|Ar5n`3 z^Iva(ROTA@7PNO|L-M7Cv`yOq`@*(I^Z$W306&J4UbtNf|H!t_v zvjSclHSkugF5(#8Zv8dCwWr8l+{LqtIYT$o*$jIxyO>=`S6=GbXlv}%A9+>8IBtHC T7O}C?7ha8+*4FWNwhsRnnP|-< delta 3738 zcmbuCZEO=|9Kh4zl2O1p#x`J}4=-C#Xm@wL-r7ZR2n@0?_tFAmfaBUeTW@Q7$Mv># zjBX&})Bpqjn~J=PiXsy5Fes78ix{FICTcK7!Uy$>k{B`ZlV5!9y7q>j((S#(jhG^cq<}H8_A622q|Wmad{I5kt{lwZMiR z9B{_5B1(KvPI`(j}>jP?v-%g8b;N4=a9|kHsZ^u8d>BUNlNc5~6OISWhCM4M*ZQsn$Le zE_^r`=4BKQi#_BK?M0!EuDH^RVz?cxu*2PXh3c>K59Gka>N!xl%%QGcaQ%U@i4DG0 ztxNr_GVaE5980_swx{ z1tXG4p&Rj`5TY3hY+a5i0X~kSyo4N0R0Rk7no4E_?Pb*sP4%@^DA9{ZS z+c>z>RG#l(Xbx2}h;=c@UCF`SzM0_h&9%|M`=-GWpORC_K#^Z8u4ITy6!P1jCZ80l zBT8fgF8bEM@BV^Z<8H(161Xy0tnOazu}xrDHymqU4)(S4@@di?N>os=91+L@$67|9 zF;WP>t^NFwf5_}w?t&3Pl5t!SWek@GBQOvwfR=UFGtBlDb7p}!4OXqMv&?*QgTY+2 z(VRK^899HvPn|HO^=8JO1)I!tcjna7aA#8)4DkU-@C9U5^y|(*Az3$-xtuP>?Y5SH z?=!{@h0KhNKn!2A6nK6jAL1S9z{6RJv)D4r6-~32!?sRy-wMQX%e)^%gI66h<&|@6 zC8BAHL3MTqO?i;pg_hZUCcV=M_42oR>gZiH@QY-I)9bWIDTihSTlSLgN_nYag}51Z z1gd+gEbvMuINU7kJ-imA{duss-<}s(C?iL+gN47ge39{8>>h9A?5+{Gwbe@5`(b6j z!CKU7&LZ2@A>CY->6kjZ zn?(+W%QDv*EfKu zGu-zMHK*5Jlj;|6>CNJG){QkwE8v!kZ6(1SquD+Yy-0c&^CWo)axRt3@`}^7T)lXV1 zr{L^G!>5C1vNOG>OX19?Gc9mSprE7H=7;Sa7c$;{sg5U~x-zFIC`P3SRs=DY`X3Y( Ty9Eq)8w<$~{ajdc^@+a$egIGj diff --git a/test/psxy/front.sh b/test/psxy/front.sh index 1964e8795a0..13b40af37c6 100755 --- a/test/psxy/front.sh +++ b/test/psxy/front.sh @@ -4,7 +4,7 @@ ps=front.ps -gmt psbasemap -R0/6/0/8 -Jx1i -P -B0 -K -Xc > $ps +gmt psbasemap -R0/7/0/8 -Jx1i -P -B0 -K -X0.5i > $ps cat << EOF > t.txt 0 0 10 20 @@ -15,30 +15,36 @@ gmt psxy -R -J -O -K -W1p -Gred -Sf0.4i/0.1i+c -X0.5i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Gred -Sf0.4i/0.1i+f -X0.5i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Sf0.6i/0.3i+S+r -X0.5i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Gred -Sf0.4i/0.1i+t -X0.5i t.txt >> $ps +gmt psxy -R -J -O -K -W1p -Gred -Sf0.4i/0.1i+v -X0.5i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Gred -Sf-1/0.1i+b -X0.5i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Gred -Sf-1/0.1i+c -X0.5i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Gred -Sf-1/0.1i+f -X0.5i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Sf-1/0.4i+S+l -X0.5i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Gred -Sf-1/0.1i+t -X0.5i t.txt >> $ps -# Right symbols using fixed interval, then same with just 1 centered symbol -gmt psxy -R -J -O -K -W1p -Gblue -Sf0.4i/0.1i+b+r -X-4.5i -Y2.5i t.txt >> $ps +gmt psxy -R -J -O -K -W1p -Gred -Sf-1/0.1i+v -X0.5i t.txt >> $ps +# Right symbols using fixed interval, then same with just 1 right-side symbol +gmt psxy -R -J -O -K -W1p -Gblue -Sf0.4i/0.1i+b+r -X-5.5i -Y2.5i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Gblue -Sf0.4i/0.1i+c+r -X0.5i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Gblue -Sf0.4i/0.1i+f+r -X0.5i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Gblue -Sf0.6i/0.3i+s+r -X0.5i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Gblue -Sf0.4i/0.1i+t+r -X0.5i t.txt >> $ps +gmt psxy -R -J -O -K -W1p -Gblue -Sf0.4i/0.1i+v+r -X0.5i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Gblue -Sf-1/0.1i+b+r -X0.5i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Gblue -Sf-1/0.1i+c+r -X0.5i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Gblue -Sf-1/0.1i+f+r -X0.5i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Gblue -Sf-1/0.4i+s+r -X0.5i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Gblue -Sf-1/0.1i+t+r -X0.5i t.txt >> $ps -# Left symbols using fixed interval, then same with just 1 centered symbol -gmt psxy -R -J -O -K -W1p -Gyellow -Sf0.4i/0.1i+b+l -X-4.5i -Y2.5i t.txt >> $ps +gmt psxy -R -J -O -K -W1p -Gblue -Sf-1/0.1i+v+r -X0.5i t.txt >> $ps +# Left symbols using fixed interval, then same with just 1 left-side symbol +gmt psxy -R -J -O -K -W1p -Gyellow -Sf0.4i/0.1i+b+l -X-5.5i -Y2.5i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Gyellow -Sf0.4i/0.1i+c+l -X0.5i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Gyellow -Sf0.4i/0.1i+f+l -X0.5i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Gyellow -Sf0.6i/0.3i+s+l -X0.5i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Gyellow -Sf0.4i/0.1i+t+l -X0.5i t.txt >> $ps +gmt psxy -R -J -O -K -W1p -Gyellow -Sf0.4i/0.1i+v+l -X0.5i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Gyellow -Sf-1/0.1i+b+l -X0.5i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Gyellow -Sf-1/0.1i+c+l -X0.5i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Gyellow -Sf-1/0.1i+f+l -X0.5i t.txt >> $ps gmt psxy -R -J -O -K -W1p -Gyellow -Sf-1/0.4i+s+l -X0.5i t.txt >> $ps -gmt psxy -R -J -O -W1p -Gyellow -Sf-1/0.1i+t+l -X0.5i t.txt >> $ps +gmt psxy -R -J -O -K -W1p -Gyellow -Sf-1/0.1i+t+l -X0.5i t.txt >> $ps +gmt psxy -R -J -O -W1p -Gyellow -Sf-1/0.1i+v+l -X0.5i t.txt >> $ps