1 /* Hello, Emacs, this is -*-C-*-
2 * $Id: tpic.trm,v 1.21 2006/07/21 02:35:48 sfeam Exp $
5 /* GNUPLOT - tpic.trm */
8 * Copyright 1990 - 1993, 1998, 2004
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.
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,
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
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.
33 * This software is provided "as is" without express or implied warranty
34 * to the extent permitted by applicable law.
38 * This file is included by ../term.c.
40 * This terminal driver supports:
41 * The tpic \specials (version 2.2) for LaTeX.
44 * Oh-Yeah? 3 Sep. 1992 (closely following eepic.trm by David Kotz)
45 * A. Woo 5 Oct. 1992 (removed ansi prototypes for braindead compilers)
47 * send your comments or suggestions to (gnuplot-info@lists.sourceforge.net).
51 * This file contains the tpic terminal driver for use with LaTeX.
52 * This is an alternative to the latex and eepic drivers. You need
53 * a printer driver that supports the tpic \specials version 2.2.
55 * Comparison with the eepic driver (eepic.trm):
57 * - More point and line types
58 * - Options to change point size, linewidth, dot & dash intervals
59 * - Dotted and dashed lines for high-sample-rate curves (but may
60 * depend on tpic (da & dt) implementation of your dvi driver :-)
61 * - Overlapped points made fancier by tpic shading facility
62 * - Optional comments for trimming figure margins
63 * - No need for epic and eepic macros
65 * - You cannot use eepicemu macro for non-tpic-support dvi drivers
67 * LATEX must also be defined.
71 /* These parameters can be modified as you like, through options. Say
72 "set terminal tpic <pointsize> <linewidth> <interval>". <pointsize>
73 and <linewidth> are integers in milli-inches; <interval> is a float
74 in inches. If non-positive value is specified, the default (below)
79 * adapted to the new terminal layout by Stefan Bodewig (Dec. 1995)
89 TERM_PUBLIC void TPIC_options __PROTO((void)); /* get size options */
90 TERM_PUBLIC void TPIC_init __PROTO((void));
91 TERM_PUBLIC void TPIC_reset __PROTO((void));
92 TERM_PUBLIC void TPIC_text __PROTO((void));
93 TERM_PUBLIC void TPIC_graphics __PROTO((void));
94 TERM_PUBLIC void TPIC_move __PROTO((unsigned int x, unsigned int y));
95 TERM_PUBLIC void TPIC_vector __PROTO((unsigned int ux, unsigned int uy));
96 TERM_PUBLIC void TPIC_linetype __PROTO((int linetype));
97 TERM_PUBLIC void TPIC_put_text __PROTO((unsigned int x, unsigned int y, const char *str)); /* ref point and text */
98 TERM_PUBLIC int TPIC_text_angle __PROTO((int ang));
99 TERM_PUBLIC int TPIC_justify_text __PROTO((enum JUSTIFY mode));
100 TERM_PUBLIC void TPIC_point __PROTO((unsigned int x, unsigned int y, int number));
101 TERM_PUBLIC void TPIC_arrow __PROTO((unsigned int sx, unsigned int sy, unsigned int ex, unsigned int ey, int head));
103 /* tpic \specials unit in inches (1 milli-inch) */
104 #define TPIC_UNIT 0.001
106 /* 5 inches wide by 3 inches high (default) */
107 #define TPIC_XMAX (unsigned int) (5 / TPIC_UNIT)
108 #define TPIC_YMAX (unsigned int) (3 / TPIC_UNIT)
109 #define TPIC_PTS_PER_UNIT (72.27 * TPIC_UNIT)
110 #define TPIC_HTIC (unsigned int) ( 5.0 / TPIC_PTS_PER_UNIT) /* 5pt */
111 #define TPIC_VTIC (unsigned int) ( 5.0 / TPIC_PTS_PER_UNIT) /* 5pt */
112 #define TPIC_HCHAR (unsigned int) ( 5.3 / TPIC_PTS_PER_UNIT) /* 5.3pt */
113 #define TPIC_VCHAR (unsigned int) (11.0 / TPIC_PTS_PER_UNIT) /* 11pt */
114 #endif /* TERM_PROTO */
116 #ifndef TERM_PROTO_ONLY
118 static int tpic_pointsize = 40; /* min point radius (in milli-inches) */
119 static int tpic_linewidth = 6; /* min line thickness (in milli-inches) */
120 static double tpic_interval = 0.1; /* min dot & dash intervals (in inches) */
122 /* ARROWS: same code as for LATEX */
123 /* figure out the best arrow. in latex.trm */
124 static void best_latex_arrow __PROTO((int sx, int sy, int ex, int ey, int who, int head));
126 /* all prototypes ... */
127 static void tpic_startline __PROTO((void));
128 static void tpic_endline __PROTO((void));
129 static void tpic_pushpath __PROTO((unsigned int x, unsigned int y));
130 static void tpic_scanpath __PROTO((void));
131 static void tpic_diamond __PROTO((int size));
132 static void tpic_plus __PROTO((int size));
133 static void tpic_box __PROTO((int size));
134 static void tpic_times __PROTO((int size));
135 static void tpic_triangle __PROTO((int size));
136 static void tpic_star __PROTO((int size));
137 static void tpic_hexagon __PROTO((int size));
138 static void tpic_circle __PROTO((int size));
139 static void tpic_doublecircle __PROTO((int size));
140 static void tpic_vercircle __PROTO((int size)); /* circle with | */
141 static void tpic_horcircle __PROTO((int size)); /* circle with - */
142 static void tpic_pluscircle __PROTO((int size)); /* circle with + */
143 static void tpic_timescircle __PROTO((int size)); /* circle with times */
144 static void tpic_starcircle __PROTO((int size)); /* circle with star */
145 static void tpic_dotcircle __PROTO((int size)); /* circle with dot (black circle) */
146 static void tpic_diamondcircle __PROTO((int size)); /* circle with black diamond */
147 static void tpic_boxcircle __PROTO((int size)); /* circle with black box */
148 static void tpic_trianglecircle __PROTO((int size)); /* circle with black triangle */
149 static void tpic_hexagoncircle __PROTO((int size)); /* circle with black hexagon */
150 static void tpic_plustimescircle __PROTO((int size)); /* no more idea ... with plus & times */
151 static void tpic_abspath __PROTO((unsigned int x, unsigned int y)); /* absolute coord */
152 static void tpic_path __PROTO((int x, int y));
153 static void tpic_flush __PROTO((void));
154 static void tpic_arc __PROTO((int radius)); /* actually, draw a full circle */
155 static void tpic_shade __PROTO((double grayscale));
156 static void tpic_pen __PROTO((int thickness));
157 static void tpic_dottedflush __PROTO((double interval));
158 static void tpic_dashedflush __PROTO((double interval));
161 tpic_none, tpic_white, tpic_gray, tpic_black
164 tpic_nosize, tpic_small, tpic_medium, tpic_large
166 typedef void (*tpic_function) __PROTO((int size));
169 tpic_shadestyle shadestyle;
171 tpic_function function;
175 static /*GPFAR */ tpic_point_info GPFAR tpic_point[] =
177 {tpic_white, tpic_medium, tpic_diamond},
178 {tpic_none, tpic_medium, tpic_plus},
179 {tpic_white, tpic_medium, tpic_box},
180 {tpic_none, tpic_medium, tpic_times},
181 {tpic_white, tpic_medium, tpic_triangle},
182 {tpic_none, tpic_medium, tpic_star},
183 {tpic_white, tpic_small, tpic_circle},
184 {tpic_white, tpic_medium, tpic_circle},
185 {tpic_white, tpic_large, tpic_circle},
186 {tpic_black, tpic_small, tpic_circle},
187 {tpic_black, tpic_medium, tpic_circle},
188 {tpic_black, tpic_large, tpic_circle},
189 {tpic_black, tpic_medium, tpic_diamond},
190 {tpic_black, tpic_medium, tpic_box},
191 {tpic_black, tpic_medium, tpic_triangle},
192 {tpic_white, tpic_medium, tpic_hexagon},
193 {tpic_black, tpic_medium, tpic_hexagon},
194 {tpic_white, tpic_medium, tpic_doublecircle},
195 {tpic_white, tpic_medium, tpic_vercircle},
196 {tpic_white, tpic_medium, tpic_horcircle},
197 {tpic_white, tpic_medium, tpic_pluscircle},
198 {tpic_white, tpic_medium, tpic_timescircle},
199 {tpic_white, tpic_medium, tpic_starcircle},
200 {tpic_black, tpic_medium, tpic_doublecircle},
201 {tpic_white, tpic_medium, tpic_dotcircle},
202 {tpic_white, tpic_medium, tpic_diamondcircle},
203 {tpic_white, tpic_medium, tpic_boxcircle},
204 {tpic_white, tpic_medium, tpic_trianglecircle},
205 {tpic_white, tpic_medium, tpic_hexagoncircle},
206 {tpic_white, tpic_medium, tpic_plustimescircle}
210 tpic_solid, tpic_dotted, tpic_dashed,
211 tpic_dashed_sdot, tpic_dashed_ddot
214 tpic_size thickness, interval;
215 tpic_linestyle linestyle;
219 static /*GPFAR */ tpic_line_info GPFAR tpic_line[] =
221 {tpic_medium, tpic_nosize, tpic_solid}, /* -2 border */
222 {tpic_small, tpic_small, tpic_dashed}, /* -1 axes */
223 {tpic_small, tpic_nosize, tpic_solid},
224 {tpic_medium, tpic_nosize, tpic_solid},
225 {tpic_large, tpic_nosize, tpic_solid},
226 {tpic_small, tpic_small, tpic_dotted},
227 {tpic_medium, tpic_small, tpic_dotted},
228 {tpic_large, tpic_small, tpic_dotted},
229 {tpic_small, tpic_small, tpic_dashed},
230 {tpic_medium, tpic_small, tpic_dashed},
231 {tpic_large, tpic_small, tpic_dashed},
232 {tpic_small, tpic_small, tpic_dashed_sdot}, /* dash with single dots */
233 {tpic_medium, tpic_small, tpic_dashed_sdot},
234 {tpic_large, tpic_small, tpic_dashed_sdot},
235 {tpic_small, tpic_small, tpic_dashed_ddot}, /* dash with double dots */
236 {tpic_medium, tpic_small, tpic_dashed_ddot},
237 {tpic_large, tpic_small, tpic_dashed_ddot},
238 {tpic_small, tpic_medium, tpic_dotted},
239 {tpic_medium, tpic_medium, tpic_dotted},
240 {tpic_large, tpic_medium, tpic_dotted},
241 {tpic_small, tpic_medium, tpic_dashed},
242 {tpic_medium, tpic_medium, tpic_dashed},
243 {tpic_large, tpic_medium, tpic_dashed},
244 {tpic_small, tpic_medium, tpic_dashed_sdot},
245 {tpic_medium, tpic_medium, tpic_dashed_sdot},
246 {tpic_large, tpic_medium, tpic_dashed_sdot},
247 {tpic_small, tpic_medium, tpic_dashed_ddot},
248 {tpic_medium, tpic_medium, tpic_dashed_ddot},
249 {tpic_large, tpic_medium, tpic_dashed_ddot},
250 {tpic_small, tpic_large, tpic_dotted},
251 {tpic_medium, tpic_large, tpic_dotted},
252 {tpic_large, tpic_large, tpic_dotted},
253 {tpic_small, tpic_large, tpic_dashed},
254 {tpic_medium, tpic_large, tpic_dashed},
255 {tpic_large, tpic_large, tpic_dashed},
256 {tpic_small, tpic_large, tpic_dashed_sdot},
257 {tpic_medium, tpic_large, tpic_dashed_sdot},
258 {tpic_large, tpic_large, tpic_dashed_sdot},
259 {tpic_small, tpic_large, tpic_dashed_ddot},
260 {tpic_medium, tpic_large, tpic_dashed_ddot},
261 {tpic_large, tpic_large, tpic_dashed_ddot}
266 { /* get size options */
268 int ptsize, linewidth;
271 if (!END_OF_COMMAND) {
272 ptsize = (int) real(const_express(&a));
274 tpic_pointsize = ptsize;
276 if (!END_OF_COMMAND) {
277 linewidth = (int) real(const_express(&a));
279 tpic_linewidth = linewidth;
281 if (!END_OF_COMMAND) {
282 interval = (double) real(const_express(&a));
284 tpic_interval = interval;
286 sprintf(term_options, "%d %d %f", tpic_pointsize, tpic_linewidth,
290 static unsigned int tpic_posx; /* current position */
291 static unsigned int tpic_posy;
292 static int tpic_point_types;
293 static int tpic_numlines;
298 static char GPFAR tpic1[] = "\
299 %% GNUPLOT: LaTeX picture using tpic \\specials\n\
300 %% with %d point types and %d line types\n\
301 %% Options: pointsize = %d, linewidth = %d, interval = %f\n\
302 %% To change above options, say:\n\
303 %% set terminal tpic pointsize_value linewidth_value interval_value\n\
304 %% (pointsize and linewidth - integers in milli-inches.\n\
305 %% interval - a float in inches. If zero is specified, \n\
306 %% the default value is chosen.)\n\
307 \\setlength{\\unitlength}{%fin}%%\n";
308 tpic_point_types = sizeof(tpic_point) / sizeof(tpic_point[0]);
309 tpic_numlines = sizeof(tpic_line) / sizeof(tpic_line[0]);
311 tpic_posx = tpic_posy = 0;
313 fprintf(gpoutfile, tpic1,
314 tpic_point_types, tpic_numlines - 2,
315 tpic_pointsize, tpic_linewidth, tpic_interval,
323 tpic_posx = tpic_posy = 0;
330 fputs("\\end{picture}\n", gpoutfile);
336 register struct termentry *t = term;
337 int left, right, top, bottom; /* margins */
338 static char GPFAR begin[] = "%s\\begin{picture}(%d,%d)(%d,%d)%% %s\n";
340 fprintf(gpoutfile, begin, "", t->xmax, t->ymax, 0, 0, "");
342 /* the following is dependent on boundary() function in graphics.c */
343 left = TPIC_HCHAR * 12;
344 right = TPIC_HCHAR * 2 + TPIC_HTIC;
345 bottom = TPIC_VCHAR * 7 / 2 + 1;
346 top = TPIC_VCHAR * 5 / 2 - 1;
347 fprintf(gpoutfile, begin, "%% ", t->xmax - left, t->ymax, left, 0,
349 fprintf(gpoutfile, begin, "%% ", t->xmax - right, t->ymax, 0, 0,
350 "trim right margin");
351 fprintf(gpoutfile, begin, "%% ", t->xmax - left - right, t->ymax, left, 0,
352 "trim left & right margins");
353 fprintf(gpoutfile, begin, "%% ", t->xmax, t->ymax - top, 0, 0,
355 fprintf(gpoutfile, begin, "%% ", t->xmax, t->ymax - bottom, 0, bottom,
356 "trim bottom margin");
357 fprintf(gpoutfile, begin, "%% ", t->xmax, t->ymax - top - bottom, 0, bottom,
358 "trim top & bottom margins");
360 fputs("\\footnotesize%\n", gpoutfile);
364 TPIC_move(unsigned int x, unsigned int y)
371 #define TPIC_LINEMAX 100 /* max value for linecount */
372 static TBOOLEAN tpic_inline = FALSE; /* are we in the middle of a line */
373 static int tpic_linecount = 0; /* number of points in line so far */
376 TPIC_vector(unsigned int ux, unsigned int uy)
380 } else if (tpic_linecount >= TPIC_LINEMAX) {
381 /* Even though we are in middle of a path, we may start a new path
382 command once in a while; if they are too long, latex will choke. */
386 tpic_pushpath(ux, uy);
391 static int tpic_linetype; /* current line type */
399 switch (tpic_line[tpic_linetype + 2].thickness) {
401 thickness = tpic_linewidth;
404 thickness = (int) (tpic_linewidth * 3);
407 thickness = (int) (tpic_linewidth * 5);
414 tpic_pushpath(tpic_posx, tpic_posy);
424 tpic_scanpath(); /* draw actually */
425 switch (tpic_line[tpic_linetype + 2].interval) {
427 interval = tpic_interval;
430 interval = tpic_interval * 2;
433 interval = tpic_interval * 3;
438 switch (tpic_line[tpic_linetype + 2].linestyle) {
443 tpic_dottedflush(interval);
446 tpic_dashedflush(interval);
448 case tpic_dashed_sdot: /* dashed with single dots in between */
449 tpic_dashedflush(interval);
450 tpic_scanpath(); /* draw again */
451 tpic_dottedflush(interval / 2);
453 case tpic_dashed_ddot: /* dashed with double dots in between */
454 tpic_dashedflush(interval);
455 tpic_scanpath(); /* draw again */
456 tpic_dottedflush(interval / 3);
464 /* private: stack functions */
465 static unsigned int pathpoint[TPIC_LINEMAX][2]; /* point stack */
468 tpic_pushpath(unsigned int x, unsigned int y)
470 if (tpic_linecount < TPIC_LINEMAX) {
471 pathpoint[tpic_linecount][0] = x;
472 pathpoint[tpic_linecount][1] = y;
483 for (i = 0; i < tpic_linecount; i++)
484 tpic_abspath(pathpoint[i][0], pathpoint[i][1]);
489 TPIC_linetype(int linetype)
494 if (linetype >= tpic_numlines - 2)
495 linetype %= (tpic_numlines - 2);
496 tpic_linetype = linetype;
499 static int tpic_angle = 0; /* 0 = horizontal, 1 = vertical */
500 static enum JUSTIFY tpic_justify = LEFT;
503 TPIC_put_text(unsigned int x, unsigned int y, const char *str)
505 char *justify = NULL;
508 fprintf(gpoutfile, "\\put(%d,%d)", x, y);
510 if ((str[0] == '{') || (str[0] == '[')) {
511 fprintf(gpoutfile, "{\\makebox(0,0)%s}\n", str);
513 switch (tpic_angle) {
514 case 0: /* horizontal */
515 switch (tpic_justify) {
526 fprintf(gpoutfile, "{\\makebox(0,0)%s{%s}}\n", justify, str);
528 case 1: /* vertical */
529 /* we can't really write text vertically, but will put the ylabel
530 centred at the left of the plot, and then we'll make a \shortstack */
531 switch (tpic_justify) {
542 fprintf(gpoutfile, "{\\makebox(0,0)%s{\\shortstack{%s}}}\n",
549 TPIC_text_angle(int ang)
551 tpic_angle = (ang ? 1 : 0);
556 TPIC_justify_text(enum JUSTIFY mode)
563 TPIC_point(unsigned int x, unsigned int y, int number)
569 /* Print the character defined by 'number'; number < 0 means
570 to use a dot, otherwise one of the defined points. */
572 fprintf(gpoutfile, "\\put(%d,%d){", x, y); /* start putting */
575 fputs("\\rule{.1pt}{.1pt}", gpoutfile); /* tiny dot */
577 number %= tpic_point_types;
578 switch (tpic_point[number].shadestyle) {
580 tpic_pen(tpic_linewidth); /* set it thin */
584 tpic_pen(tpic_linewidth);
588 tpic_pen(tpic_linewidth);
592 tpic_pen(tpic_linewidth * 3); /* set it thick */
595 switch (tpic_point[number].size) {
597 size = tpic_pointsize;
600 size = (int) (tpic_pointsize * 1.4142);
603 size = (int) (tpic_pointsize * 2.0);
608 (tpic_point[number].function) (size);
611 fputs("}%%\n", gpoutfile); /* end putting */
616 unsigned int sx, unsigned int sy,
617 unsigned int ex, unsigned int ey,
620 best_latex_arrow(sx, sy, ex, ey, 1, head); /* call latex routine */
625 /* private: draw points with tpic commands */
628 tpic_diamond(int size)
630 size = (int) (size * 1.4142); /* spread by sqrt(2) */
656 tpic_path(size, size);
657 tpic_path(-size, size);
658 tpic_path(-size, -size);
659 tpic_path(size, -size);
660 tpic_path(size, size);
668 size = (int) (size / 1.4142); /* reduce by sqrt(2) */
670 tpic_path(size, size);
671 tpic_path(-size, -size);
673 tpic_path(size, -size);
674 tpic_path(-size, size);
680 tpic_triangle(int size)
684 size = (int) (size / 1.6119); /* reduce by sqrt(3 * sqrt(3) / 2) */
685 x = (int) (size * 1.7321);
687 tpic_path(0, -size * 2);
690 tpic_path(0, -size * 2);
700 size = (int) (size / 2); /* reduce by 2 */
701 x = (int) (size * 1.7321);
703 tpic_path(0, size * 2);
704 tpic_path(0, -size * 2);
707 tpic_path(-x, -size);
716 tpic_hexagon(int size)
720 size = (int) (size / 2); /* reduce by 2 */
721 x = (int) (size * 1.7321);
723 tpic_path(0, size * 2);
725 tpic_path(-x, -size);
726 tpic_path(0, -size * 2);
729 tpic_path(0, size * 2);
735 tpic_circle(int size)
742 tpic_doublecircle(int size)
751 tpic_vercircle(int size) /* circle with | */
761 tpic_horcircle(int size) /* circle with - */
771 tpic_pluscircle(int size) /* circle with + */
779 tpic_timescircle(int size) /* circle with times */
787 tpic_starcircle(int size) /* circle with star */
795 tpic_dotcircle(int size) /* circle with dot (black circle) */
804 tpic_diamondcircle(int size) /* not enough? circle with black diamond */
808 tpic_diamond((int) (size / 1.5));
813 tpic_boxcircle(int size) /* need more? circle with black box */
817 tpic_box((int) (size / 1.5));
822 tpic_trianglecircle(int size) /* circle with black triangle */
826 tpic_triangle((int) (size / 1.5));
831 tpic_hexagoncircle(int size) /* how about circle with black hexagon? */
835 tpic_hexagon((int) (size / 1.2));
840 tpic_plustimescircle(int size) /* no more idea ... with plus & times */
848 /* private: draw lines */
851 tpic_abspath(unsigned int x, unsigned int y)
854 fputs("%\n", gpoutfile);
858 /* private: tpic primitive functions */
861 tpic_path(int x, int y)
863 fprintf(gpoutfile, "\\special{pa %d %d}", x, y);
870 fputs("\\special{fp}%\n", gpoutfile);
877 /* actually, draw a full circle */
878 fprintf(gpoutfile, "\\special{ar 0 0 %d %d 0 7}", radius, radius);
883 tpic_shade(double grayscale)
885 fprintf(gpoutfile, "\\special{sh %f}", grayscale);
890 tpic_pen(int thickness)
892 fprintf(gpoutfile, "\\special{pn %d}", thickness);
897 tpic_dottedflush(double interval)
899 fprintf(gpoutfile, "\\special{dt %f}%%\n", interval);
904 tpic_dashedflush(double interval)
906 fprintf(gpoutfile, "\\special{da %f}%%\n", interval);
910 #endif /* TERM_BODY */
914 TERM_TABLE_START(tpic_driver)
915 "tpic", "TPIC -- LaTeX picture environment with tpic \\specials",
916 TPIC_XMAX, TPIC_YMAX, TPIC_VCHAR, TPIC_HCHAR,
917 TPIC_VTIC, TPIC_HTIC, TPIC_options, TPIC_init, TPIC_reset,
918 TPIC_text, null_scale, TPIC_graphics, TPIC_move, TPIC_vector,
919 TPIC_linetype, TPIC_put_text, TPIC_text_angle,
920 TPIC_justify_text, TPIC_point, TPIC_arrow, set_font_null
921 TERM_TABLE_END(tpic_driver)
924 #define LAST_TERM tpic_driver
926 #endif /* TERM_TABLE */
927 #endif /* TERM_PROTO_ONLY */
932 "?commands set terminal tpic",
933 "?set terminal tpic",
938 " The `tpic` terminal driver supports the LaTeX picture environment with tpic",
939 " \\specials. It is an alternative to the `latex` and `eepic` terminal drivers.",
940 " Options are the point size, line width, and dot-dash interval.",
943 " set terminal tpic <pointsize> <linewidth> <interval>",
945 " where `pointsize` and `linewidth` are integers in milli-inches and `interval`",
946 " is a float in inches. If a non-positive value is specified, the default is",
947 " chosen: pointsize = 40, linewidth = 6, interval = 0.1.",
949 " All drivers for LaTeX offer a special way of controlling text positioning:",
950 " If any text string begins with '{', you also need to include a '}' at the",
951 " end of the text, and the whole text will be centered both horizontally",
952 " and vertically by LaTeX. --- If the text string begins with '[', you need",
953 " to continue it with: a position specification (up to two out of t,b,l,r),",
954 " ']{', the text itself, and finally, '}'. The text itself may be anything",
955 " LaTeX can typeset as an LR-box. \\rule{}{}'s may help for best positioning.",
958 " About label positioning:",
959 " Use gnuplot defaults (mostly sensible, but sometimes not really best):",
960 " set title '\\LaTeX\\ -- $ \\gamma $'",
961 " Force centering both horizontally and vertically:",
962 " set label '{\\LaTeX\\ -- $ \\gamma $}' at 0,0",
963 " Specify own positioning (top here):",
964 " set xlabel '[t]{\\LaTeX\\ -- $ \\gamma $}'",
965 " The other label -- account for long ticlabels:",
966 " set ylabel '[r]{\\LaTeX\\ -- $ \\gamma $\\rule{7mm}{0pt}}'"
968 #endif /* TERM_TABLE */