Warum werden griechische Buchstaben in der PDF-Ausgabe von R (v4) nicht gerendert?

Dec 05 2020

Ich versuche, ein einfaches Diagramm mit einem griechischen Buchstaben wie folgt aus R in PDF zu exportieren:

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

Ich bin auf einem OpenSUSE LEAP 15.1-System mit vorinstalliertem R 3.5 - dies funktioniert einwandfrei. Daher müssen die erforderlichen Schriftarten installiert werden.

In R 4.0.3 (das ich selbst zusammengestellt habe) ergibt derselbe Befehl jedoch ein Kästchen anstelle des griechischen Buchstabens:

(Interessanterweise wird beim Kopieren und Einfügen dieses Kästchens der richtige griechische Buchstabe eingefügt.)

Ist dies ein grundlegender Unterschied zwischen R v3 und v4 (wenn ja, welcher?) Oder kann ich dies während der Kompilierung beeinflussen? Ich habe nicht das gleiche Problem unter Windows, aber dies ist eine Release-Version, die ich nicht selbst kompiliert habe und die über ICU-Funktionen verfügt.

In den PDF-Dateien verwendet die v3-Datei Cantarell-Regular und SourceCodePro-Bold. Die Version 4 verwendet Cantarell-Regular und Cantarell-Bold. Alle Schriftarten sind in Teilmengen eingebettet. Irgendwie scheint R v4 nicht auf diese SourceCodeProSchriftart umzuschalten, obwohl sie installiert ist:

> 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

Im R- configureBefehl sehe ich

Übersprungene Funktionen: Intensivstation

Dabei gilt ICU = International Components for Unicode. Ebenfalls:

Überprüfen, ob pkg-config etwas über Kairo und Pango weiß ... nein

Überprüfen, ob pkg-config etwas über Kairo weiß ... ja

Könnte einer dieser beiden verwandt sein?

Bearbeiten : Ich habe festgestellt , und las Änderungen Symbol Schriften für Cairo Graphics Devices , noch

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

ebenso gut wie

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

erzeugen jedoch die gleiche Ausgabe wie oben

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

Ändert erfolgreich die Standardschriftart und zeigt damit an, dass Courier installiert und verwendbar ist.

Antworten

1 bers Dec 06 2020 at 03:21

Das Neukompilieren mit ICU-Unterstützung hat dies nicht behoben - das Neukompilieren mit Kairo und Pango hat dies getan .

Um beides zu erreichen, gab es viele Trial-and-Error-Installationspakete. Zusammenfassend habe ich getan zypper in libicu-devel freetype-devel freetype pango-devel pango-tools libpango-1_0-0 harfbuzz-devel fribidi-devel fribidi. Vieles davon wurde möglicherweise bereits installiert, aber dabei bemerkte ich, dass die Installation von libharfbuzz0und libharfbuzz-icu0 fehlerhaft war und das behoben wurde .

Dann wurde R neu konfiguriert und neu kompiliert, und das Problem war behoben.