[R] pdf font embedding --- again

Paul Murrell p.murrell at auckland.ac.nz
Tue Aug 30 03:34:00 CEST 2005


Hi


ivo_welch-rstat8303 at mailblocks.com wrote:
> Hi Paul:
> 
> I very much appreciate your spending the time to help me here, and I 
> hope we will get a nice how-to document from this for other 
> novices---or at least a google-able record in the r-help archive.


I think we're almost there.  All we have to do now is actually USE the 
Lucida font (see below) ...


> * The following is working R code to embed fonts, such as the lucida 
> font family:
> 
>   afmfiles <- c("/usr/share/texmf/fonts/afm/yandy/lubright/lbr.afm",
>               "/usr/share/texmf/fonts/afm/yandy/lubright/lbd.afm",
>               "/usr/share/texmf/fonts/afm/yandy/lubright/lbi.afm",
>               "/usr/share/texmf/fonts/afm/yandy/lubright/lbdi.afm",
>               "/usr/share/texmf/fonts/afm/yandy/lumath/lbms.afm")
> 
>     # Set up the mapping for "lucida" font family
>   postscriptFonts(lucida=postscriptFont("Lucida", metrics=afmfiles))
>     # Specify that the "lucida" font is to be used


# Actually, if family= had worked we would have specified that
# "lucida" should be used;  what fonts= does is just ensure that
# the font gets mentioned in the PostScript output, but it does
# not set the font.  We have to use par(family) to do that, as below


>   postscript(file="lu1.ps", fonts="lucida");
>   l<- 40:80;


# Specify that we should use the "lucida" font!!!
par(family="lucida")


>   plot(l,l,pch=l);
>   dev.off();


Now when you ghostscript the output it should include "lucida" because 
that font is now used.  In the original code, the only font that was 
used was Helvetica, so ghostscript only embedded Helvetica.

Paul


