[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Treat TeX in plot text in a Matlab compatible matter with gnuplot en
From: |
Shai Ayal |
Subject: |
Re: Treat TeX in plot text in a Matlab compatible matter with gnuplot enhanced mode |
Date: |
Sat, 17 Nov 2007 13:20:41 +0200 |
On 11/17/07, David Bateman <address@hidden> wrote:
> Matlab supports three different renderings modes for text, labels and
> title, determined by the "interpreter" property of the text objects.
> These three modes are "tex", "latex" and "none". The "tex" mode allows a
> selection of standard TeX commands to be passed in the strings and is
> described on the page
>
> http://www.mathworks.com/access/helpdesk/help/techdoc/ref/text_props.html#String
>
> The "latex" mode passes the text through a full LaTeX compiler to render
> the text, and "none" obviously renders the raw text. Its not easy to
> implement the "latex" mode with gnuplot, but there is a direct mapping
> between most of the TeX commands supported by matlab and the gnuplot
> enhanced modes.
>
> The attached patch adds the ability to treat embedded TeX commands in
> text, labels and titles of plots in a near matlab compatible manner. The
> only things not implemented are the \bf, \it, \rm, \sl and \color
> commands as I see no way to implement these in the gnuplot enhanced
> mode. The rest of the functionality on the page above for the matlab
> "tex" is added with this patch.
>
> Note that as far as I can see the supported terminals with gnuplot 4.2
> are {"aqua", "dumb", "png", "jpeg", "gif", "pm", "windows", "wxt",
> "svg", "pstex", "pslatex", "epslatex", "postscript", "x11"} and with
> gnuplot 4.0 they are only {"pstex", "pslatex", "epslatex",
> "postscript"}. The "x11" terminal in gnuplot 4.0 accepts the enhanced
> option, but seems to have too many rendering bugs to make it useful. For
> the terminal types that don't support enhanced mode, the interpreter
> property is ignored.
>
> I tested the patch with the example from mathworks page for plot. That is
>
> y = sin(x);
> plot(x,y)
> set(gca,'XTick',-pi:pi/2:pi)
> set(gca,'XTickLabel',{'-pi','-pi/2','0','pi/2','pi'})
> xlabel('-\pi \leq \Theta \leq \pi')
> ylabel('sin(\Theta)')
> title('Plot of sin(\Theta)')
> text(-pi/4,sin(-pi/4),'\leftarrow sin(-\pi\div4)',...
> 'HorizontalAlignment','left')
> set(findobj(gca,'Type','line','Color',[0 0 1]),...
> 'Color','red',...
> 'LineWidth',2)
>
> and gnuplot 4.2.2 and the rendering was perfect on the terminals I tried.
>
> D.
>
> *** ./scripts/plot/drawnow.m.orig12 2007-11-16 21:54:30.884138910 +0100
> --- ./scripts/plot/drawnow.m 2007-11-16 22:24:51.993560378 +0100
> ***************
> *** 45,56 ****
> plot_stream = [];
> fid = [];
> unwind_protect
> ! plot_stream = open_gnuplot_stream ([], term, file);
> ! __go_draw_figure__ (f, plot_stream);
> if (nargin == 3)
> fid = fopen (debug_file, "wb");
> ! init_plot_stream (fid, [], term, file);
> ! __go_draw_figure__ (f, fid);
> endif
> unwind_protect_cleanup
> if (! isempty (plot_stream))
> --- 45,56 ----
> plot_stream = [];
> fid = [];
> unwind_protect
> ! [plot_stream, enhanced] = open_gnuplot_stream ([], term, file);
> ! __go_draw_figure__ (f, plot_stream, enhanced);
> if (nargin == 3)
> fid = fopen (debug_file, "wb");
> ! enhanced = init_plot_stream (fid, [], term, file);
> ! __go_draw_figure__ (f, fid, enhanced);
> endif
> unwind_protect_cleanup
> if (! isempty (plot_stream))
> ***************
> *** 72,83 ****
> figure_is_visible = strcmp (f.visible, "on");
> if (figure_is_visible)
> if (isempty (plot_stream))
> ! plot_stream = open_gnuplot_stream (h);
> endif
> ! __go_draw_figure__ (f, plot_stream);
> elseif (! isempty (plot_stream))
> pclose (plot_stream);
> set (h, "__plot_stream__", []);
> endif
> set (h, "__modified__", false);
> endif
> --- 72,87 ----
> figure_is_visible = strcmp (f.visible, "on");
> if (figure_is_visible)
> if (isempty (plot_stream))
> ! [plot_stream, enhanced] = open_gnuplot_stream (h);
> ! set (h, "__enhanced__", enhanced);
> ! else
> ! enhanced = f.__enhanced__;
> endif
> ! __go_draw_figure__ (f, plot_stream, enhanced);
> elseif (! isempty (plot_stream))
> pclose (plot_stream);
> set (h, "__plot_stream__", []);
> + set (h, "__enhanced__", false);
> endif
> set (h, "__modified__", false);
> endif
> ***************
> *** 96,102 ****
>
> endfunction
>
> ! function plot_stream = open_gnuplot_stream (h, varargin)
>
> ## If drawnow is cleared, it is possible to register __go_close_all__
> ## more than once, but that is not fatal.
> --- 100,106 ----
>
> endfunction
>
> ! function [plot_stream, enhanced] = open_gnuplot_stream (h, varargin)
>
> ## If drawnow is cleared, it is possible to register __go_close_all__
> ## more than once, but that is not fatal.
> ***************
> *** 114,120 ****
> set (h, "__plot_stream__", plot_stream);
> endif
>
> ! init_plot_stream (plot_stream, h, varargin{:})
>
> if (isempty (__go_close_all_registered__))
> atexit ("__go_close_all__");
> --- 118,124 ----
> set (h, "__plot_stream__", plot_stream);
> endif
>
> ! enhanced = init_plot_stream (plot_stream, h, varargin{:});
>
> if (isempty (__go_close_all_registered__))
> atexit ("__go_close_all__");
> ***************
> *** 125,135 ****
>
> endfunction
>
> ! function init_plot_stream (plot_stream, h, term, file)
>
> if (nargin == 4)
> if (! isempty (term))
> ! fprintf (plot_stream, "set terminal %s;\n", term);
> endif
> if (! isempty (file))
> fprintf (plot_stream, "set output \"%s\";\n", file);
> --- 129,144 ----
>
> endfunction
>
> ! function enhanced = init_plot_stream (plot_stream, h, term, file)
>
> if (nargin == 4)
> + enhanced = enhanced_term (term);
> if (! isempty (term))
> ! if (enhanced)
> ! fprintf (plot_stream, "set terminal %s enhanced;\n", term);
> ! else
> ! fprintf (plot_stream, "set terminal %s;\n", term);
> ! endif
> endif
> if (! isempty (file))
> fprintf (plot_stream, "set output \"%s\";\n", file);
> ***************
> *** 153,176 ****
> endif
> endif
>
> ## If no 'h' (why not?) then open the terminal as Figure 0.
> if (isempty (h))
> h = 0;
> endif
>
> if (strcmp (term, "x11"))
> ! fprintf (plot_stream, "set terminal x11 title \"Figure %d\"\n", h);
> elseif (strcmp (term, "aqua"))
> ## Aqua doesn't understand the 'title' option despite what the
> ## gnuplot 4.2 documentation says.
> ! fprintf (plot_stream, "set terminal aqua %d\n", h);
> elseif (strcmp (term, "wxt"))
> ! fprintf (plot_stream, "set terminal wxt title \"Figure %d\"\n", h);
> endif
> ## gnuplot will pick up the GNUTERM environment variable itself
> ## so no need to set the terminal type if not also setting the
> ! ## figure title.
>
> endif
>
> endfunction
> --- 162,222 ----
> endif
> endif
>
> + enhanced = enhanced_term (term);
> + if (enhanced)
> + enh_str = "enhanced";
> + else
> + enh_str = "";
> + endif
> +
> ## If no 'h' (why not?) then open the terminal as Figure 0.
> if (isempty (h))
> h = 0;
> endif
>
> if (strcmp (term, "x11"))
> ! fprintf (plot_stream, "set terminal x11 %s title \"Figure %d\"\n",
> ! enh_str, h);
> elseif (strcmp (term, "aqua"))
> ## Aqua doesn't understand the 'title' option despite what the
> ## gnuplot 4.2 documentation says.
> ! fprintf (plot_stream, "set terminal aqua %d %s\n", h, enh_str);
> elseif (strcmp (term, "wxt"))
> ! fprintf (plot_stream, "set terminal wxt %s title \"Figure %d\"\n",
> ! enh_str, h);
> !
> ! elseif (enhanced)
> ! fprintf (plot_stream "set terminal %s %s\n", term, enh_str);
> endif
> ## gnuplot will pick up the GNUTERM environment variable itself
> ## so no need to set the terminal type if not also setting the
> ! ## figure title or enhanced mode.
> !
> ! endif
> !
> ! endfunction
> !
> ! function have_enhanced = enhanced_term (term)
> ! persistent enhanced_terminals;
>
> + if (isempty (enhanced_terminals))
> + if (compare_versions (__gnuplot_version__ (), "4.0", ">"))
> + enhanced_terminals = {"aqua", "dumb", "png", "jpeg", "gif", "pm", ...
> + "windows", "wxt", "svg", "pstex", "pslatex", ...
> + "epslatex", "postscript", "x11"};
> + else
> + enhanced_terminals = {"pstex", "pslatex", "epslatex", "postscript"};
> + endif
> endif
>
> + term = tolower (term);
> +
> + have_enhanced = false;
> + for i = 1 : length (enhanced_terminals)
> + t = enhanced_terminals{i};
> + if (strncmp (term, t, min (length (term), length(t))))
> + have_enhanced = true;
> + break;
> + endif
> + endfor
> endfunction
> *** ./scripts/plot/__go_draw_figure__.m.orig12 2007-11-16 21:54:03.252558771
> +0100
> --- ./scripts/plot/__go_draw_figure__.m 2007-11-16 21:57:43.661232972 +0100
> ***************
> *** 20,28 ****
>
> ## Author: jwe
>
> ! function __go_draw_figure__ (f, plot_stream)
>
> ! if (nargin == 2)
> if (strcmp (f.type, "figure"))
>
> ## Set figure properties here?
> --- 20,28 ----
>
> ## Author: jwe
>
> ! function __go_draw_figure__ (f, plot_stream, enhanced)
>
> ! if (nargin == 3)
> if (strcmp (f.type, "figure"))
>
> ## Set figure properties here?
> ***************
> *** 52,58 ****
> obj = get (kids(i));
> switch (obj.type)
> case "axes"
> ! __go_draw_axes__ (kids(i), plot_stream);
>
> otherwise
> error ("__go_draw_figure__: unknown object class, %s",
> --- 52,58 ----
> obj = get (kids(i));
> switch (obj.type)
> case "axes"
> ! __go_draw_axes__ (kids(i), plot_stream, enhanced);
>
> otherwise
> error ("__go_draw_figure__: unknown object class, %s",
> *** ./scripts/plot/__go_draw_axes__.m.orig12 2007-11-16 17:14:38.903450043
> +0100
> --- ./scripts/plot/__go_draw_axes__.m 2007-11-16 23:40:44.690617978 +0100
> ***************
> *** 20,28 ****
>
> ## Author: jwe
>
> ! function __go_draw_axes__ (h, plot_stream)
>
> ! if (nargin == 2)
>
> axis_obj = get (h);
>
> --- 20,28 ----
>
> ## Author: jwe
>
> ! function __go_draw_axes__ (h, plot_stream, enhanced)
>
> ! if (nargin == 3)
>
> axis_obj = get (h);
>
> ***************
> *** 59,67 ****
> if (isempty (t.string))
> fputs (plot_stream, "unset title;\n");
> else
> [f, s] = get_fontname_and_size (t);
> fprintf (plot_stream, "set title \"%s\" font \"%s,%d\";\n",
> ! undo_string_escapes (t.string), f, s);
> endif
> endif
>
> --- 59,68 ----
> if (isempty (t.string))
> fputs (plot_stream, "unset title;\n");
> else
> + tt = __maybe_munge_text__ (enhanced, t);
> [f, s] = get_fontname_and_size (t);
> fprintf (plot_stream, "set title \"%s\" font \"%s,%d\";\n",
> ! undo_string_escapes (tt), f, s);
> endif
> endif
>
> ***************
> *** 71,79 ****
> if (isempty (t.string))
> fputs (plot_stream, "unset xlabel;\n");
> else
> [f, s] = get_fontname_and_size (t);
> fprintf (plot_stream, "set xlabel \"%s\" font \"%s,%d\"",
> ! undo_string_escapes (t.string), f, s);
> if (have_newer_gnuplot)
> ## Rotation of xlabel not yet support by gnuplot as of 4.2, but
> ## there is no message about it.
> --- 72,81 ----
> if (isempty (t.string))
> fputs (plot_stream, "unset xlabel;\n");
> else
> + tt = __maybe_munge_text__ (enhanced, t);
> [f, s] = get_fontname_and_size (t);
> fprintf (plot_stream, "set xlabel \"%s\" font \"%s,%d\"",
> ! undo_string_escapes (tt), f, s);
> if (have_newer_gnuplot)
> ## Rotation of xlabel not yet support by gnuplot as of 4.2, but
> ## there is no message about it.
> ***************
> *** 89,97 ****
> if (isempty (t.string))
> fputs (plot_stream, "unset ylabel;\n");
> else
> [f, s] = get_fontname_and_size (t);
> fprintf (plot_stream, "set ylabel \"%s\" font \"%s,%d\"",
> ! undo_string_escapes (t.string), f, s);
> if (have_newer_gnuplot)
> fprintf (plot_stream, " rotate by %f;\n", angle);
> endif
> --- 91,100 ----
> if (isempty (t.string))
> fputs (plot_stream, "unset ylabel;\n");
> else
> + tt = __maybe_munge_text__ (enhanced, t);
> [f, s] = get_fontname_and_size (t);
> fprintf (plot_stream, "set ylabel \"%s\" font \"%s,%d\"",
> ! undo_string_escapes (tt), f, s);
> if (have_newer_gnuplot)
> fprintf (plot_stream, " rotate by %f;\n", angle);
> endif
> ***************
> *** 105,112 ****
> if (isempty (t.string))
> fputs (plot_stream, "unset zlabel;\n");
> else
> ! fprintf (plot_stream, "set zlabel \"%s\"",
> ! undo_string_escapes (t.string));
> if (have_newer_gnuplot)
> ## Rotation of zlabel not yet support by gnuplot as of 4.2, but
> ## there is no message about it.
> --- 108,117 ----
> if (isempty (t.string))
> fputs (plot_stream, "unset zlabel;\n");
> else
> ! tt = __maybe_munge_text__ (enhanced, t);
> ! [f, s] = get_fontname_and_size (t);
> ! fprintf (plot_stream, "set zlabel \"%s\" font \"%s,%d\"",
> ! undo_string_escapes (tt), f, s);
> if (have_newer_gnuplot)
> ## Rotation of zlabel not yet support by gnuplot as of 4.2, but
> ## there is no message about it.
> ***************
> *** 851,858 ****
> endif
>
> case "text"
> lpos = obj.position;
> - label = obj.string;
> halign = obj.horizontalalignment;
> angle = obj.rotation;
> units = obj.units;
> --- 856,863 ----
> endif
>
> case "text"
> + label = __maybe_munge_text__ (enhanced, obj);
> lpos = obj.position;
> halign = obj.horizontalalignment;
> angle = obj.rotation;
> units = obj.units;
> ***************
> *** 1479,1481 ****
> --- 1484,1656 ----
> s = t.fontsize;
> endif
> endfunction
> +
> + function str = __maybe_munge_text__ (enhanced, obj)
> + persistent warned_latex = false;
> +
> + str = obj.string;
> + if (enhanced)
> + if (strcmp (obj.interpreter, "tex"))
> + str = __tex2enhanced__ (str);
> + elseif (strcmp (obj.interpreter, "latex"))
> + if (! warned_latex)
> + warning ("latex text objects not supported");
> + warned_latex = true;
> + endif
> + endif
> + endif
> + endfunction
> +
> + function str = __tex2enhanced__ (str)
> + persistent sym = __setup_sym_table__ ();
> +
> + [s, e, m] = regexp(str,'\\([a-zA-Z]+|0)','start','end','matches');
> +
> + for i = length (s) : -1 : 1
> + ## special case for "\0" and replace with "{/Symbol \306}'
> + if (strcmp (m{i}, '\0'))
> + str = strcat (str(1:s(i) - 1), '{\Symbol \306}', str(e(i) + 1:end));
> + else
> + f = m{i}(2:end);
> + if (isfield (sym, f))
> + str = strcat (str(1:s(i) - 1), getfield(sym, f), str(e(i) + 1:end));
> + elseif (strcmp (f, "rm") || strcmp (f, "bf") ||
> + strcmp (f, "it") || strcmp (f, "sl"))
> + ## FIXME
> + ## Ignore and remove \rm, \bf \sl \it as we can't treat them
> + str = strcat (str(1:s(i) - 1), str(e(i) + 1:end));
> + elseif (strcmp (f, "color"))
> + ## FIXME
> + ## Ignore \color too but remove trailing {} block as well
> + d = strfind(str(e(i) + 1:end),'}');
> + if (isempty (d))
> + warning ('syntax error in \color argument');
> + else
> + str = strcat (str(1:s(i) - 1), str(e(i) + d + 1:end));
> + endif
> + elseif(strcmp (f, "fontname"))
> + b1 = strfind(str(e(i) + 1:end),'{');
> + b2 = strfind(str(e(i) + 1:end),'}');
> + if (isempty(b1) || isempty(b2))
> + warning ('syntax error in \fontname argument');
> + else
> + str = strcat (str(1:s(i) - 1), '/',
> + str(e(i)+b1(1) + 1:e(i)+b2(1)-1), ...
> + str(e(i) + b2(1) + 1:end));
> + endif
> + elseif(strcmp (f, "fontsize"))
> + b1 = strfind(str(e(i) + 1:end),'{');
> + b2 = strfind(str(e(i) + 1:end),'}');
> + if (isempty(b1) || isempty(b2))
> + warning ('syntax error in \fontname argument');
> + else
> + str = strcat (str(1:s(i) - 1), '/=',
> + str(e(i)+b1(1) + 1:e(i)+b2(1)-1), ...
> + str(e(i) + b2(1) + 1:end));
> + endif
> + endif
> + endif
> + endfor
> + endfunction
> +
> + function sym = __setup_sym_table__ ()
> + ## Setup the translation table for TeX to gnuplot enhanced mode.
> + ## FIXME we have to be in an extended code page for the next 4 symbols
> + sym.rfloor = '{\353}';
> + sym.lceil = '{\351}';
> + sym.lfloor = '{\373}';
> + sym.rceil = '{\371}';
> + sym.forall = '{/Symbol \042}';
> + sym.exists = '{/Symbol \044}';
> + sym.ni = '{/Symbol \047}';
> + sym.cong = '{/Symbol \100}';
> + sym.Delta = '{/Symbol D}';
> + sym.Phi = '{/Symbol F}';
> + sym.Gamma = '/Symbol G}';
> + sym.vartheta = '{\Symbol J}';
> + sym.Lambda = '{/Symbol L}';
> + sym.Pi = '{/Symbol P}';
> + sym.Theta = '{/Symbol Q}';
> + sym.Sigma = '{/Symbol S}';
> + sym.varsigma = '{/Symbol V}';
> + sym.Omega = '{/Symbol O}';
> + sym.Xi = '{/Symbol X}';
> + sym.Psi = '{/Symbol Y}';
> + sym.perp = '{/Symbol \136}';
> + sym.alpha = '{/Symbol a}';
> + sym.beta = '{/Symbol b}';
> + sym.chi = '{/Symbol c}';
> + sym.delta = '{/Symbol d}';
> + sym.epsilon = '{/Symbol e}';
> + sym.phi = '{/Symbol f}';
> + sym.gamma = '/Symbol g}';
> + sym.eta = '{/Symbol h}';
> + sym.iota = '{/Symbol i}';
> + sym.kappa = '{/Symbol k}';
> + sym.lambda = '{/Symbol l}';
> + sym.mu = '{/Symbol m}';
> + sym.nu = '{/Symbol n}';
> + sym.o = '{o}';
> + sym.pi = '{/Symbol p}';
> + sym.theta = '{/Symbol q}';
> + sym.rho = '{/Symbol r}';
> + sym.sigma = '{/Symbol s}';
> + sym.tau = '{/Symbol t}';
> + sym.varpi = '{/Symbol v}';
> + sym.omega = '{/Symbol w}';
> + sym.xi = '{/Symbol x}';
> + sym.psi = '{/Symbol y}';
> + sym.zeta = '{/Symbol z}';
> + sym.sim = '{/Symbol \176}';
> + sym.Upsilon = '{/Symbol \241}';
> + sym.prime = '{/Symbol \242}';
> + sym.leq = '{/Symbol \243}';
> + sym.infty = '{/Symbol \245}';
> + sym.clubsuit = '{/Symbol \247}';
> + sym.diamondsuit = '{/Symbol \250}';
> + sym.heartsuit = '{/Symbol \251}';
> + sym.spadesuit = '{/Symbol \252}';
> + sym.leftrightarrow = '{/Symbol \3253}';
> + sym.leftarrow = '{/Symbol \254}';
> + sym.uparrow = '{/Symbol \255}';
> + sym.rightarrow = '{/Symbol \256}';
> + sym.downarrow = '{/Symbol \257}';
> + sym.circ = '{/Symbol \260}';
> + sym.pm = '{/Symbol \261}';
> + sym.geq = '{/Symbol \263}';
> + sym.times = '{/Symbol \264}';
> + sym.propto = '{/Symbol \265}';
> + sym.partial = '{/Symbol \266}';
> + sym.bullet = '{/Symbol \267}';
> + sym.div = '{/Symbol \270}';
> + sym.neq = '{/Symbol \271}';
> + sym.equiv = '{/Symbol \272}';
> + sym.approx = '{/Symbol \273}';
> + sym.ldots = '{/Symbol \274}';
> + sym.mid = '{/Symbol \275}';
> + sym.aleph = '{/Symbol \300}';
> + sym.Im = '{/Symbol \301}';
> + sym.Re = '{/Symbol \302}';
> + sym.wp = '{/Symbol \303}';
> + sym.otimes = '{/Symbol \304}';
> + sym.oplus = '{/Symbol \305}';
> + sym.oslash = '{/Symbol \306}';
> + sym.cap = '{/Symbol \307}';
> + sym.upsilon = '{/Symbol \307}'; ## FIXME: This is incorrect but close
> + sym.cup = '{/Symbol \310}';
> + sym.supset = '{/Symbol \311}';
> + sym.supseteq = '{/Symbol \312}';
> + sym.subset = '{/Symbol \314}';
> + sym.subseteq = '{/Symbol \315}';
> + sym.in = '{/Symbol \316}';
> + sym.langle = '{/Symbol \320}';
> + sym.rangle = '{/Symbol \320}';
> + sym.nabla = '{/Symbol \321}';
> + sym.surd = '{/Symbol \326}';
> + sym.cdot = '{/Symbol \327}';
> + sym.neg = '{/Symbol \330}';
> + sym.wedge = '{/Symbol \331}';
> + sym.vee = '{/Symbol \332}';
> + sym.copyright = '{/Symbol \343}';
> + sym.int = '{/Symbol \362}';
> + endfunction
> *** ./src/graphics.cc.orig12 2007-11-16 17:11:29.820077685 +0100
> --- ./src/graphics.cc 2007-11-16 22:11:20.352266933 +0100
> ***************
> *** 844,849 ****
> --- 844,850 ----
> const graphics_handle& p)
> : base_properties (go_name, mh, p),
> __plot_stream__ (Matrix ()),
> + __enhanced__ (false),
> nextplot ("replace"),
> closerequestfcn (make_fcn_handle ("closereq")),
> currentaxes (octave_NaN),
> ***************
> *** 894,899 ****
> --- 895,902 ----
> }
> else if (name.compare ("__plot_stream__"))
> set___plot_stream__ (val);
> + else if (name.compare ("__enhanced__"))
> + set___enhanced__ (val);
> else if (name.compare ("nextplot"))
> set_nextplot (val);
> else if (name.compare ("closerequestfcn"))
> ***************
> *** 927,932 ****
> --- 930,936 ----
> m.assign ("children", children);
> m.assign ("__modified__", __modified__);
> m.assign ("__plot_stream__", __plot_stream__);
> + m.assign ("__enhanced__", __enhanced__);
> m.assign ("nextplot", nextplot);
> m.assign ("closerequestfcn", closerequestfcn);
> m.assign ("currentaxes", currentaxes.as_octave_value ());
> ***************
> *** 954,959 ****
> --- 958,965 ----
> retval = __modified__;
> else if (name.compare ("__plot_stream__"))
> retval = __plot_stream__;
> + else if (name.compare ("__enhanced__"))
> + retval = __enhanced__;
> else if (name.compare ("nextplot"))
> retval = nextplot;
> else if (name.compare ("closerequestfcn"))
> ***************
> *** 1952,1958 ****
> fontname ("Helvetica"),
> fontsize (10),
> fontangle (radio_values ("{normal}|italic|oblique")),
> ! fontweight (radio_values ("{normal}|bold|demi|light"))
> { }
>
> void
> --- 1958,1965 ----
> fontname ("Helvetica"),
> fontsize (10),
> fontangle (radio_values ("{normal}|italic|oblique")),
> ! fontweight (radio_values ("{normal}|bold|demi|light")),
> ! interpreter (radio_values ("{tex}|none|latex"))
> { }
>
> void
> ***************
> *** 1991,1996 ****
> --- 1998,2005 ----
> set_fontangle (val);
> else if (name.compare ("fontweight"))
> set_fontweight (val);
> + else if (name.compare ("interpreter"))
> + set_interpreter (val);
> else
> {
> modified = false;
> ***************
> *** 2021,2026 ****
> --- 2030,2036 ----
> m.assign ("fontsize", fontsize);
> m.assign ("fontangle", fontangle);
> m.assign ("fontweight", fontweight);
> + m.assign ("interpreter", interpreter);
>
> return m;
> }
> ***************
> *** 2060,2065 ****
> --- 2070,2077 ----
> retval = fontangle;
> else if (name.compare ("fontweight"))
> retval = fontweight;
> + else if (name.compare ("interpreter"))
> + retval = interpreter;
> else
> warning ("get: invalid property `%s'", name.c_str ());
>
> ***************
> *** 2083,2088 ****
> --- 2095,2102 ----
> string_property ("normal", radio_values ("{normal}|italic|oblique"));
> m["fontweight"] =
> string_property ("normal", radio_values ("{normal}|bold|demi|light"));
> + m["interpreter"] =
> + string_property ("tex", radio_values ("{tex}|none|latex"));
>
> return m;
> }
> *** ./src/graphics.h.in.orig12 2007-11-16 17:11:36.545735301 +0100
> --- ./src/graphics.h.in 2007-11-16 21:48:15.459430279 +0100
> ***************
> *** 1098,1103 ****
> --- 1098,1104 ----
>
> BEGIN_PROPERTIES
> octave_value __plot_stream__
> + octave_value __enhanced__
> octave_value nextplot
> octave_value closerequestfcn
> graphics_handle currentaxes S
> ***************
> *** 1522,1527 ****
> --- 1523,1529 ----
> octave_value fontsize
> string_property fontangle a
> string_property fontweight a
> + string_property interpreter a
> END_PROPERTIES
>
> static std::string go_name;
>
> 2007-11-16 David Bateman <address@hidden>
>
> * plot/drawnow.m (open_gnuplot_stream, init_gnuplot_stream):
> Return whether the terminal supports enhanced text or not.
> (drawnow:enhanced_term): New sub-function to determine is terminal
> supported enhanced mode.
> * plot/__go_draw_figure__.m: Accept enhanced flag and pass to
> __go_draw_axes__.
> * plot/__go_draw_axes__.m: Accept enhanced flag and munge text if
> needed to support the enhanced mode.
>
> 2007-11-16 David Bateman <address@hidden>
>
> * graphics.h.in (class figure): Add __enhanced__ property to cache
> whether the terminal supports enhanced mode.
> * graphics.cc (class figure): ditto.
>
>
I have 2 comments:
1) It's going to be really hard to live up to the features of the
gnuplot backend, and it keeps getting harder.
2) Why do you use the string_property type for the interpreter
property and not radio_value?
Shai
- Treat TeX in plot text in a Matlab compatible matter with gnuplot enhanced mode, David Bateman, 2007/11/16
- Re: Treat TeX in plot text in a Matlab compatible matter with gnuplot enhanced mode,
Shai Ayal <=
- Re: Treat TeX in plot text in a Matlab compatible matter with gnuplot enhanced mode, David Bateman, 2007/11/17
- Re: Treat TeX in plot text in a Matlab compatible matter with gnuplot enhanced mode, David Bateman, 2007/11/19
- Re: Treat TeX in plot text in a Matlab compatible matter with gnuplot enhanced mode, Shai Ayal, 2007/11/19
- Re: Treat TeX in plot text in a Matlab compatible matter with gnuplot enhanced mode, David Bateman, 2007/11/19
- Re: Treat TeX in plot text in a Matlab compatible matter with gnuplot enhanced mode, David Bateman, 2007/11/19
- Re: Treat TeX in plot text in a Matlab compatible matter with gnuplot enhanced mode, David Bateman, 2007/11/20
- Re: Treat TeX in plot text in a Matlab compatible matter with gnuplot enhanced mode, John W. Eaton, 2007/11/26
- Re: Treat TeX in plot text in a Matlab compatible matter with gnuplot enhanced mode, John W. Eaton, 2007/11/26
- Re: Treat TeX in plot text in a Matlab compatible matter with gnuplot enhanced mode, David Bateman, 2007/11/26
- Re: Treat TeX in plot text in a Matlab compatible matter with gnuplot enhanced mode, John W. Eaton, 2007/11/26