[R] CairoPDF and greek letter spacing

David Winsemius dwinsemius at comcast.net
Tue Jan 10 06:36:42 CET 2012

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


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

More information about the R-help mailing list