Portál AbcLinuxu, 30. dubna 2025 10:19

Kterak písmo Computer Modern v grafických výstupech z R míti

11.6.2007 18:50 | Přečteno: 1814× | Výběrový blog | poslední úprava: 11.6.2007 19:00

Případ: Píšu něco v LaTeXu a chci v tom mít grafiku vytvořenou pomocí R. Kompilovat budu pdfLaTeXem, takže chci grafy v PDF, ale hlavně aby měly stejně krásné písmo jako zbytek díla, tj. Computer Modern.

Mám k dispozici Debian Etch a Ubuntu Feisty, v obou distribuční texlive a R z repozitářů českého mirroru CRAN:

deb http://cran.biokontakt.cz/bin/linux/debian stable/

deb http://cran.biokontakt.cz/bin/linux/ubuntu feisty/

Problém: Standardním písmem grafických výstupů R je Helvetica. Mohl bych sice přizpůsobit zbytek dokumentu balíkem "times", ale to se mi nechce. R standardně písmo Computer Modern neumí.

Řešení: Musím použít písmo s kterým si R poradí, což je cm-lgc (součást texlive), a "Adobe Symbol encoding", k čemuž potřebuji soubor /usr/lib/R/library/grDevices/afm/cmsyase.afm, který je k mání třeba zde. Tento postup je na příkladu Ubuntu 7.04. V Debianu je nejspíš stejný, ale to teprve uvidím.

V první řadě si musím v R nadefinovat objekt CM, který bude reprezentovat písmo Computer Modern

>CM <- Type1Font("CM", c("/usr/share/texmf-texlive/fonts/afm/public/cm-lgc/fcmr8a.afm", "/usr/share/texmf-texlive/fonts/afm/public/cm-lgc/fcmb8a.afm", "/usr/share/texmf-texlive/fonts/afm/public/cm-lgc/fcmri8a.afm", "/usr/share/texmf-texlive/fonts/afm/public/cm-lgc/fcmbi8a.afm", "/usr/lib/R/library/grDevices/afm/cmsyase.afm"))

Aktivuju zařízení "pdf", do něhož půjde grafický výstup:

>pdf("cm.pdf",family=CM)

Teď si můžu vesele malovat. Například takto:

>plot(read.table("histogram.txt",sep="\t",na.strings="0")$V2, type="h",xaxs="i",yaxs="i",xla="Relative nuclear DNA content", ylab="Number of events")

Teď musím deaktivovat zařízení "pdf", čímž mám hotový výstupní soubor.

>dev.off()

Ale ouha, PDF neobsahuje font, takže se zobrazuje špatně. Musím tedy fonty zahrnout do PDFka:

>embedFonts("cm.pdf", outfile="cmembed.pdf", fontpaths=c("/usr/share/texmf-texlive/fonts/type1/public/cm-lgc/"))

To by bylo.

       

Hodnocení: 100 %

        špatnédobré        

Obrázky

Kterak písmo Computer Modern v grafických výstupech z R míti, obrázek 1

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

11.6.2007 19:09 David Jaša | skóre: 44 | blog: Dejvův blog
Rozbalit Rozbalit vše Re: Kterak písmo Computer Modern v grafických výstupech z R míti
Odpovědět | Sbalit | Link | Blokovat | Admin
Hm, to je to písmo, kterým se do světa hlásí: "Já používám TeX!". ;-)
oVirt | SPICE
11.6.2007 19:14 frdrx | skóre: 29 | blog: frdrx
Rozbalit Rozbalit vše Re: Kterak písmo Computer Modern v grafických výstupech z R míti
V mém oboru toto nefunguje. Botanici neví co to je TeX. Udělal jsem svojí milé konferenční poster v LaTeXu a v pravém dolním rohu jsem nechal jeho logo (bylo to v šabloně). Prý to byl hodně častý dotaz, proč je tam napsáno latex, a co to vlastně znamená. Bohužel jsem jí to neřekl...
Patička mi slouží k tomu, abych si lépe poznal svoje příspěvky.
11.6.2007 21:56 martin
Rozbalit Rozbalit vše Re: Kterak písmo Computer Modern v grafických výstupech z R míti
Odpovědět | Sbalit | Link | Blokovat | Admin
Díky za tip, ale říkam si, zda není jednodušší a mocnější prostě v Rku zplodit *.eps pomocí 'postscript', vložit to do LaTeXu a tam pomocí baliku "psfrag" udělat libovolné LaTexové úpravy popisků a na závěr to projet prikazem

