[R] CairoPDF and greek letter spacing

Chris Campbell ccampbell at mango-solutions.com
Wed Jan 11 18:29:46 CET 2012


As a workaround you could use escape characters, then adjust the font style as necessary.

cairo_pdf(file = "zend.pdf")
print(xyplot(y ~ x, 
  data = data.frame(x = 1:10, y = 1:10),
  main = "Length (\u03BCm)"))
dev.off()

Regards

Chris Campbell
MANGO SOLUTIONS
Data Analysis that Delivers
+44 1249 767700

-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of Walker, John Stephen
Sent: 11 January 2012 16:01
To: David Winsemius; Rolf Turner
Cc: r-help at r-project.org
Subject: Re: [R] CairoPDF and greek letter spacing

Thanks for the input, but I can confirm the either form of the paste command i.e. expression(paste("Length (", mu*m, ")")) or my original which had expression(paste("Length (", mu, "m)")), and the expression command alone have the same effect. It may be limited to Linux machines 
(which I did state I used  in my first post) as when I previously used an OS X machine I didn't see the bug.   I don't use OS X anymore, I've implemented a completely Linux based 
lab and would like to get this sorted out. Any suggestions? Rolf, if you can repoduce it then I think we have a bug report but to whom? R or Cairo?

John



________________________________________
From: David Winsemius [dwinsemius at comcast.net]
Sent: Monday, January 09, 2012 10:36 PM
To: Rolf Turner
Cc: Walker, John Stephen; r-help at r-project.org
Subject: Re: [R] CairoPDF and greek letter spacing

On Jan 10, 2012, at 12:22 AM, Rolf Turner wrote:

> On 10/01/12 15:25, David Winsemius wrote:
>>
>> On Jan 9, 2012, at 8:19 PM, Rolf Turner wrote:
>>
>>> On 10/01/12 11:40, John Walker wrote:
>>>> I have a small problem with R graphics output. When I use the 
>>>> lattice package and CairoPDF to generate publication quality graphs 
>>>> I often use the expression to create an axis title that has 
>>>> microlitres or micrometers as a unit. I use something like the 
>>>> following 'expression(paste("Length (", mu,"m )"))' as an argument 
>>>> to the xlabel function. The command works but the mu and 'm' have a 
>>>> space between them. It looks like 'u m' rather than 'um'. It only 
>>>> seems to happen with the CairoPDF output on my linux machine, it's 
>>>> fine on the X11 device.
>>>> I've fixed it in the past by importing the pdf into inkscape and 
>>>> manually adjusting the spacing (it's more difficult than it sounds 
>>>> because I can't actually adjust the spacing but have to delete the 
>>>> mu and re-enter it).  Is there something I'm doing wrong? Is this a 
>>>> known bug?  How can I fix it?
>>> I can't help, but I can confirm the problem, for what *that* is 
>>> worth.
>>>
>>> It seems be an unfortunate interaction between lattice graphics and 
>>> the cairo_pdf() device.
>>>
>>> The space between the "mu" and the "m" does not appear with 
>>> ``ordinary'' R graphics, irrespective of device, nor does it appear 
>>> with lattice graphics and, e.g. the pdf() device.  But it does 
>>> appear with lattice graphics *and* the cairo_pdf() device.
>>>
>>> That probably means that the problem is subtle and will be difficult 
>>> to impossible to fix. :-(
>>
>> Doubtful. Do either of you realize that `paste` is a plotmath 
>> function that is misused more often than correctly used (at least as 
>> judged by the number o errors submitted to r-help)? I see no workable 
>> example, but if I did I would be trying instead :
>>
>> expression(Length~mu*m)
>
> You meant expression(Length==mu*m).

I thought what was wanted:

main=expression(Length~group("(",mu*m,")")) # Or

main=expression(Length~"("*mu*m*")")


And on a Mac (Leopard, R 2.14.1 Patched)  I could not get a different display on the screen device and either pdf or cairo_pdf so your experience may have something to do with the as yet unstated OSes.


>  And yes that helps a bit, but there's still a bit more space between 
> the mu and the m than one would like.
>
> Compare:
>
>    require(lattice)
>    cairo_pdf(file="mung.pdf")
>
> print
> (xyplot
> (y~x,data=data.frame(x=1:10,y=1:10),main=expression(Length==mu*m)))
>    dev.off()
> and
>    pdf(file="gorp.pdf")
>
> print
> (xyplot
> (y~x,data=data.frame(x=1:10,y=1:10),main=expression(Length==mu*m)))
>    dev.off()
>
> There's not much in it, but there's just enough to be annoying.
>
>    cheers,
>
>        Rolf
>
> P. S.  And I have never been able to figure out *anything* about how
> paste() and
> expression() interact.  It is a complete mystery, and a matter of 
> trying things more or less at random until something more or less 
> works.
>
>        R. T.
>
> P^2. S.  I just realised that there's more space between the letters 
> of "Length" in the cairo_pdf version, as well.  Which is, I guess, The 
> Explanation.  Is it a font thing?
>
>    R. T.

David Winsemius, MD
West Hartford, CT

______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
LEGAL NOTICE
This message is intended for the use o...{{dropped:10}}



More information about the R-help mailing list