ギリシャ文字がR(v4)のPDF出力でレンダリングされないのはなぜですか?

Dec 05 2020

次のようなギリシャ文字を使用して、RからPDFに簡単なプロットをエクスポートしようとしています。

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

R3.5がプリインストールされたOpenSUSELEAP15.1システムを使用しています。これは正常に機能します。したがって、必要なフォントをインストールする必要があります。

ただし、R 4.0.3(自分でコンパイルしたもの)では、同じコマンドでギリシャ文字の代わりにボックスが生成されます

(興味深いことに、このボックスをコピーして貼り付けると、正しいギリシャ文字が挿入されます)。

これはRv3とv4の根本的な違いですか(もしそうなら、どちらですか?)、またはコンパイル中にこれに影響を与えることができますか?Windowsでも同じ問題はありませんが、これは自分でコンパイルしておらず、ICU機能を備えたリリースバージョンです。

PDFファイルを見ると、v3ファイルはCantarell-RegularとSourceCodePro-Boldを使用しています。v4は、Cantarell-RegularとCantarell-Boldを使用します。すべてのフォントはサブセットに埋め込まれています。したがって、どういうわけか、R v4SourceCodeProはインストールされていますが、そのフォントへの切り替えに失敗しているようです。

> 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

Rconfigureコマンドでは、

スキップされた機能:ICU

ここで、ICU = Unicodeの国際コンポーネント。また:

pkg-configがcairoとpangoについて知っているかどうかをチェックしています...いいえ

pkg-configがcairoについて知っているかどうかをチェックしています...はい

これら2つのうちの1つは関連している可能性がありますか?

編集:私が見つかりましたと読んだことがあるカイロのグラフィックスデバイスのシンボルフォントへの変更をまだ、

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

及び

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

上記と同じ出力を生成しますが

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

標準フォントを正常に変更し、Courierがインストールされて使用可能であることを示します。

回答

1 bers Dec 06 2020 at 03:21

ICUサポートを使用して再コンパイルしても、これは修正されませんでした。cairoおよびpangoを使用して再コンパイルすると修正されまし

両方を達成するために、パッケージのインストールには試行錯誤がたくさんありました。要約すると、私はしましたzypper in libicu-devel freetype-devel freetype pango-devel pango-tools libpango-1_0-0 harfbuzz-devel fribidi-devel fribidi。多くのそれのは、すでにインストールされている可能性があり、その過程で、私はのインストール気づいlibharfbuzz0libharfbuzz-icu0 壊れていることを修正しました。

次に、Rを再構成して再コンパイルすると、問題は解決しました。