Dlaczego greckie litery nie są renderowane w pliku wyjściowym PDF języka R (v4)?

Dec 05 2020

Próbuję wyeksportować prosty wykres do PDF z R, z grecką literą, taką jak ta:

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

Korzystam z systemu OpenSUSE LEAP 15.1 z preinstalowaną wersją R 3.5 - to działa dobrze. Dlatego konieczne jest zainstalowanie niezbędnych czcionek.

Jednak w wersji 4.0.3 (którą sam skompilowałem), to samo polecenie daje ramkę zamiast greckiej litery:

(Co ciekawe, skopiowanie i wklejenie tego pola wstawia prawidłową grecką literę).

Czy jest to podstawowa różnica między R v3 i v4 (jeśli tak, to która?), Czy też mogę wpływać na to podczas kompilacji? Nie mam tego samego problemu w systemie Windows, ale jest to wersja wydania, której sam nie skompilowałem i która ma możliwości ICU.

Patrząc na pliki PDF, plik v3 używa Cantarell-Regular i SourceCodePro-Bold. Wersja 4 używa Cantarell-Regular i Cantarell-Bold. Wszystkie czcionki są osadzane w podzbiorze. W jakiś sposób wydaje się, że R v4 nie przełącza się na tę SourceCodeProczcionkę, mimo że jest zainstalowana:

> 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

W configurepoleceniu R , widzę

Pominięte możliwości: OIOM

gdzie ICU = International Components for Unicode. Również:

sprawdzanie, czy pkg-config wie o cairo i pango ... nie

sprawdzanie, czy pkg-config wie o cairo ... tak

Czy jeden z tych dwóch może być spokrewniony?

Edit : Znalazłem i odczytać zmiany na symbol czcionki dla urządzeń Cairo Graphics , jeszcze

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

jak również

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

generuje jednak ten sam wynik, co powyżej, chociaż

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

pomyślnie zmienia standardową czcionkę, co oznacza, że ​​Courier jest zainstalowany i nadaje się do użytku.

Odpowiedzi

1 bers Dec 06 2020 at 03:21

Rekompilacja z obsługą ICU nie rozwiązała tego problemu - rekompilacja z cairo i pango tak .

Aby osiągnąć jedno i drugie, było wiele prób i błędów instalujących pakiety. Podsumowując, tak zypper in libicu-devel freetype-devel freetype pango-devel pango-tools libpango-1_0-0 harfbuzz-devel fribidi-devel fribidi. Wiele z tego mogło już zostać zainstalowanych, ale w trakcie zauważyłem, że instalacja libharfbuzz0i libharfbuzz-icu0 została zepsuta, i naprawiłem to .

Następnie ponownie skonfigurowano i ponownie skompilowano R i problem zniknął.