Warum werden griechische Buchstaben in der PDF-Ausgabe von R (v4) nicht gerendert?
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:

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 SourceCodePro
Schriftart 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- configure
Befehl 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
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 libharfbuzz0
und libharfbuzz-icu0
fehlerhaft war und das behoben wurde .
Dann wurde R neu konfiguriert und neu kompiliert, und das Problem war behoben.