Por que as letras gregas não são renderizadas na saída PDF de R (v4)?

Dec 05 2020

Estou tentando exportar um gráfico simples para PDF de R, com uma letra grega, assim:

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

Estou em um sistema OpenSUSE LEAP 15.1 com R 3.5 pré-instalado - funciona bem. Portanto, as fontes necessárias devem ser instaladas.

No entanto, em R 4.0.3 (que eu mesmo compilei), o mesmo comando produz uma caixa em vez da letra grega:

(Curiosamente, copiar e colar esta caixa insere a letra grega correta.)

Esta é uma diferença fundamental entre R v3 e v4 (em caso afirmativo, qual?), Ou posso influenciar isso durante a compilação? Não tenho o mesmo problema no Windows, mas esta é uma versão de lançamento que eu não compilei e que possui recursos de ICU.

Olhando para os arquivos PDF, o arquivo v3 usa Cantarell-Regular e SourceCodePro-Bold. O v4 usa Cantarell-Regular e Cantarell-Bold. Todas as fontes são incorporadas a subconjuntos. Então, de alguma forma, o R v4 parece não conseguir mudar para essa SourceCodeProfonte, embora esteja instalado:

> 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

No configurecomando R , eu vejo

Capacidades ignoradas: ICU

onde ICU = International Components for Unicode. Também:

verificando se o pkg-config sabe sobre cairo e pango ... não

verificando se o pkg-config sabe sobre o Cairo ... sim

Um desses dois poderia estar relacionado?

Edit : Eu encontrei e li as alterações nas fontes de símbolo para dispositivos gráficos Cairo , ainda

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

assim como

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

produzir a mesma saída acima, embora

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

altera com êxito a fonte padrão, indicando que o Courier está instalado e pode ser usado.

Respostas

1 bers Dec 06 2020 at 03:21

Recompilar com suporte ICU não corrigiu isso - recompilar com cairo e pango corrigiu .

Para conseguir ambos, havia muitos pacotes de instalação por tentativa e erro. Em resumo, sim zypper in libicu-devel freetype-devel freetype pango-devel pango-tools libpango-1_0-0 harfbuzz-devel fribidi-devel fribidi. Muito disso pode já ter sido instalado, mas no processo, percebi que a instalação do libharfbuzz0e libharfbuzz-icu0 estava quebrada e consertei isso .

Em seguida, reconfigurou e recompilou R, e o problema foi embora.