> * The resulting file lu1.ps knows about Lucida fonts, e.g.,
> 
> $ grep LucidaBright-Demi lu1.ps
> %%+ font LucidaBright-Demi
> %%+ font LucidaBright-DemiItalic
> %%IncludeResource: font LucidaBright-Demi
> /LucidaBright-Demi findfont
> %%IncludeResource: font LucidaBright-DemiItalic
> /LucidaBright-DemiItalic findfont
> 
> but is also still includes the Helvetica font family, even though my 
> intent is to get rid of them.
> 
> 
> * In the same local directory, I have a Fontmap file (note 
> capitalization; thank strace!), which is
> 
> /LucidaBright (/usr/local/share/texmf/fonts/type1/yandy/lbr.pfb);
> /LucidaBright-Demi (/usr/local/share/texmf/fonts/type1/yandy/lbd.pfb);
> /LucidaBright-Italic (/usr/local/share/texmf/fonts/type1/yandy/lbi.pfb);
> /LucidaBright-DemiItalic 
> (/usr/local/share/texmf/fonts/type1/yandy/lbdi.pfb);
> /LucidaNewMath-Symbol 
> (/usr/local/share/texmf/fonts/type1/yandy/lbms.pfb);
> 
> 
> * I can now execute ghostscript,
> 
> $ gs   -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sPAPERSIZE=a4 
> -sOutputFile=testembed.pdf lu1.ps
> Loading NimbusSanL-Regu font from 
> /usr/share/fonts/default/ghostscript/n019003l.pfb... 2614080 1177851 
> 1691032 395776 0 done.
> Loading NimbusSanL-Bold font from 
> /usr/share/fonts/default/ghostscript/n019004l.pfb... 2748280 1295559 
> 1711216 410271 0 done.
> Loading NimbusSanL-ReguItal font from 
> /usr/share/fonts/default/ghostscript/n019023l.pfb... 2862296 1345751 
> 1691032 368290 0 done.
> Loading NimbusSanL-BoldItal font from 
> /usr/share/fonts/default/ghostscript/n019024l.pfb... 2976312 1462430 
> 1711216 382930 0 done.
> Loading StandardSymL font from 
> /usr/share/fonts/default/ghostscript/s050000l.pfb... 3036864 1512937 
> 1731400 392499 0 done.
> Loading LucidaBright font from 
> /usr/local/share/texmf/fonts/type1/yandy/lbr.pfb... 3094128 1564220 
> 1731400 379225 0 done.
> Loading LucidaBright-Demi font from 
> /usr/local/share/texmf/fonts/type1/yandy/lbd.pfb... 3154680 1618028 
> 1731400 386450 0 done.
> Loading LucidaBright-Italic font from 
> /usr/local/share/texmf/fonts/type1/yandy/lbi.pfb... 3195048 1667744 
> 1751584 396673 0 done.
> Loading LucidaBright-DemiItalic font from 
> /usr/local/share/texmf/fonts/type1/yandy/lbdi.pfb... 3255600 1720688 
> 1751584 403496 0 done.
> Loading LucidaNewMath-Symbol font from 
> /usr/local/share/texmf/fonts/type1/yandy/lbms.pfb... 3316152 1776143 
> 1751584 409361 0 done.
> 
> which seems to indicate that the Fontmap file was found.  (Adding a 
> "-GS_FONTPATH=." to point to the local directory is not necessary.)
> 
> * Alas, the output still does not have my Lucida fonts:
> 
> $ pdffonts testembed.pdf
> 
> name                                 type         emb sub uni object ID
> ------------------------------------ ------------ --- --- --- ---------
> Helvetica                            Type 1C      yes no  no      10  0
> 
> 
> Also, looking at either lu1.ps or testembed.pdf with previewers shows 
> that I am still using Helvetica fonts, not Lucida fonts.  so something 
> is still missing somewhere.  (I also tried creating a pdf file directly 
> under R, and though it gives me no error, and although the resulting 
> pdf file claims to reference both helvetica and lucida fonts [and 
> others], upon viewing, I can see that there are only helvetica fonts 
> visible; no lucida fonts.)
> 
> further help and advice would still be appreciated.
> 
> Regards,
> 
> /iaw
> 
> 
> -----Original Message-----
> From: Paul Murrell <p.murrell at auckland.ac.nz>
> To: ivo_welch-rstat8303 at mailblocks.com
> Cc: ripley at stats.ox.ac.uk; r-help at stat.math.ethz.ch
> Sent: Tue, 30 Aug 2005 12:19:47 +1200
> Subject: Re: [R] pdf font embedding --- again
> 
> Hi
> 
>  ivo_welch-rstat8303 at mailblocks.com wrote:
>  > Hi Paul:
>   > > You are correct. it was the same little bug I hit on. Specifying 
> the > full (not the symlinked) afm filenames lets me run the code. No R 
> 
>>error. yoohoo!
> 
>   > > alas, the files don't seem to come out right. I can use these 
> commands > on the R postscript() and on the R pdf() device. they have 
> an effect > on both. (that is, if I grep for lucida in the resulting ps 
> or pdf > file, respectively, the word lucida appears in both files). 
> alas, > usage is another story:
> 
>   Right, the fonts are referred to in the PostScript or PDF file, but no 
> font information is embedded. Now we move to the second problem I 
> mentioned, embedding the fonts. Can you try using ghostscript? (see my 
> first post)
> 
>  Paul
> 
>  > $ pdffonts tonativepdf.pdf
>  > name type emb sub uni object ID
>   > ------------------------------------ ------------ --- --- --- 
> ---------
>  > ZapfDingbats Type 1 no no no 5 0
>  > Helvetica Type 1 no no no 10 0
>  > Helvetica-Bold Type 1 no no no 11 0
>  > Helvetica-Oblique Type 1 no no no 12 0
>  > Helvetica-BoldOblique Type 1 no no no 13 0
>  > Symbol Type 1 no no no 14 0
>  > LucidaBright Type 1 no no no 15 0
>  > LucidaBright-Demi Type 1 no no no 16 0
>  > LucidaBright-Italic Type 1 no no no 17 0
>  > LucidaBright-DemiItalic Type 1 no no no 18 0
>  > LucidaNewMath-Symbol Type 1 no no no 19 0
>   > > This is not so great. I had hoped to get rid of the Helvetica 
> fonts > here. Moreover, if I run my "firsttops.ps" file through 
> ps2pdf12, I > see
>  > > $ ps2pdf12 firsttops.ps firsttops.pdf ; pdffonts firsttops.pdf
>  > name type emb sub uni object ID
>   > ------------------------------------ ------------ --- --- --- 
> ---------
>  > Helvetica Type 1 no no no 9 0
>   > > So, it seems that the lucida font is not used, and therefore 
> optimized > away.
>  > > regards,
>  > > /ivo
>  > > > ---
>  > ivo welch
>  > > -----Original Message-----
>  > From: Paul Murrell <p.murrell at auckland.ac.nz>
>  > To: ivo_welch-rstat8303 at mailblocks.com
>  > Cc: ripley at stats.ox.ac.uk; r-help at stat.math.ethz.ch
>  > Sent: Tue, 30 Aug 2005 11:49:38 +1200
>  > Subject: Re: [R] pdf font embedding --- again
>  > > Hi
>  > > ivo_welch-rstat8303 at mailblocks.com wrote:
>   > > > > Ooops. hit the button too soon. I have tried as arguments > 
> variation of > the fonts and family arguments to postscript, such as > 
> getting the case > right (i.e., lucida rather than Lucida). Alas
>  > > > > postscript(file="test.ps", fonts="lucida");
>   > > *** glibc detected *** free(): invalid pointer: 0x0000000000f7dfb8 
> 
>>***
> 
>   > > > this is under R 2.1.1, 2005-06-20, built under gentoo from > 
> scratch.
>   > > > so, the problem is probably now internal, not the commands. I > 
> guess I > will now investigate glibc in a little more detail...
>   > > You might just be tickling the segfault you reported earlier 
> (which > appears to happen [sometimes] when R cannot find the AFM 
> files).
>  > Try ...
>  > > afmfiles <- c("/usr/share/texmf/fonts/afm/yandy/lubright/lbr.afm",
>  > "/usr/share/texmf/fonts/afm/yandy/lubright/lbd.afm",
>  > "/usr/share/texmf/fonts/afm/yandy/lubright/lbi.afm",
>  > "/usr/share/texmf/fonts/afm/yandy/lubright/lbdi.afm",
>  > "/usr/share/texmf/fonts/afm/yandy/lubright/lbms.afm")
>  > > Paul
>  > > > -----Original Message-----
>  > > From: Paul Murrell <p.murrell at auckland.ac.nz>
>  > > To: Paul Murrell <paul at stat.auckland.ac.nz>
>   > > Cc: ivo_welch-rstat8303 at mailblocks.com; ripley at stats.ox.ac.uk; > > 
> r-help at stat.math.ethz.ch
>  > > Sent: Tue, 30 Aug 2005 10:04:11 +1200
>  > > Subject: Re: [R] pdf font embedding --- again
>  > > > Hi
>  > > > Paul Murrell wrote:
>  > > > Hi
>  > > > > I think there are two problems:
>  > > > > (i) You are specifying the font incorrectly. Try ...
>  > > > > # You might need to specify full paths to these
>   > > > afmfiles <- c("lbr.afm", "lbd.afm", "lbi.afm", "lbdi.afm", > 
> "lbms.afm");
>  > > > # Set up the mapping for "lucida" font family
>   > > > postscriptFonts(lucida=postscriptFont("Lucida", 
> metrics=afmfiles))
>  > > > # Specify that the "lucida" font is to be used
>  > > > postscript(file="test.ps", family="lucida");
>  > > > Thanks to Brian Ripley for pointing out that that should be ...
>  > > > postscript(file="test.ps", fonts="lucida");
>  > > > > l<- 40:80;
>  > > > plot(l,l,pch=l);
>  > > > dev.off();
>  > > > > Should work for pdf() too.
>   > > > > This should put a reference to the appropriate font in the > > 
> PostScript or > PDF file that R creates.
>   > > > > (ii) R does not embed font information. But you can, for > 
> example, > use > ghostscript to do it, as long as you tell ghostscript 
>  > about the > font > too. You might have to set up a file 'FontMap' 
> which > looks > something > like ...
>  > > > > /Lucida (PATH_TO/lb___.pfb);
>   > > > > ... (assuming that lb___.pfb is the name of the .pfb file for 
>  > the > Lucida > font). Then try something like (NOTE that you have to 
> 
>>specify
> 
>  > > >> GS_FONTPATH to tell ghostscript where your FontMap file is) ...
>   > > > > > GS_FONTPATH=PATH_TO_FontMap gs -dBATCH -dNOPAUSE > 
> -sDEVICE=pdfwrite
>  > > >> -sPAPERSIZE=a4 -sOutputFile=testembed.pdf test.pdf
>   > > > > > This should give you a file with the font info embedded and 
> 
>>then > you > should be able to include that in a LaTeX document.
> 
>  > > > > Paul
>   > > > > p.s. Thanks for the segfault report. I will look at why that 
> is > >>happening.
>  > > > > > > ivo_welch-rstat8303 at mailblocks.com wrote:
>  > > > >> Thank you---as always.
>  > > >>
>  > > >> still, I remain font-desparate.
>  > > >>
>   > > >> I would love to use the fonts from my book, but [a] I cannot > 
> figure > >> out how to do this yet even in the R postscript device; and 
>  > [b] I am > >> using the R pdf device, not the postscript device. I > 
> guess if I can > >> solve [a], then I can rewrite all my graphics > 
> creations now into the > >> postscript device, and replace the > 
> dev.off() with something that >> > follows it with ps2pdf. The > 
> following attempt, however, does not work:
>  > > >>
>   > > >> afmfiles <- c("lbr.afm", "lbd.afm", "lbi.afm", "lbdi.afm", >> > 
> 
>>"lbms.afm");
> 
>  > > >> Lucida <- postscriptFont("Lucida", metrics=afmfiles);
>  > > >> postscript(file="test.ps", family=Lucida);
>  > > >> l<- 40:80;
>  > > >> plot(l,l,pch=l);
>  > > >> dev.off();
>  > > >>
>   > > >> By the way, if I try " postscript(family=afmfiles);" then I do 
>  > not > >> get an R error, but R 2.1.0 segfaults, which is probably not 
>  > >> > desirable. This occurs even if there is no .afm file in the > 
> current >> > directory.
>  > > >>
>  > > >>
>   > > >> Can I make a suggestion to the R team? It would be nice if I > 
> could > >> specify a pdf() device parameter that says "choose font > 
> settings to > >> embed all fonts" (i.e., do not use fonts that cannot > 
> be embedded, >> > either). Something that guarantees me that I get a > 
> figure that I can >> > give to someone that is fully specified. Right > 
> now, accomplishing >> > this is not easy to figure out, and perhaps not 
>  > even possible. Yes, >> > in the list of font families that R 
> recognizes > are some fonts that do >> > not seem among the 13 standard 
> fonts (such > as URWbookman). moreover, >> > if I choose it as my pdf 
> font family, it > is smart enough to use a >> > different symbol file 
> ('StandardSymL'), > which I hope is also open and >> > not adobe. If 
> so, they could be used > in principle. How do I get R to >> > embed 
> URWbookman? ZapfDingbats > always seems to be included, so I hope >> > 
> this is open and > embeddable.
>  > > >>
>  > > >> more help would be highly appreciated.
>  > > >>
>  > > >> Regards,
>  > > >>
>  > > >> /iaw
>  > > >> ---
>  > > >> ivo welch
>  > > >>
>  > > >> -----Original Message-----
>  > > >> From: Prof Brian Ripley <ripley at stats.ox.ac.uk>
>  > > >> To: ivo_welch-rstat8303 at mailblocks.com
>  > > >> Cc: r-help at stat.math.ethz.ch
>  > > >> Sent: Mon, 22 Aug 2005 17:07:14 +0100 (BST)
>  > > >> Subject: Re: [R] pdf font embedding --- again
>  > > >>
>  > > >> On Mon, 22 Aug 2005 ivo_welch-rstat8303 at mailblocks.com wrote:
>  > > >>
>  > > >> >
>   > > >> > dear R wizards--- I would like to do some book-on-demand > 
> printing
>  > > >>> at a
>  > >>
>   > > >> > popular printer named lulu, but lulu requires inclusion even 
> of > the
>   > > >> > basic postscript fonts. Interestingly, my book itself does 
> not > need
>   > > >> > the 14 base acrobat fonts, only the embedded R figures do. Of 
> 
>>course,
> 
>   > > >> > I really would like to get pdftex to embed the fonts, but how 
> 
>>to do
> 
>   > > >> > this is not obvious either. [This method seems to be what the 
> R > help
>   > > >> > page is indicating... The software including the PostScript > 
> plot file
>   > > >> > should either embed the font outlines (usually from '.pfb' or 
> 
>>'.pfa'
> 
>   > > >> > files) or use DSC comments to instruct the print spooler to 
> do > so.)
>  > > >>
>   > > >> Why not use the fonts your book does use in the figures? 
> (That's > how
>  > > >> my books are done.)
>  > > >>
>   > > >> > So, I would really, really like to embed the necessary fonts 
> 
>>with
> 
>  > > >>> the R
>  > >>
>   > > >> > figures. I first reread the discussion in this mailing list > 
> about
>   > > >> > (eps) font embedding earlier this year. This was ultimately 
> not > very
>   > > >> > helpful. First, I do not know how to instruct my embedding > 
> program to
>   > > >> > include the fonts that R figures want. Second, I already 
> start > with
>   > > >> > the pdf device, so distilling eps files is not a good > 
> option--and it
>  > > >> > would seem a bit crazy to first use the wrong output device
>   > > >> > (postscript), then ship my files over to a windows machine > 
> somewhere
>   > > >> > that has distiller installed, run distiller by hand, then ftp 
> 
>>them > >> back
> 
>  > > >> > to my linux machine---just for getting the fonts embedded.
>  > > >> >
>   > > >> > Is it impossible to get R to embed the necessary fonts in its 
> 
>>pdf
> 
>  > > >> > output?
>  > > >>
>   > > >> Yes, as it has no access to them. They are not Open Source. You 
> 
>>may
> 
>   > > >>> be able to use URW clones, depending on their licensing > 
> conditions.
>  > >>
>  > > >>
>  > > >> -- Brian D. Ripley, ripley at stats.ox.ac.uk
>   > > >> Professor of Applied Statistics, > 
> http://www.stats.ox.ac.uk/~ripley/
>  > > >> University of Oxford, Tel: +44 1865 272861 (self)
>  > > >> 1 South Parks Road, +44 1865 272866 (PA)
>  > > >> Oxford OX1 3TG, UK Fax: +44 1865 272595
>  > > >>
>  > > >> ______________________________________________
>  > > >> R-help at stat.math.ethz.ch mailing list
>  > > >> https://stat.ethz.ch/mailman/listinfo/r-help
>   > > >> PLEASE do read the posting guide! >> > > 
> http://www.R-project.org/posting-guide.html
>  > > > > >
>  > > -- Dr Paul Murrell
>  > > Department of Statistics
>  > > The University of Auckland
>  > > Private Bag 92019
>  > > Auckland
>  > > New Zealand
>  > > 64 9 3737599 x85392
>  > > paul at stat.auckland.ac.nz
>  > > http://www.stat.auckland.ac.nz/~paul/
>  > > >
>  > -- Dr Paul Murrell
>  > Department of Statistics
>  > The University of Auckland
>  > Private Bag 92019
>  > Auckland
>  > New Zealand
>  > 64 9 3737599 x85392
>  > paul at stat.auckland.ac.nz
>  > http://www.stat.auckland.ac.nz/~paul/
>  > > ______________________________________________
>  > R-help at stat.math.ethz.ch mailing list
>  > https://stat.ethz.ch/mailman/listinfo/r-help
>   > PLEASE do read the posting guide! 
> http://www.R-project.org/posting-guide.html
> 
>  -- Dr Paul Murrell
>  Department of Statistics
>  The University of Auckland
>  Private Bag 92019
>  Auckland
>  New Zealand
>  64 9 3737599 x85392
>  paul at stat.auckland.ac.nz
>  http://www.stat.auckland.ac.nz/~paul/
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html


-- 
Dr Paul Murrell
Department of Statistics
The University of Auckland
Private Bag 92019
Auckland
New Zealand
64 9 3737599 x85392
paul at stat.auckland.ac.nz
http://www.stat.auckland.ac.nz/~paul/




More information about the R-help mailing list