[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: gset replacement
From: |
John W. Eaton |
Subject: |
Re: gset replacement |
Date: |
Mon, 7 Nov 2005 12:59:23 -0500 |
On 6-Nov-2005, Dr. Richard Burke wrote:
| Perhaps I'm misunderstanding something. I use gset to create graphics
| files of plots that I wish to imbed in other documents, such as Tex
| files. Is there another way to do this without using gset?
Use the print function. It is part of Octave 2.9.x and is now in the
CVS for the 2.1.x branch but was added after the 2.1.71 snapshot was
made. I'm attaching the two files you would need.
Please, post to the mailing list so the discussions will be archived.
Thanks,
jwe
## Copyright (C) 2001 Paul Kienzle
##
## This file is part of Octave.
##
## Octave is free software; you can redistribute it and/or modify it
## under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2, or (at your option)
## any later version.
##
## Octave is distributed in the hope that it will be useful, but
## WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
## General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with Octave; see the file COPYING. If not, write to the Free
## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
## 02110-1301, USA.
## -*- texinfo -*-
## @deftypefn {Function File} {} orient (@var{orientation})
## Set default print orientation. Valid values for @var{orientation}
## include @code{"landscape"} and @code{"portrait"}. If called with no
## arguments, return the default print orientation.
## @end deftypefn
## Author: Paul Kienzle
## Adapted-By: jwe
## PKG_ADD: mark_as_command orient
function retval = orient (orientation)
static __print_orientation__ = "landscape";
if (nargin == 0)
retval = __print_orientation__;
elseif (nargin == 1)
if (strcmp (orientation, "landscape") || strcmp (orientation, "portrait"))
__print_orientation__ = orientation;
else
error ("orient: unknown orientation");
endif
else
usage("orient ([\"portrait\"|\"landscape\"]) OR ret = orient ()");
endif
endfunction
%!assert(orient,"landscape") # default
%!test orient('portrait')
%!assert(orient,"portrait") # change to portrait
%!test orient('landscape')
%!assert(orient,"landscape") # change to landscape
%!fail("orient('nobody')","unknown orientation")
%!assert(orient,"landscape") # errors don't change the state
## Copyright (C) 1999 Daniel Heiserer
## Copyright (C) 2001 Laurent Mazet
##
## This file is part of Octave.
##
## Octave is free software; you can redistribute it and/or modify it
## under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2, or (at your option)
## any later version.
##
## Octave is distributed in the hope that it will be useful, but
## WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
## General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with Octave; see the file COPYING. If not, write to the Free
## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
## 02110-1301, USA.
## -*- texinfo -*-
## @deftypefn {Function File} {} print (@var{filename}, @var{options})
##
## Print a graph, or save it to a file
##
## @var{filename} defines the file name of the output file. If no
## filename is specified, output is sent to the printer.
##
## @var{options}:
## @table @code
## @item address@hidden
## Set the @var{printer} name to which the graph is sent if no
## @var{filename} is specified.
## @item -color
## @itemx -mono
## Monochrome or colour lines.
## @item -solid
## @itemx -dashed
## Solid or dashed lines.
## @item -portrait
## @itemx -landscape
## Plot orientation, as returned by "orient".
## @item address@hidden
## Output device, where @var{device} is one of:
## @table @code
## @item ps
## @itemx ps2
## @itemx psc
## @itemx psc2
## Postscript (level 1 and 2, mono and color)
## @item eps
## @itemx eps2
## @itemx epsc
## @itemx epsc2
## Encapsulated postscript (level 1 and 2, mono and color)
## @item ill
## @itemx aifm
## Adobe Illustrator
## @item cdr
## @itemx corel
## CorelDraw
## @item hpgl
## HP plotter language
## @item fig
## XFig
## @item dxf
## AutoCAD
## @item mf
## Metafont
## @item png
## Portable network graphics
## @item pbm
## PBMplus
## @end table
##
## Other devices are supported by "convert" from ImageMagick. Type
## system("convert") to see what formats are available.
##
## If the device is omitted, it is inferred from the file extension,
## or if there is no filename it is sent to the printer as postscript.
##
## @item address@hidden
## @itemx address@hidden:@var{size}
## @itemx -F:@var{size}
## @var{fontname} set the postscript font (for use with postscript,
## aifm, corel and fig). By default, 'Helvetica' is set for PS/Aifm,
## and 'SwitzerlandLight' for Corel. It can also be 'Times-Roman'.
## @var{size} is given in points. @var{fontname} is ignored for the
## fig device.
## @end table
##
## The filename and options can be given in any order.
##
## @strong{Note}, the print function does not work with gnuplot's
## muplitplot mode. This problem is a known bug, and it will be fixed
## in a future version of Octave, but there is no simple fix (or it
## would have been fixed long ago). You can work around the bug by
## setting the terminal type and output yourself, then executing the
## multiplot plotting commands. For example
##
## @example
## @group
## __gnuplot_set__ terminal postscript
## __gnuplot_set__ output "foo.ps"
## subplot (2, 1, 1);
## sombrero (21);
## subplot (2, 1, 2);
## sombrero (41);
## oneplot
## __gnuplot_set__ terminal x11
## __gnuplot_set__ output
## @end group
## @end example
##
## will save both figures on a single page in the PostScript file
## @file{foo.ps}.
## @end deftypefn
## Author: Daniel Heiserer <address@hidden>
## Adapted-By: jwe
## PKG_ADD: mark_as_command print
function print (varargin)
orientation = orient ();
use_color = 0; # 0=default, -1=mono, +1=color
force_solid = 0; # 0=default, -1=dashed, +1=solid
fontsize = "";
font = "";
name = "";
devopt = "";
printer = "";
for i = 1:nargin
arg = varargin{i};
if (isstr (arg))
if (strcmp (arg, "-color"))
use_color = 1;
elseif (strcmp (arg, "-mono"))
use_color = -1;
elseif (strcmp (arg, "-solid"))
force_solid = 1;
elseif (strcmp (arg, "-dashed"))
force_solid = -1;
elseif (strcmp (arg, "-portrait"))
orientation = "portrait";
elseif (strcmp (arg, "-landscape"))
orientation = "landscape";
elseif (length (arg) > 2 && arg(1:2) == "-d")
devopt = arg(3:length(arg));
elseif (length (arg) > 2 && arg(1:2) == "-P")
printer = arg;
elseif (length (arg) > 2 && arg(1:2) == "-F")
idx = rindex(arg, ":");
if (idx)
font = arg(3:idx-1);
fontsize = arg(idx+1:length(arg));
else
font = arg(3:length(arg));
endif
elseif (length (arg) >= 1 && arg(1) == "-")
error ("print: unknown option `%s'", arg);
elseif (length (arg) > 0)
name = arg;
endif
else
error ("print: expects string options");
endif
endfor
doprint = isempty (name);
if (doprint)
if (isempty (devopt))
printname = strcat (tmpnam, ".ps");
else
printname = strcat (tmpnam, ".", devopt);
endif
name = printname;
endif
if (isempty (devopt))
dot = rindex (name, ".");
if (dot == 0)
error ("print: no format specified");
else
dev = tolower (name(dot+1:end));
endif
else
dev = devopt;
endif
if (strcmp (dev, "ill"))
dev = "aifm";
elseif (strcmp (dev, "cdr"))
dev = "corel";
endif
## check if we have to use convert
dev_list = {"aifm" "corel" "fig" "png" "pbm" "dxf" "mf" "hpgl", ...
"ps" "ps2" "psc" "psc2" "eps" "eps2" "epsc" "epsc2"};
convertname = "";
idx = cellidx (dev_list, dev);
if (! idx)
if (! isempty (devopt))
convertname = strcat (devopt, ":", name);
else
convertname = name;
endif
dev = "epsc";
name = strcat (tmpnam, ".eps");
endif
unwind_protect
if (strcmp (dev, "ps") || strcmp (dev, "ps2") ...
|| strcmp (dev, "psc") || strcmp (dev, "psc2")
|| strcmp (dev, "epsc") || strcmp (dev, "epsc2")
|| strcmp (dev, "eps") || strcmp (dev, "eps2"))
## Various postscript options
if (dev(1) == "e")
options = "eps ";
else
options = strcat (orientation, " ");
endif
options = strcat (options, "enhanced ");
if (any (dev == "c") || use_color > 0)
if (force_solid < 0)
options = strcat (options, "color dashed ");
else
options = strcat (options, "color solid ");
endif
else
if (force_solid > 0)
options = strcat (options, "mono solid ");
else
options = strcat (options, "mono dashed ");
endif
endif
if (! isempty (font))
options = strcat (options, "\"", font, "\" ");
endif
if (! isempty (fontsize))
options = strcat (options, " ", fontsize);
endif
__gnuplot_raw__ ("set terminal push;\n");
__gnuplot_raw__ (sprintf ("set terminal postscript %s;\n", options));
elseif (strcmp (dev, "aifm") || strcmp (dev, "corel"))
## Adobe Illustrator, CorelDraw
if (use_color >= 0)
options = " color";
else
options = " mono";
endif
if (! isempty (font))
options = strcat (options, " \"", font, "\"");
endif
if (! isempty (fontsize))
options = strcat (options, " ", fontsize);
endif
__gnuplot_raw__ ("set terminal push;\n");
__gnuplot_raw__ (sprintf ("set terminal %s %s;\n", dev, options));
elseif (strcmp (dev, "fig"))
## XFig
options = orientation;
if (use_color >= 0)
options = " color";
else
options = " mono";
endif
if (! isempty (fontsize))
options = strcat (options, " fontsize ", fontsize);
endif
__gnuplot_raw__ ("set terminal push;\n");
__gnuplot_raw__ (sprintf ("set terminal fig %s;\n", options));
elseif (strcmp (dev, "png") || strcmp (dev, "pbm"))
## Portable network graphics, PBMplus
## XXX FIXME XXX -- New PNG interface takes color as "xRRGGBB"
## where x is the literal character 'x' and 'RRGGBB' are the red,
## green and blue components in hex. For now we just ignore it
## and use default. The png terminal now is so rich with options,
## that one perhaps has to write a separate printpng.m function.
## DAS
## if (use_color >= 0)
## eval (sprintf ("__gnuplot_set__ term %s color medium", dev));
##else
##eval (sprintf ("__gnuplot_set__ term %s mono medium", dev));
##endif
__gnuplot_raw__ ("set terminal push;\n");
__gnuplot_raw__ ("set terminal png large;\n")
elseif (strcmp (dev, "dxf") || strcmp (dev, "mf") || strcmp (dev, "hpgl"))
## AutoCad DXF, METAFONT, HPGL
__gnuplot_raw__ ("set terminal push;\n");
__gnuplot_raw__ (sprintf ("set terminal %s;\n", dev));
endif
## Gnuplot expects " around output file name
__gnuplot_raw__ (sprintf ("set output \"%s\";\n", name));
__gnuplot_replot__
unwind_protect_cleanup
## Restore init state
__gnuplot_raw__ ("set terminal pop;\n");
__gnuplot_raw__ ("set output;\n")
__gnuplot_replot__
end_unwind_protect
if (! isempty (convertname))
command = sprintf ("convert '%s' '%s'", name, convertname);
[output, errcode] = system (command);
unlink (name);
if (errcode)
error ("print: could not convert");
endif
endif
## XXX FIXME XXX -- This looks like a dirty, Unix-specific hack.
## DAS
if (doprint)
system (sprintf ("lpr %s '%s'", printer, printname));
unlink (printname);
endif
endfunction