|
From: André W. <wo...@us...> - 2015-10-15 22:03:24
|
Hi Michael,
first of all, thanks a lot for providing a simple example. Without it I probably wouldn't have started to take a look into that right now.
Now, lets see: skip1=True does not work here, as there is an denomsuffix, so it would be wrong to remove the fraction. skip1 is about removing the fraction.
For skipdenom1 there is some documentation in the code:
- skipdenom1 (boolean) just prints the numerator instead of
the hole fraction, when the denominator is one and none of the parameters
denomprefix, denominfix and denomsuffix are set and minuspos is not -1 or the
fraction is positive
To my understanding (well, I've written the code, but this is many, many years ago) the code does that. We have a denomsuffix, hence skipdenom1 does not work to remove the 1. And it is good that the condition is done that way. skipdenom1 is about skipping the denominator completely, which would also remove the 1/\pi, and this surely would be bad!
What you want is something like skip1 just on the denominator, but without removing the fraction. (skipdenom1 is about removing the fraction.) Note that this is different from skipnum1, which only controls the numerator, and will not remove the fraction by its own. This means, that with the flags available in the rational texter the output you want just cannot be expressed. I don't see an easy solution to fix it within the texter without adding another flag for this case. But I think it would be more harm than good, as it is already rather complicated, and the problem you're facing is very specific (and uncommon).
Still, I can easily think of (at least) two solutions to work around it. The first solution is simpler, but has the problem, that it can only be used, when you know that there will be a tick at 1/\pi. The other is to do it in TeX ... yes, you heard right, you'll see in a moment. It's quite simple in the end of the day.
First solution:
from pyx import *
texter = graph.axis.texter.rational(denomsuffix=r"\pi", skip1=True,
skipdenom1=True)
g = graph.graphxy(
width = 8,
x = graph.axis.lin(min=0, max=1),
y = graph.axis.lin(texter=texter, min=0, max=1,
manualticks=[graph.axis.tick.tick(1, label="1\over\pi", labelattrs=[text.mathmode])]),
)
g.writePDFfile()
Second solution:
from pyx import *
text.preamble(r"\def\myover#1{\over{\def\onepi{1\pi}\def\value{#1}\ifx\value\onepi\pi\else#1\fi}}")
texter = graph.axis.texter.rational(denomsuffix=r"\pi", skip1=True,
skipdenom1=True, over=r"{{%s}\myover{%s}}")
g = graph.graphxy(
width = 8,
x = graph.axis.lin(min=0, max=1),
y = graph.axis.lin(texter=texter, min=0, max=1),
)
g.writePDFfile()
Best,
André
PS: Note that you should have a divisor on the axis to match the values to the labels. I guess you just omitted it in this minimized example. You will need to change the value of the manual tick position to 1/pi in the first solution.
PPS: I kept skip1 and skipdenom1 in the code, just as you posted it, to keep the changes minimal, but both flags have no effect anyway.
Am 15.10.2015 um 22:19 schrieb Michael Hartmann <mi...@sp...>:
> Hello,
>
> I think I found a bug in the texter subsystem. The rational class doesn't
> handle skipdenom=True correctly when denomsuffix is set.
>
> I have a small example:
>
>
> from pyx import *
>
> texter = graph.axis.texter.rational(denomsuffix=r"\pi", skip1=True,
> skipdenom1=True)
> g = graph.graphxy(
> width = 8,
> x = graph.axis.lin(min=0, max=1),
> y = graph.axis.lin(texter=texter, min=0, max=1)
> )
> g.writePDFfile()
>
>
> The label of the upmost tick is "1/1pi" instead of "1/pi". According to the
> documentation the "1" in the denominator should be omitted.
>
> The bug is in the file pyx/graph/axis/texter.py, method labels, starting at
> line 389. Unfortuntely, I didn't fully understand the logic of the code, so I
> cannot send you a patch. I've used the latest PyX release 0.14 and Python
> 3.4.2.
>
> Thank you very much for your help!
>
> Kind regards,
>
> --Michael
>
>
>
> ------------------------------------------------------------------------------
> _______________________________________________
> PyX-user mailing list
> PyX...@li...
> https://lists.sourceforge.net/lists/listinfo/pyx-user
--
by _ _ _ Dr. André Wobst, Amselweg 22, 85716 Unterschleißheim
/ \ \ / ) wo...@us..., http://www.wobsta.de/
/ _ \ \/\/ / PyX - High quality PostScript and PDF figures
(_/ \_)_/\_/ with Python & TeX: visit http://pyx.sourceforge.net/
|