ग्रीक अक्षर R (v4) PDF आउटपुट में रेंडर करने में विफल क्यों होते हैं?

Dec 05 2020

मैं इस तरह से एक ग्रीक पत्र के साथ, आर से पीडीएफ के लिए एक सरल भूखंड निर्यात करने की कोशिश कर रहा हूं:

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

मैं आर 3.5 पूर्वस्थापित के साथ एक OpenSUSE LEAP 15.1 प्रणाली पर हूँ - यह ठीक काम करता है। तो आवश्यक फोंट स्थापित किया जाना चाहिए।

हालांकि, आर 4.0.3 (जो मैंने खुद को संकलित किया है) में, एक ही कमांड ग्रीक अक्षर के बजाय एक बॉक्स देता है:

(दिलचस्प बात यह है कि इस बॉक्स को कॉपी करने और चिपकाने से सही ग्रीक अक्षर सम्मिलित होता है।)

क्या यह R v3 और v4 के बीच एक मूलभूत अंतर है (यदि ऐसा है, तो कौन सा?), या मैं संकलन के दौरान इसे प्रभावित कर सकता हूं? मुझे विंडोज पर समान समस्या नहीं है, लेकिन यह एक रिलीज संस्करण है जिसे मैंने खुद को संकलित नहीं किया है और जिसमें आईसीयू क्षमताएं हैं।

पीडीएफ फाइलों को देखते हुए, v3 फ़ाइल कैंटरेल-रेगुलर और सोर्सकोडप्रो-बोल्ड का उपयोग करती है। V4 एक में कैंटरेल-रेगुलर और कैंटरेल-बोल्ड का उपयोग किया गया है। सभी फॉन्ट सब्मिट-एंबेडेड हैं। तो किसी भी तरह, R v4 उस SourceCodeProफ़ॉन्ट पर स्विच करने में विफल रहता है , हालाँकि यह स्थापित है:

> 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

आर configureकमांड में, मैं देखता हूं

क्षमताओं को छोड़ दिया: ICU

जहां ICU = यूनिकोड के लिए अंतर्राष्ट्रीय घटक। इसके अलावा:

जाँच करें कि क्या pkg-config cairo और pango के बारे में जानता है ... नहीं

जाँच करें कि क्या pkg-config cairo के बारे में जानता है ... हाँ

क्या इन दोनों में से कोई एक संबंधित हो सकता है?

संपादित करें : मैंने अभी तक काहिरा ग्राफिक्स डिवाइसेस के लिए प्रतीक फ़ॉन्ट्स में परिवर्तन पाया और पढ़ा है

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()

सफलतापूर्वक मानक फ़ॉन्ट को बदलता है, यह दर्शाता है कि कूरियर स्थापित और प्रयोग करने योग्य है।

जवाब

1 bers Dec 06 2020 at 03:21

ICU समर्थन के साथ Recompiling ने इसे ठीक नहीं किया - कायरो और पंगो के साथ पुनर्मूल्यांकन किया

दोनों को प्राप्त करने के लिए, पैकेज स्थापित करने में बहुत परीक्षण और त्रुटि थी। संक्षेप में, मैंने किया zypper in libicu-devel freetype-devel freetype pango-devel pango-tools libpango-1_0-0 harfbuzz-devel fribidi-devel fribidi। इस बात का बहुत पहले से ही स्थापित किया गया है सकते हैं, लेकिन इस प्रक्रिया में, मैं की स्थापना है कि देखा libharfbuzz0और libharfbuzz-icu0 टूट और फिक्स्ड कि गया था ।

फिर पुन: कॉन्फ़िगर किया गया और आर को फिर से जोड़ा गया, और समस्या दूर हो गई।