From: Arnd B. <arn...@we...> - 2004-06-17 08:30:49
|
Hi, how can I change the font (and maybe also its size) for a plot? I am sure this is a trivial question, but despite consulting t he Manual/FAQ/examples/google I failed to come up with a solution. In the this example ############################################################### from pyx import * from pyx.graph.axis import linear,texter text.set(mode="latex") text.preamble(r"\renewcommand{\familydefault}{\sfdefault}") #text.preamble(r"\usepackage{helvet}") # no effect ? #text.preamble(r"\usepackage{mathptmx}") # changes c.text one? c = canvas.canvas() g = graph.graphxy(width=5,height=5,x=linear(min=0.0, max=1.0), y=linear(min=0.0, max=1.0)) c.insert(g) c.text(0.0,0.25, "Test", [text.size.Huge]) c.writeEPSfile("font.eps") ############################################################### only the text written by c.text is changed as expected (i.e as \sf, BTW Helvetica would be fine for me as well), but not for the axis-labeling of the graph? (I tried to change the `texter` from `linear` but no success). Many thanks, Arnd |
From: Joerg L. <jo...@us...> - 2004-06-17 18:48:26
|
Hi Arnd, On 17.06.04, Arnd Baecker wrote: > how can I change the font (and maybe also its size) > for a plot? > > I am sure this is a trivial question, but despite consulting t > he Manual/FAQ/examples/google I failed to come up with a solution. > In the this example No, it's not a trivial question at all, and in fact we had some discussion among the core developers about this point some time ago... Here is a modified version of your example that does what you want: ################################################################# from pyx import * from pyx.graph.axis import linear, texter text.set(mode="latex") text.preamble(r"\renewcommand{\familydefault}{\sfdefault}") mytexter = texter.decimal(labelattrs=[text.nomathmode]) c = canvas.canvas() g = graph.graphxy(width=5, height=5, x=linear(min=0.0, max=1.0, texter=mytexter), y=linear(min=0.0, max=1.0, texter=mytexter)) c.insert(g) c.writeEPSfile("test") ################################################################# The idea is to turn of the mathmode (which by default is enabled) for the axis labels. Unfortunately, you cannot do this by passing the text.nomathmode argument to the axis _painter_ but you have to pass it to the _texter_ [1]. Now, this doesn't sound so bad, but image you have a more complicated texter such as pyx.graph.axis.texter.mixed which in itself consists of several texters... Btw, you can change the font size by adding a corresponding attribute to the labelattrs of the texter [2]. Here, the order doesn't play a role. If I remember correctly, Gert was not very happy with the present solution (also having your use case with sans serif fonts in mind). So, maybe we should bring up this point again, when André is back from his vacation. Jörg [1] Because the labelattrs of the texter which by default contain the mathmode attribute are appended to the labelattrs of the painter. [2] Of course, you can also pass the font size attribute to the texter. |
From: Arnd B. <arn...@we...> - 2004-06-21 07:31:56
|
Hi Joerg, many thanks for your informative and helpful response! On Thu, 17 Jun 2004, Joerg Lehmann wrote: [...] > Btw, you can change the font size by adding a corresponding attribute to > the labelattrs of the texter [2]. Here, the order doesn't play a role. Ok, so with mytexter =3D texter.decimal(labelattrs=3D[text.nomathmode,text.size.Huge]= ) I can change the font size for the labels of the graphs. For separate text I can use c.text(0.0,0.25, "Test", [text.size.Huge]) Now I am only wondering whether there is a "global" option to change the default font size (One application would be a figure for a paper and then re-using the same figure for a presentation but with larger fonts) I tried text.set(docopt=3D"10pt") but did not see any effect. Presumably I am missing something simple for this. > If I remember correctly, Gert was not very happy with the present > solution (also having your use case with sans serif fonts in mind). > > So, maybe we should bring up this point again, when Andr=E9 is back from > his vacation. Your remark on the mathmode being turned on by default for the axis labels brought me to the following alternative: ################################################################ from pyx import * from pyx.graph.axis import linear, texter text.set(mode=3D"latex") text.preamble(r"""\usepackage{cmbright}""") c =3D canvas.canvas() g =3D graph.graphxy(width=3D5, height=3D5,x=3Dlinear(min=3D0.0, max=3D1.0), y=3Dlinear(min=3D0.0, max=3D1.0)) c.insert(g) c.text(0.0,0.25, "Test $P(W)$", [text.size.Huge]) c.writeEPSfile("test_cmbright") ################################################################# For this one has to install he cmbright stuff (font's and such) ((that is also what I use for pdf presentations with texpower)). Best, Arnd |
From: Joerg L. <jo...@us...> - 2004-06-21 08:35:30
|
Hi Arnd, On 21.06.04, Arnd Baecker wrote: [...] > Now I am only wondering whether there is a "global" option > to change the default font size > (One application would be a figure for a paper and then > re-using the same figure for a presentation but with larger fonts) > I tried > text.set(docopt="10pt") > but did not see any effect. > Presumably I am missing something simple for this. Specifying the text size using the docopt option is possible, but of course only as far as offered by the document class in use. It is not (yet ?) possible to set defaults for the TeX/LaTeX output analogously to the functionality offered for the PS output. Sometimes, however, it is enough to globally scale the TeX/LaTeX output with the help of the xscale option of the unit.set method, e.g., unit.set(xscale=1.5) [...] > Your remark on the mathmode being turned on by default for > the axis labels brought me to the following alternative: > > ################################################################ > from pyx import * > from pyx.graph.axis import linear, texter > > text.set(mode="latex") > text.preamble(r"""\usepackage{cmbright}""") > c = canvas.canvas() > g = graph.graphxy(width=5, height=5,x=linear(min=0.0, max=1.0), > y=linear(min=0.0, max=1.0)) > c.insert(g) > c.text(0.0,0.25, "Test $P(W)$", [text.size.Huge]) > c.writeEPSfile("test_cmbright") > ################################################################# > > For this one has to install he cmbright stuff (font's and such) > ((that is also what I use for pdf presentations with texpower)). That's of course a nice way to achieve upright font output in PyX graphs. Its advantage compared to my proposed solution is that PyX is still in mathmode and can rely on the position of TeX's mathematical axis. On the other hand, you need the cmbright package (or somethin equivalent) installed on your system... Gert, maybe we should add a discussion on this point (how to achieve nonitalic fonts in axis labels) to the FAQ. Jörg |