Pourquoi les lettres grecques ne sont-elles pas rendues dans la sortie PDF de R (v4)?

Dec 05 2020

J'essaie d'exporter un tracé simple au format PDF à partir de R, avec une lettre grecque, comme ceci:

cairo_pdf("test.pdf")
barplot(1, main = "\u03C1")
dev.off()

Je suis sur un système OpenSUSE LEAP 15.1 avec R 3.5 préinstallé - cela fonctionne très bien. Les polices nécessaires doivent donc être installées.

Cependant, dans R 4.0.3 (que j'ai compilé moi-même), la même commande donne une boîte au lieu de la lettre grecque:

(Fait intéressant, copier-coller cette boîte insère la lettre grecque correcte.)

Est-ce une différence fondamentale entre R v3 et v4 (si oui, laquelle?), Ou puis-je influencer cela lors de la compilation? Je n'ai pas le même problème sous Windows, mais c'est une version release que je n'ai pas compilée moi-même et qui a des capacités ICU.

En regardant les fichiers PDF, le fichier v3 utilise Cantarell-Regular et SourceCodePro-Bold. Le v4 utilise Cantarell-Regular et Cantarell-Bold. Toutes les polices sont intégrées dans un sous-ensemble. Donc, d'une manière ou d'une autre, R v4 semble ne pas pouvoir passer à cette SourceCodePropolice, bien qu'elle soit installée:

> fc-list | grep SourceCodePro
/usr/share/fonts/truetype/SourceCodePro-Medium.otf: Source Code Pro,Source Code Pro Medium:style=Medium,Regular
/usr/share/fonts/truetype/SourceCodePro-Regular.otf: Source Code Pro:style=Regular
/usr/share/fonts/truetype/SourceCodePro-Bold.otf: Source Code Pro:style=Bold
/usr/share/fonts/truetype/SourceCodePro-Black.otf: Source Code Pro,Source Code Pro Black:style=Black,Regular
/usr/share/fonts/truetype/SourceCodePro-BoldIt.otf: Source Code Pro:style=Bold Italic
/usr/share/fonts/truetype/SourceCodePro-Semibold.otf: Source Code Pro,Source Code Pro Semibold:style=Semibold,Regular
/usr/share/fonts/truetype/SourceCodePro-ExtraLightIt.otf: Source Code Pro,Source Code Pro ExtraLight:style=ExtraLight Italic,Italic
/usr/share/fonts/truetype/SourceCodePro-BlackIt.otf: Source Code Pro,Source Code Pro Black:style=Black Italic,Italic
/usr/share/fonts/truetype/SourceCodePro-LightIt.otf: Source Code Pro,Source Code Pro Light:style=Light Italic,Italic
/usr/share/fonts/truetype/SourceCodePro-MediumIt.otf: Source Code Pro,Source Code Pro Medium:style=Medium Italic,Italic
/usr/share/fonts/truetype/SourceCodePro-It.otf: Source Code Pro:style=Italic
/usr/share/fonts/truetype/SourceCodePro-SemiboldIt.otf: Source Code Pro,Source Code Pro Semibold:style=Semibold Italic,Italic
/usr/share/fonts/truetype/SourceCodePro-Light.otf: Source Code Pro,Source Code Pro Light:style=Light,Regular
/usr/share/fonts/truetype/SourceCodePro-ExtraLight.otf: Source Code Pro,Source Code Pro ExtraLight:style=ExtraLight,Regular

Dans la configurecommande R , je vois

Capacités ignorées: ICU

où ICU = Composants internationaux pour Unicode. Également:

vérifier si pkg-config connaît le Caire et pango ... non

vérifier si pkg-config connaît le Caire ... oui

L'un de ces deux pourrait-il être lié?

Edit : J'ai trouvé et lu les modifications apportées aux polices de symboles pour les périphériques graphiques du Caire , pour le moment

cairo_pdf("test.pdf", symbolfamily = cairoSymbolFont("Courier", usePUA = FALSE))
barplot(1, main = "\u03C1")
dev.off()

aussi bien que

cairo_pdf("test.pdf", symbolfamily = cairoSymbolFont("Courier", usePUA = TRUE))
barplot(1, main = "\u03C1")
dev.off()

produire le même résultat que ci-dessus, bien que

cairo_pdf("test.pdf", family = "Courier")
barplot(1, main = "\u03C1")
dev.off()

modifie avec succès la police standard, indiquant que Courier est installé et utilisable.

Réponses

1 bers Dec 06 2020 at 03:21

La recompilation avec le support ICU n'a pas résolu ce problème - la recompilation avec cairo et pango l'a fait .

Pour réaliser les deux, il y avait beaucoup de packages d'installation d'essais et d'erreurs. En résumé, je l'ai fait zypper in libicu-devel freetype-devel freetype pango-devel pango-tools libpango-1_0-0 harfbuzz-devel fribidi-devel fribidi. Une grande partie de cela a peut-être déjà été installée, mais dans le processus, j'ai remarqué que l'installation de libharfbuzz0et libharfbuzz-icu0 était cassée et corrigée .

Puis reconfiguré et recompilé R, et le problème avait disparu.