cslatex soubor.tex && dvipdf soubor

?
11.6.2007 22:29 frdrx | skóre: 29 | blog: frdrx
Rozbalit Rozbalit vše Re: Kterak písmo Computer Modern v grafických výstupech z R míti
Taky díky za tip. Psfrag by určitě přinesl větší volnost, kterou ale asi ani nepotřebuju, ale určitě to prozkoumám. Lze pomocí psfrag naráz změnit font? Měnit se s každým řetězcem pomocí \psfrag{tag}[ posn ][ psposn ][ scale ][ rot ]{LTEX text} mi přijde těžkopádné... R umí všechny popisky přesně tak jak je potřebuju. Dávám přednost přímé tvorbě PDF pdflatexem (ne pdfcslatexu, protože nepíšu česky), funguje k naprosté spokojenosti. S převodem dvi přes ps do pdf jsem docela zápasil (což je ale asi jen můj problém). Moje práce, tak jak teď vypadá, je dost pdfcentrická, takže volím tuto cestu. A když si to Rko naskriptuju, můžu dělat grafy jak na běžícím pásu.
Patička mi slouží k tomu, abych si lépe poznal svoje příspěvky.
12.6.2007 08:48 Boo
Rozbalit Rozbalit vše Re: Kterak písmo Computer Modern v grafických výstupech z R míti
Odpovědět | Sbalit | Link | Blokovat | Admin
Muzete mi vysvetlit co je na Computer Modern krasnyho ? Ja objevil Libertine a od tech dob se mi TeX zacal libit :) http://linuxlibertine.sourceforge.net/#status
12.6.2007 12:03 frdrx | skóre: 29 | blog: frdrx
Rozbalit Rozbalit vše Re: Kterak písmo Computer Modern v grafických výstupech z R míti
Vysvětlit to nemůžu, protože vysvětlovat proč něco považuju za krásné neumím. CM je, myslím, naprosto úžasný, ale říct přesně proč neumím, protože jsem BFU. Děkuju za tip na font, který zatím neznám. Na první pohled vypadá moc hezky; vyzkouším a určitě někdy použiju.
Patička mi slouží k tomu, abych si lépe poznal svoje příspěvky.
12.6.2007 13:36 kaaja | skóre: 24 | blog: Sem tam něco | Podbořany, Praha
Rozbalit Rozbalit vše Re: Kterak písmo Computer Modern v grafických výstupech z R míti
Me se zase strasně líbí slabikář http://www.econ.muni.cz/~qasar/fontanasia/font-mf-mf/font-mf-mf.html
12.6.2007 14:10 Boo
Rozbalit Rozbalit vše Re: Kterak písmo Computer Modern v grafických výstupech z R míti
Drsny :) Olsak si neco musel slehnout :)
27.4.2010 11:16 Petr Špaček
Rozbalit Rozbalit vše Re: Kterak písmo Computer Modern v grafických výstupech z R míti
Odpovědět | Sbalit | Link | Blokovat | Admin
Uvedeným postupem se mi nepodařilo správně rozjet češtinu. (Zlobí jen některé znaky, jako třeba Ě. Přitom Ž se zobrazuje dobře.)

Pomohlo použití fontu cm-super a příslušné upravení názvů afm souborů.

(cesty k souborům s fonty vedou na rozbalené soubory z cm-super a jeden poslední soubor je stažený z URL v článku)

Změny proti uvedenému postupu:

CM <- Type1Font("CM", c("afm/sfrm0800.afm","afm/sfrb0800.afm","afm/sfti0800.afm","afm/sfbi0800.afm", "/usr/lib/R/library/grDevices/afm/cmsyase.afm") )

embedFonts("cm.pdf", outfile="cmembed.pdf", fontpaths=c("fonts/"))

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.