Annotation of OpenXM_contrib/gnuplot/term/metapost.trm, Revision 1.1.1.1
1.1 maekawa 1: /*
2: * $Id: metapost.trm,v 1.5.2.4 1999/09/16 16:05:21 lhecking Exp $
3: */
4:
5: /* GNUPLOT - metapost.trm */
6:
7: /*[
8: * Copyright 1990 - 1993, 1998
9: *
10: * Permission to use, copy, and distribute this software and its
11: * documentation for any purpose with or without fee is hereby granted,
12: * provided that the above copyright notice appear in all copies and
13: * that both that copyright notice and this permission notice appear
14: * in supporting documentation.
15: *
16: * Permission to modify the software is granted, but not the right to
17: * distribute the complete modified source code. Modifications are to
18: * be distributed as patches to the released version. Permission to
19: * distribute binaries produced by compiling modified sources is granted,
20: * provided you
21: * 1. distribute the corresponding source modifications from the
22: * released version in the form of a patch file along with the binaries,
23: * 2. add special version identification to distinguish your version
24: * in addition to the base release version number,
25: * 3. provide your name and address as the primary contact for the
26: * support of your modified version, and
27: * 4. retain our contact information in regard to use of the base
28: * software.
29: * Permission to distribute the released version of the source code along
30: * with corresponding source modifications in the form of a patch file is
31: * granted with same provisions 2 through 4 for binary distributions.
32: *
33: * This software is provided "as is" without express or implied warranty
34: * to the extent permitted by applicable law.
35: ]*/
36:
37: /* 1999/04/22
38: * GNUPLOT -- metapost.trm
39: *
40: * This terminal driver supports:
41: * Metapost Commands
42: *
43: * Based on metafont.trm, written by
44: * Pl Hedne
45: * Trondheim, Norway
46: * Pal.Hedne@termo.unit.no;
47: * with improvements by Carsten Steger
48: *
49: * and pstricks.trm, written by
50: * David Kotz and Raymond Toy
51: *
52: * Adapted to metapost by:
53: * Daniel H. Luecking <luecking@comp.uark.edu> and
54: * L Srinivasa Mohan <mohan@chemeng.iisc.ernet.in>
55: */
56:
57: #include "driver.h"
58:
59: #ifdef TERM_REGISTER
60: register_term(mp)
61: #endif
62:
63: #ifdef TERM_PROTO
64: TERM_PUBLIC void MP_options __PROTO((void));
65: TERM_PUBLIC void MP_init __PROTO((void));
66: TERM_PUBLIC void MP_graphics __PROTO((void));
67: TERM_PUBLIC void MP_text __PROTO((void));
68: TERM_PUBLIC void MP_linetype __PROTO((int linetype));
69: TERM_PUBLIC void MP_move __PROTO((unsigned int x, unsigned int y));
70: TERM_PUBLIC void MP_point __PROTO((unsigned int x, unsigned int y, int number));
71: TERM_PUBLIC void MP_pointsize __PROTO((double size));
72: TERM_PUBLIC void MP_linewidth __PROTO((double width));
73: TERM_PUBLIC void MP_vector __PROTO((unsigned int ux, unsigned int uy));
74: TERM_PUBLIC void MP_arrow __PROTO((unsigned int sx, unsigned int sy,
75: unsigned int ex, unsigned int ey,
76: TBOOLEAN head));
77: TERM_PUBLIC void MP_put_text __PROTO((unsigned int x, unsigned int y, char str[]));
78: TERM_PUBLIC int MP_justify_text __PROTO((enum JUSTIFY mode));
79: TERM_PUBLIC int MP_text_angle __PROTO((int ang));
80: TERM_PUBLIC void MP_reset __PROTO((void));
81: TERM_PUBLIC int MP_set_font __PROTO((char *font));
82: TERM_PUBLIC void MP_boxfill __PROTO((int style,
83: unsigned int x1, unsigned int y1,
84: unsigned int width, unsigned int height));
85:
86: /* 5 inches wide by 3 inches high (default) */
87: #define MP_XSIZE 5.0
88: #define MP_YSIZE 3.0
89:
90: /* gnuplot units will be one pixel if printing device has this
91: resolution */
92: #define MP_DPI (300)
93:
94: #define MP_XMAX (MP_XSIZE*MP_DPI)
95: #define MP_YMAX (MP_YSIZE*MP_DPI)
96:
97: #define MP_HTIC (5*MP_DPI/72) /* nominally 5pt */
98: #define MP_VTIC (5*MP_DPI/72) /* " 5pt */
99: #define MP_HCHAR (MP_DPI*53/10/72) /* " 5.3pt */
100: #define MP_VCHAR (MP_DPI*11/72) /* " 11pt */
101: #endif /* TERM_PROTO */
102:
103: #ifndef TERM_PROTO_ONLY
104: #ifdef TERM_BODY
105:
106: static double MP_xsize = MP_XSIZE;
107: static double MP_ysize = MP_YSIZE;
108: /* static double MP_xmax = MP_XMAX;
109: static double MP_ymax = MP_YMAX;
110: * unused, for now
111: */
112: static int MP_posx;
113: static int MP_posy;
114: static char MP_fontname[MAX_ID_LEN + 1];
115: static double MP_fontsize;
116: static double MP_textmag;
117: enum JUSTIFY MP_justify = LEFT;
118: static int MP_ang = 0;
119: static int MP_char_code = 0;
120:
121: /* number of nodes in an output line so far */
122: static int MP_linecount = 1;
123:
124: /* Number of point types */
125: #define MP_POINT_TYPES 10
126:
127: /* Number of line types */
128: #define MP_LINE_TYPES 8
129:
130: /* are we in the middle of a MP path? */
131: static TBOOLEAN MP_inline = FALSE;
132: /* colored or dashed lines? */
133: static TBOOLEAN MP_color = FALSE;
134: static TBOOLEAN MP_solid = FALSE;
135:
136: /* compatability mode*/
137: static TBOOLEAN MP_notex = FALSE;
138:
139: /* has a font change taken place? */
140: static TBOOLEAN MP_fontchanged = FALSE;
141:
142: /* The old types */
143: static int MP_oldline = -2;
144:
145: /* The old sizes */
146: static double MP_oldptsize = 1.0;
147: static double MP_oldpen = 1.0;
148:
149: /* terminate any path in progress */
150: static void MP_endline __PROTO((void));
151:
152: /* max number of path nodes before a newline */
153: #define MP_LINEMAX 5
154:
155: TERM_PUBLIC void
156: MP_options()
157: {
158: MP_color = FALSE;
159: MP_solid = FALSE;
160: MP_notex = FALSE;
161: MP_fontsize = 10.0;
162: MP_textmag = 1.0;
163: strcpy(MP_fontname, "cmr10");
164: strcpy(default_font, ""); /* output file will store default font info */
165: while (!END_OF_COMMAND) {
166: if (almost_equals(c_token, "m$onochrome")) {
167: MP_color = FALSE;
168: c_token++;
169: continue;
170: }
171: if (almost_equals(c_token, "c$olor") || almost_equals(c_token, "c$olour")) {
172: MP_color = TRUE;
173: c_token++;
174: continue;
175: }
176: if (almost_equals(c_token, "s$olid")) {
177: MP_solid = TRUE;
178: c_token++;
179: continue;
180: }
181: if (almost_equals(c_token, "da$shed")) {
182: MP_solid = FALSE;
183: c_token++;
184: continue;
185: }
186: if (almost_equals(c_token, "n$otex")) {
187: MP_notex = TRUE;
188: strcpy(MP_fontname, "pcrr8r");
189: c_token++;
190: continue;
191: }
192: if (almost_equals(c_token, "t$ex")) {
193: MP_notex = FALSE;
194: c_token++;
195: continue;
196: }
197: if (almost_equals(c_token, "de$fault")) {
198: c_token++;
199: continue;
200: }
201: if (almost_equals(c_token, "m$agnification")) {
202: c_token++;
203: if (!END_OF_COMMAND) { /* global text scaling */
204: struct value a;
205: MP_textmag = (double) real(const_express(&a));
206: }
207: c_token++;
208: continue;
209: }
210: break;
211: }
212: if (!END_OF_COMMAND && isstring(c_token)) { /* font name */
213: quote_str(MP_fontname, c_token, MAX_ID_LEN);
214: c_token++;
215: }
216: if (!END_OF_COMMAND) { /*font size */
217: struct value a;
218: MP_fontsize = (double) real(const_express(&a));
219: c_token++;
220: }
221: /* minimal error recovery: */
222: if (MP_fontsize < 5.0)
223: MP_fontsize = 5.0;
224: if (MP_fontsize > 99.99)
225: MP_fontsize = 99.99;
226:
227: term->v_char = (unsigned int) (MP_DPI * MP_fontsize * MP_textmag * 11 / 720);
228: if (MP_notex) { /* Courier is a little wider than cmtt */
229: term->h_char = (unsigned int) (MP_DPI * MP_fontsize * MP_textmag * 6.0 / 720 + 0.5);
230: } else {
231: term->h_char = (unsigned int) (MP_DPI * MP_fontsize * MP_textmag * 5.3 / 720 + 0.5);
232: }
233: sprintf(term_options, "%s%s%s%s%6.3f \"%s\" %5.2f",
234: MP_color ? "color " : "", MP_solid ? "solid " : "",
235: MP_notex ? "notex " : "", "mag ",
236: MP_textmag, MP_fontname, MP_fontsize);
237: }
238:
239: TERM_PUBLIC void
240: MP_init()
241: {
242: time_t now;
243: time(&now);
244: MP_posx = MP_posy = 0;
245: fprintf(gpoutfile, "%%GNUPLOT Metapost output: %s\n", asctime(localtime(&now)));
246: fputs("\n\
247: defaultmpt:=mpt:=4;\n\
248: th:=.6;\n\
249: \n\
250: def scalepen expr n = pickup pencircle scaled (n*th) enddef;\n\
251: def ptsize expr n = mpt:=n*defaultmpt enddef;\n",
252: gpoutfile);
253:
254: fprintf(gpoutfile, "\ntextmag:=%6.3f;\n", MP_textmag);
255:
256: fputs("\
257: vardef makepic(expr str) =\n\
258: if picture str : str scaled textmag\n\
259: % otherwise a string\n\
260: else: str infont defaultfont scaled (defaultscale*textmag)\n\
261: fi\n\
262: enddef;\n\
263: \n\
264: def infontsize(expr str, size) =\n\
265: infont str scaled (size / fontsize str)\n\
266: enddef;\n",
267: gpoutfile);
268:
269: if (MP_notex) {
270: fprintf(gpoutfile, "\n\
271: defaultfont:= \"%s\";\n\
272: defaultscale := %6.3f/fontsize defaultfont;\n",
273: MP_fontname, MP_fontsize);
274: } else {
275: fputs("\n\
276: %font changes\n\
277: verbatimtex\n\
278: \\def\\setfont#1#2{%.\n\
279: \\font\\gpfont=#1 at #2pt\n\
280: \\gpfont}\n",
281: gpoutfile);
282:
283: fprintf(gpoutfile, "\\setfont{%s}{%5.2f}\netex\n",
284: MP_fontname, MP_fontsize);
285: }
286: fputs("\n\
287: color currentcolor; currentcolor=black;\n\
288: boolean colorlines,dashedlines;\n",
289: gpoutfile);
290: if (MP_color) {
291: fputs("colorlines:=true;\n", gpoutfile);
292: } else {
293: fputs("colorlines:=false;\n", gpoutfile);
294: }
295: if (MP_solid) {
296: fputs("dashedlines:=false;\n", gpoutfile);
297: } else {
298: fputs("dashedlines:=true;\n", gpoutfile);
299: }
300: fputs("\n\
301: def _wc = withpen currentpen withcolor currentcolor enddef;\n\
302: def _ac = addto currentpicture enddef;\n\
303: def _sms = scaled mpt shifted enddef;\n\
304: % drawing point-types\n\
305: def gpdraw (expr n, x, y) =\n\
306: if n<0: _ac contour fullcircle _sms (x,y)\n\
307: elseif (n=1) or (n=3):\n\
308: _ac doublepath ptpath[n] _sms (x,y) _wc;\n\
309: _ac doublepath ptpath[n] rotated 90 _sms (x,y) _wc\n\
310: elseif n<6: _ac doublepath ptpath[n] _sms (x,y) _wc\n\
311: else: _ac contour ptpath[n] _sms (x,y) _wc\n\
312: fi\n\
313: enddef;\n\
314: \n\
315: % the point shapes\n\
316: path ptpath[];\n\
317: %diamond\n\
318: ptpath0 = ptpath6 = (-1/2,0)--(0,-1/2)--(1/2,0)--(0,1/2)--cycle;\n\
319: % plus sign\n\
320: ptpath1 = (-1/2,0)--(1/2,0);\n\
321: % square\n\
322: ptpath2 = ptpath7 = (-1/2,-1/2)--(1/2,-1/2)--(1/2,1/2)--(-1/2,1/2)--cycle;\n\
323: % cross\n\
324: ptpath3 := (-1/2,-1/2)--(1/2,1/2);\n\
325: % circle:\n\
326: ptpath4 = ptpath8:= fullcircle;\n\
327: % triangle\n\
328: ptpath5 = ptpath9 := (0,1/2)--(-1/2,-1/2)--(1/2,-1/2)--cycle;\n\
329: \n\
330: def linetype expr n =\n\
331: currentcolor:= if colorlines : col[n] else: black fi;\n\
332: if n = -1 :\n\
333: drawoptions(withcolor currentcolor withpen (currentpen scaled .5));\n\
334: elseif n < 1 :\n\
335: drawoptions(_wc);\n\
336: else :\n\
337: drawoptions( if dashedlines: dashed lt[n] fi _wc);\n\
338: fi\n\
339: enddef;\n\
340: \n\
341: % dash patterns\n\
342: picture lt[];\n\
343: lt1=dashpattern(on 2 off 2); % dashes\n\
344: lt2=dashpattern(on 2 off 2 on 0.2 off 2); %dash-dot\n\
345: lt3=lt1 scaled 1.414;\n\
346: lt4=lt2 scaled 1.414;\n\
347: lt5=lt1 scaled 2;\n\
348: lt6:=lt2 scaled 2;\n\
349: lt7=dashpattern(on 0.2 off 2); %dots\n\
350: \n\
351: color col[],cyan, magenta, yellow;\n\
352: cyan=blue+green; magenta=red+blue;yellow=green+red;\n\
353: col[-2]:=col[-1]:=col0:=black;\n\
354: col1:=red;\n\
355: col2:=(.2,.2,1); %blue\n\
356: col3:=(1,.66,0); %orange\n\
357: col4:=.85*green;\n\
358: col5:=.9*magenta;\n\
359: col6:=0.85*cyan;\n\
360: col7:=.85*yellow;\n\
361: \n\
362: %placing text\n\
363: picture GPtext;\n\
364: def put_text(expr pic, x, y, r, j) =\n\
365: GPtext:=makepic(pic);\n\
366: GPtext:=GPtext shifted\n\
367: if j = 1: (-(ulcorner GPtext + llcorner GPtext)/2)\n\
368: elseif j = 2: (-center GPtext)\n\
369: else: (-(urcorner GPtext + lrcorner GPtext)/2)\n\
370: fi\n\
371: rotated if r > 0: 90 else: 0 fi;\n\
372: draw GPtext shifted (x,y)\n\
373: enddef;\n",
374: gpoutfile);
375: }
376:
377: TERM_PUBLIC void
378: MP_graphics()
379: {
380: /* initialize "remembered" drawing parameters */
381: MP_oldline = -2;
382: MP_oldpen = 1.0;
383: MP_oldptsize = pointsize;
384: fprintf(gpoutfile, "\nbeginfig(%d);\nw:=%gin;h:=%gin;\n",
385: MP_char_code, MP_xsize, MP_ysize);
386: fprintf(gpoutfile, "a:=w/%d;b:=h/%d;\n", term->xmax, term->ymax);
387: fprintf(gpoutfile, "scalepen 1; ptsize %g;linetype -2;\n", pointsize);
388: MP_char_code++;
389: }
390:
391: TERM_PUBLIC void
392: MP_text()
393: {
394: if (MP_inline)
395: MP_endline();
396: fputs("endfig;\n", gpoutfile);
397: }
398:
399: TERM_PUBLIC void
400: MP_linetype(lt)
401: int lt;
402: {
403: int linetype = lt;
404: if (linetype >= MP_LINE_TYPES)
405: linetype %= MP_LINE_TYPES;
406: if (MP_inline)
407: MP_endline();
408: if (MP_oldline != linetype) {
409: fprintf(gpoutfile, "linetype %d;\n", linetype);
410: MP_oldline = linetype;
411: }
412: }
413:
414: TERM_PUBLIC void
415: MP_move(x, y)
416: unsigned int x;
417: unsigned int y;
418: {
419: if ((x != MP_posx) || (y != MP_posy)) {
420: if (MP_inline)
421: MP_endline();
422: MP_posx = x;
423: MP_posy = y;
424: } /* else we seem to be there already */
425: }
426:
427: TERM_PUBLIC void
428: MP_point(x, y, pt)
429: unsigned int x;
430: unsigned int y;
431: int pt;
432: {
433: int pointtype = pt;
434: if (MP_inline)
435: MP_endline();
436:
437: /* Print the shape defined by 'number'; number < 0 means
438: to use a dot, otherwise one of the defined points. */
439:
440: if (pointtype >= MP_POINT_TYPES)
441: pointtype %= MP_POINT_TYPES;
442: fprintf(gpoutfile, "gpdraw(%d,%da,%db);\n", pointtype, x, y);
443: }
444:
445: TERM_PUBLIC void
446: MP_pointsize(ps)
447: double ps;
448: {
449: if (MP_oldptsize != ps) {
450: if (MP_inline)
451: MP_endline();
452: fprintf(gpoutfile, "ptsize %g;\n", ps);
453: MP_oldptsize = ps;
454: }
455: }
456:
457:
458: TERM_PUBLIC void
459: MP_linewidth(lw)
460: double lw;
461: {
462: if (MP_oldpen != lw) {
463: if (MP_inline)
464: MP_endline();
465: fprintf(gpoutfile, "scalepen %g;\n", lw);
466: MP_oldpen = lw;
467: }
468: }
469:
470:
471: TERM_PUBLIC void
472: MP_vector(ux, uy)
473: unsigned int ux;
474: unsigned int uy;
475: {
476: if ((ux == MP_posx) && (uy == MP_posy))
477: return; /* Zero length line */
478:
479: if (MP_inline) {
480: if (MP_linecount++ >= MP_LINEMAX) {
481: fputs("\n", gpoutfile);
482: MP_linecount = 1;
483: }
484: } else {
485: MP_inline = TRUE;
486: fprintf(gpoutfile, "draw (%da,%db)", MP_posx, MP_posy);
487: MP_linecount = 2;
488: }
489: MP_posx = ux;
490: MP_posy = uy;
491: fprintf(gpoutfile, "--(%da,%db)", MP_posx, MP_posy);
492: }
493:
494: static void
495: MP_endline()
496: {
497: MP_inline = FALSE;
498: fprintf(gpoutfile, ";\n");
499: }
500:
501: TERM_PUBLIC void
502: MP_arrow(sx, sy, ex, ey, head)
503: unsigned int sx;
504: unsigned int sy;
505: unsigned int ex;
506: unsigned int ey;
507: TBOOLEAN head;
508: {
509: MP_move(sx, sy);
510: if (head) {
511: fprintf(gpoutfile, "drawarrow (%da,%db)--(%da,%db);\n",
512: sx, sy, ex, ey);
513: } else if ((sx != ex) || (sy != ey)) {
514: fprintf(gpoutfile, "draw (%da,%db)--(%da,%db);\n",
515: sx, sy, ex, ey);
516: } /* else: arrow with no length and no head = sound of one hand clapping? */
517: MP_posx = ex;
518: MP_posy = ey;
519:
520: }
521:
522: TERM_PUBLIC void
523: MP_put_text(x, y, str)
524: unsigned int x, y;
525: char str[];
526: {
527: int i, j = 0;
528: char *text;
529:
530: /* ignore empty strings */
531: if (!str || !*str)
532: return;
533:
534: /* F***. why do drivers need to modify string args? */
535: text = gp_alloc(strlen(str)+1, "temp string");
536: strcpy(text,str);
537:
538: if (MP_inline)
539: MP_endline();
540:
541:
542: switch (MP_justify) {
543: case LEFT:
544: j = 1;
545: break;
546: case CENTRE:
547: j = 2;
548: break;
549: case RIGHT:
550: j = 3;
551: break;
552: }
553: if (MP_notex) {
554: for (i = 0; i < strlen(text); i++)
555: if (text[i] == '"')
556: text[i] = '\''; /* Replace " with ' */
557: if (MP_fontchanged) {
558: fprintf(gpoutfile, "\
559: put_text(\"%s\" infontsize(\"%s\",%5.2f), %da, %db, %d, %d);\n",
560: text, MP_fontname, MP_fontsize, x, y, MP_ang, j);
561: } else {
562: fprintf(gpoutfile, "put_text(\"%s\", %da, %db, %d, %d);\n",
563: text, x, y, MP_ang, j);
564: }
565: } else if (MP_fontchanged) {
566: fprintf(gpoutfile, "\
567: put_text( btex \\setfont{%s}{%5.2f} %s etex, %da, %db, %d, %d);\n",
568: MP_fontname, MP_fontsize, text, x, y, MP_ang, j);
569: } else {
570: fprintf(gpoutfile, "put_text( btex %s etex, %da, %db, %d, %d);\n",
571: text, x, y, MP_ang, j);
572: }
573:
574: free(text);
575: }
576:
577: TERM_PUBLIC int
578: MP_justify_text(mode)
579: enum JUSTIFY mode;
580: {
581: MP_justify = mode;
582: return (TRUE);
583: }
584:
585: TERM_PUBLIC int
586: MP_text_angle(ang)
587: int ang;
588: {
589: /* Metapost code does the conversion */
590: MP_ang = ang;
591: return (TRUE);
592: }
593:
594: TERM_PUBLIC int
595: MP_set_font(font)
596: char *font;
597: {
598: if (*font) {
599: size_t sep = strcspn(font, ",");
600: strncpy(MP_fontname, font, sep);
601: MP_fontname[sep] = NUL;
602: sscanf(&(font[sep + 1]), "%lf", &MP_fontsize);
603: if (MP_fontsize < 5)
604: MP_fontsize = 5.0;
605: if (MP_fontsize >= 100)
606: MP_fontsize = 99.99;
607: /* */
608: MP_fontchanged = TRUE;
609: } else {
610: MP_fontchanged = FALSE;
611: }
612: return TRUE;
613: }
614:
615:
616: TERM_PUBLIC void
617: MP_reset()
618: {
619: fputs("end.\n", gpoutfile);
620: }
621:
622: TERM_PUBLIC void
623: MP_boxfill(sty, x1, y1, wd, ht)
624: int sty;
625: unsigned int x1, y1, wd, ht;
626: {
627: /* for now simply clear box if sty <= 0, do nothing otherwise */
628: if (MP_inline)
629: MP_endline();
630: if (sty <= 0)
631: fprintf(gpoutfile, "\
632: fill (%da,%db)--(%da,%db)--(%da,%db)--(%da,%db)--cycle withcolor background;\n",
633: x1, y1, x1 + wd, y1, x1 + wd, y1 + ht, x1, y1 + ht);
634: }
635:
636: #endif /* TERM_BODY */
637:
638: #ifdef TERM_TABLE
639:
640: TERM_TABLE_START(mp_driver)
641: "mp", "MetaPost plotting standard",
642: MP_XMAX, MP_YMAX, MP_VCHAR, MP_HCHAR,
643: MP_VTIC, MP_HTIC, MP_options, MP_init, MP_reset,
644: MP_text, null_scale, MP_graphics, MP_move, MP_vector,
645: MP_linetype, MP_put_text, MP_text_angle,
646: MP_justify_text, MP_point, MP_arrow, MP_set_font, MP_pointsize,
647: 0, 0, 0, MP_boxfill, MP_linewidth
648: TERM_TABLE_END(mp_driver)
649: #undef LAST_TERM
650: #define LAST_TERM mp_driver
651:
652: #endif /* TERM_TABLE */
653: #endif /* TERM_PROTO_ONLY */
654:
655: #ifdef TERM_HELP
656: START_HELP(mp)
657: "1 mp",
658: "?commands set terminal mpost",
659: "?set terminal mp",
660: "?set term mp",
661: "?terminal mp",
662: "?term mp",
663: "?mp",
664: "?metapost",
665: "",
666: " The `mp` driver produces output intended to be input to the Metapost program.",
667: " Running Metapost on the file creates EPS files containing the plots. By",
668: " default, Metapost passes all text through TeX. This has the advantage of",
669: " allowing essentially any TeX symbols in titles and labels.",
670: "",
671: " The `mp` terminal is selected with a command of the form",
672: " set term mp {color} {solid} {notex} {mag <magsize>} {\"<name>\"} {<size>}",
673: " The option `color` causes lines to be drawn in color (on a printer or display",
674: " that supports it), `monochrome` (or nothing) selects black lines. The option",
675: " `solid` draws solid lines, while `dashed` (or nothing) selects lines with",
676: " different patterns of dashes. If `solid` is selected but `color` is not,",
677: " nearly all lines will be identical. This may occasionally be useful, so it is",
678: " allowed.",
679: "",
680: " The option `notex` bypasses TeX entirely, therefore no TeX code can be used in",
681: " labels under this option. This is intended for use on old plot files or files",
682: " that make frequent use of common characters like `$` and `%` that require",
683: " special handling in TeX.",
684: "",
685: " Changing font sizes in TeX has no effect on the size of mathematics, and there",
686: " is no foolproof way to make such a change, except by globally setting a",
687: " magnification factor. This is the purpose of the `magnification` option. It",
688: " must be followed by a scaling factor. All text (NOT the graphs) will be scaled",
689: " by this factor. Use this if you have math that you want at some size other",
690: " than the default 10pt. Unfortunately, all math will be the same size, but see",
691: " the discussion below on editing the MP output. `mag` will also work under",
692: " `notex` but there seems no point in using it as the font size option (below)",
693: " works as well.",
694: "",
695: " A name in quotes selects the font that will be used when no explicit font is",
696: " given in a `set label` or `set title`. A name recognized by TeX (a TFM file",
697: " exists) must be used. The default is \"cmr10\" unless `notex` is selected,",
698: " then it is \"pcrr8r\" (Courier). Even under `notex`, a TFM file is needed by",
699: " Metapost. The file `pcrr8r.tfm` is the name given to Courier in LaTeX's psnfss",
700: " package. If you change the font from the `notex` default, choose a font that",
701: " matches the ASCII encoding at least in the range 32-126. `cmtt10` almost",
702: " works, but it has a nonblank character in position 32 (space).",
703: "",
704: " The size can be any number between 5.0 and 99.99. If it is omitted, 10.0 is",
705: " used. It is advisable to use `magstep` sizes: 10 times an integer or",
706: " half-integer power of 1.2, rounded to two decimals, because those are the most",
707: " available sizes of fonts in TeX systems.",
708: "",
709: " All the options are optional. If font information is given, it must be at the",
710: " end, with size (if present) last. The size is needed to select a size for the",
711: " font, even if the font name includes size information. For example,",
712: " `set term mp \"cmtt12\"` selects cmtt12 shrunk to the default size 10. This",
713: " is probably not what you want or you would have used cmtt10.",
714: "",
715: " The following common ascii characters need special treatment in TeX:",
716: " $, &, #, %, _; |, <, >; ^, ~, \\, {, and }",
717: " The five characters $, #, &, _, and % can simply be escaped, e.g., `\\$`.",
718: " The three characters <, >, and | can be wrapped in math mode, e.g., `$<$`.",
719: " The remainder require some TeX work-arounds. Any good book on TeX will give",
720: " some guidance.",
721: "",
722: " If you type your labels inside double quotes, backslashes in TeX code need to",
723: " be escaped (doubled). Using single quotes will avoid having to do this, but",
724: " then you cannot use `\\n` for line breaks. As of this writing, version 3.7 of",
725: " gnuplot processess titles given in a `plot` command differently than in other",
726: " places, and backslashes in TeX commands need to be doubled regardless of the",
727: " style of quotes.",
728: "",
729: " Metapost pictures are typically used in TeX documents. Metapost deals with",
730: " fonts pretty much the same way TeX does, which is different from most other",
731: " document preparation programs. If the picture is included in a LaTeX document",
732: " using the graphics package, or in a plainTeX document via epsf.tex, and then",
733: " converted to PostScript with dvips (or other dvi-to-ps converter), the text in",
734: " the plot will usually be handled correctly. However, the text may not appear",
735: " if you send the Metapost output as-is to a PostScript interpreter.",
736: "",
737: "2 Metapost Instructions",
738: "?commands set terminal mp detailed",
739: "?set terminal mp detailed",
740: "?set term mp detailed",
741: "?mp detailed",
742: "?metapost detailed",
743: "",
744: " - Set your terminal to Metapost, e.g.:",
745: " set terminal mp mono \"cmtt12\" 12",
746: "",
747: " - Select an output-file, e.g.:",
748: " set output \"figure.mp\"",
749: "",
750: " - Create your pictures. Each plot (or multiplot group) will generate a",
751: " separate Metapost beginfig...endfig group. Its default size will be 5 by 3",
752: " inches. You can change the size by saying `set size 0.5,0.5` or whatever",
753: " fraction of the default size you want to have.",
754: "",
755: " - Quit gnuplot.",
756: "",
757: " - Generate EPS files by running Metapost on the output of gnuplot:",
758: " mpost figure.mp OR mp figure.mp",
759: " The name of the Metapost program depends on the system, typically `mpost` for",
760: " a Unix machine and `mp` on many others. Metapost will generate one EPS file",
761: " for each picture.",
762: "",
763: " - To include your pictures in your document you can use the graphics package",
764: " in LaTeX or epsf.tex in plainTeX:",
765: " \\usepackage{graphics} % LaTeX",
766: " \\input epsf.tex % plainTeX",
767: " If you use a driver other than dvips for converting TeX DVI output to PS, you",
768: " may need to add the following line in your LaTeX document:",
769: " \\DeclareGraphicsRule{*}{eps}{*}{}",
770: " Each picture you made is in a separate file. The first picture is in, e.g.,",
771: " figure.0, the second in figure.1, and so on.... To place the third picture in",
772: " your document, for example, all you have to do is:",
773: " \\includegraphics{figure.2} % LaTeX",
774: " \\epsfbox{figure.2} % plainTeX",
775: "",
776: " The advantage, if any, of the mp terminal over a postscript terminal is",
777: " editable output. Considerable effort went into making this output as clean as",
778: " possible. For those knowledgeable in the Metapost language, the default line",
779: " types and colors can be changed by editing the arrays `lt[]` and `col[]`.",
780: " The choice of solid vs dashed lines, and color vs black lines can be change by",
781: " changing the values assigned to the booleans `dashedlines` and `colorlines`.",
782: " If the default `tex` option was in effect, global changes to the text of",
783: " labels can be achieved by editing the `vebatimtex...etex` block. In",
784: " particular, a LaTeX preamble can be added if desired, and then LaTeX's",
785: " built-in size changing commands can be used for maximum flexibility. Be sure",
786: " to set the appropriate MP configuration variable to force Metapost to run",
787: " LaTeX instead of plainTeX."
788: END_HELP(mp)
789: #endif /* TERM_HELP */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>