मैं एक मजबूत तरीके से फ़ॉन्ट फॉलबैक कैसे सेट कर सकता हूं?


16

TL; DR: मज़बूती से कहने का एक सरल तरीका क्या है: कंसोल को डिफ़ॉल्ट फ़ॉन्ट के रूप में उपयोग करें, कंसोल द्वारा असमर्थित वर्णों के लिए FreeMono और दोनों द्वारा असमर्थित वर्णों के लिए सिम्बोला?

चूंकि मेरा मुख्य प्रोग्रामिंग फ़ॉन्ट उन सभी गणितीय प्रतीकों को कवर नहीं करता है जिनकी मुझे आवश्यकता है, मैं शुरू में नीचे दिए गए फ़ॉन्ट फॉलबैक को सेट करता हूं:

(set-fontset-font t 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font t 'unicode (font-spec :name "Symbola") nil 'append)

दुर्भाग्य से इसने मेरे मुख्य फ़ॉन्ट का समर्थन करने वाले कुछ पात्रों के लिए फ़ॉन्ट भी बदल दिया, इसलिए मैंने इसे बदल दिया

(set-fontset-font t 'unicode (font-spec :name "Consolas") nil)
(set-fontset-font t 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font t 'unicode (font-spec :name "Symbola") nil 'append)

यदि मेरी समझ सही है, तो यह सुनिश्चित करना चाहिए कि कंसोल को संभाल सकने वाले वर्णों को FreeMono द्वारा नियंत्रित नहीं किया जा सकता है, जब तक कि FreeMono उनके पास नहीं है, इस स्थिति में उन्हें Symbola का उपयोग करके प्रदर्शित किया जाना चाहिए। यह मेरी समझ भी tहै जो "fontset-default"ऊपर की तरह ही करता है।

दुर्भाग्य से, अभी भी ऐसे मामले थे जहां सही फ़ॉन्ट का चयन नहीं किया गया था; मैंने पाया कि बदल रहा है

(set-fontset-font t 'unicode (font-spec :name "Consolas") nil)
(set-fontset-font t 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font t 'unicode (font-spec :name "Symbola") nil 'append)
(set-fontset-font "fontset-startup" 'unicode (font-spec :name "Consolas") nil)
(set-fontset-font "fontset-startup" 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font "fontset-startup" 'unicode (font-spec :name "Symbola") nil 'append)

बेहतर काम किया है, लेकिन हमेशा नहीं: का उपयोग कर फ़ॉन्ट आकार बदल रहा है

(set-face-attribute 'default nil :height some-size)

नए फोंटसेट बनाए जाने के कारण, कमियां नजरअंदाज कर दी गईं।

मेरा वर्तमान समाधान करना है

(set-fontset-font fontset 'unicode (font-spec :name "Consolas") nil)
(set-fontset-font fontset 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font fontset 'unicode (font-spec :name "Symbola") nil 'append)

प्रत्येक फॉन्टेट ( fontset-list) पर, प्रत्येक फ़ॉन्ट आकार बदलने के बाद।

फ़ॉन्ट फ़ॉलबैक सेट करने का उचित तरीका क्या है?

नोट : परीक्षण के प्रयोजनों के लिए, यहां कुछ गणित वर्ण हैं: ℕ𝓟⧺×≠≥≤±¬∨∧∃∀λ⟿⟹⊥⊤⊢
संदर्भ : फोंट पर मैनुअल को संशोधित करता है और फोंट को संशोधित करता है


2
मेरे पास एक विचार है जो वास्तव में आपकी समस्या को हल नहीं करता है, लेकिन - अगर आपको प्रमेय और वैज्ञानिक दस्तावेजों के लिए गणितीय आदि प्रतीकों की आवश्यकता है, तो आप उसके लिए TeX और AucTeX का उपयोग क्यों नहीं करते हैं? यह एक्स (या मैक या विंडोज, जो आप चलाते हैं पर निर्भर करता है) के साथ परेशान कर देगा। फ़ॉन्ट कमियां अनावश्यक है और आपको उच्च गुणवत्ता वाले दस्तावेज़ और स्निपेट (जैसे ऑर्ग मोड के लिए) प्रदान करता है।

बाद में: पूर्ण वर्ण सेट के साथ एक UTF-8 फ़ॉन्ट आपकी समस्या को पूरी तरह से हटा देना चाहिए (उदाहरण के लिए। GNU Unifont), और जब फैंसी फ़ॉन्ट और ग्लिफ़ के बीच विकल्प की आवश्यकता हो, तो मैं बाद वाला चुनूंगा।

2
@ कुली तुम बहुत निराशावादी हो। देखें github.com/cpitclaudel/monospacifier
Ista

मुझे याद नहीं है कि मैं इसे कहाँ पढ़ता हूँ, लेकिन मेरा मानना ​​है कि एली ज़ेरेत्स्की ने इसी तरह के सवाल का जवाब कहीं। आप fontsetगलत तरीके से सोच रहे हैं । Emacs वास्तव में यह प्रदर्शित करने वाले प्रत्येक वर्ण के लिए जाँच नहीं करता है कि कोई फ़ॉन्ट जानता है कि उसे कैसे प्रदर्शित करना है या नहीं। यह भी कम्प्यूटेशनल रूप से गहन होगा। तो प्रति se "fallback" तंत्र नहीं है। आपको अपने डिफ़ॉल्ट फ़ॉन्ट को सेट करना चाहिए और फिर अलग-अलग फ़ॉन्ट का उपयोग करके प्रदर्शित करने के लिए कुछ श्रेणियों में डिफ़ॉल्ट फ़ॉन्ट को मैन्युअल रूप से संशोधित करना चाहिए। यह प्रक्रिया मैनुअल है या शायद पैकेज unicodeमदद कर सकता है।
गेनाउ

@ GenaU मैं गलतफहमी हो सकती है, लेकिन Emacs जाँच करता है; हर फॉन्ट नहीं, केवल एक फोंट में दिखाई देने वाले।
क्लेमेंट

जवाबों:


0

उन लोगों के लिए जो Emacs के प्रलेखन को पढ़ने में सक्षम नहीं हैं।

फ़ॉन्ट चयन

इससे पहले कि Emacs एक चित्रमय प्रदर्शन पर एक चरित्र बना सकते हैं, उसे उस चरित्र के लिए "फ़ॉन्ट" चुनना होगा। आम तौर पर, Emacs स्वचालित रूप से उस चरित्र को दिए गए चेहरों के आधार पर एक फ़ॉन्ट चुनता है - विशेष रूप से, चेहरे का गुण ': परिवार', ': वजन', ': तिरछा' और ': चौड़ाई' होता है। फ़ॉन्ट का विकल्प भी प्रदर्शित होने वाले चरित्र पर निर्भर करता है; कुछ फ़ॉन्ट केवल सीमित सेट वर्ण प्रदर्शित कर सकते हैं। यदि कोई उपलब्ध फ़ॉन्ट बिल्कुल आवश्यकताओं को पूरा नहीं करता है, तो Emacs "निकटतम मिलान फ़ॉन्ट" की तलाश करता है। इस खंड के चर नियंत्रण करते हैं कि कैसे Emacs यह चयन करता है।

face-font-family-alternatives

विशेष रूप से प्रश्न में वर्णों का उपयोग करके जांच की जाती है, वर्णों की जांच करना
describe-character। प्रत्येक पात्र नि: शुल्क फोंट में से एक का उपयोग करता है: कॉन्सोल, फ्रीमोनो, सिंबोला। कंसोला द्वारा फ्रेम फॉन्ट की स्थापना set-frame-font

अब तक 14 अपवोट्स, उत्तर अस्वीकृत, और EU विज्ञान अभी भी उस मिस्टी को हल नहीं कर सकता है।


धन्यवाद! क्या आपने इसे मेरी टिप्पणी के ऊपर एक प्रतिक्रिया के रूप में पोस्ट करने पर विचार किया, बल्कि एक अलग जवाब?
क्लेमेंट

1
(मुझे स्पष्ट करना चाहिए कि मैंने 26 को भी Emacs पर परीक्षण किया था, और आपका उत्तर काम नहीं करता है: मैंने (setq face-font-family-alternatives '(("Consolas" "FreeMono" "Symbola")))तब उपयोग किया था M-x set-frame-font RET Consolas RET; वर्ण, कॉन्सोल और सेगो यूआई प्रतीक के मिश्रण का उपयोग करते हैं)
क्लेमेंट

मैंने मंज़रो आर्क लिनक्स पर इस क्रम का परीक्षण किया: ≠ × ≥≤ ± ¬∨∧∃∀ Manλ⟿⟹⊥⊤⊢; मैंने परीक्षण नहीं किया कि क्या होगा अगर कुछ फ़ॉन्ट स्थापित नहीं है। यह हो सकता है। क्योंकि फ़ॉन्ट नाम मैन्युअल रूप से दर्ज किए जाते हैं, मौजूदा लोगों की सूची से नहीं।
एलेक्जेंड्रा करबिवनिचिय

मैंने इंस्टॉल की गई सूची में सभी फोंट के साथ परीक्षण किया, जिसमें emacs -Q
क्लेमेंट

@ Clément emacs -Q विकल्प बहुत कुछ लागू करता है: -कोई-एक्स-संसाधन नहीं। शायद समस्या इसमें निहित है। मेरे लिए, कॉन्सोल केवल इस चार से शुरू होता है: "×"। और पहले दो "ℕ𝓟" फ्रीमोनो और सिंबोला।
एलेक्जेंड्रा करबिवनिचिए

-1

M-x customize-variable face-font-family-alternatives

एक सूची है जो कुछ इस तरह दिखती है:

(("Monospace" "courier" "fixed")
 ("Monospace Serif" "Courier 10 Pitch" "Consolas" "Courier Std" "FreeMono" "courier" "fixed")
 ("courier" "CMU Typewriter Text" "fixed")
 ("Sans Serif" "helv" "helvetica" "arial" "fixed")
 ("helv" "helvetica" "arial" "fixed"))

customizeबफ़र इंटरफ़ेस में अपना अनुक्रम जोड़ें :

("Consolas" "FreeMono" "Symbola")

यदि कोई दिया गया परिवार निर्दिष्ट है, लेकिन मौजूद नहीं है, तो यह चर वैकल्पिक फ़ॉन्ट परिवारों को निर्दिष्ट करने की कोशिश करता है। प्रत्येक तत्व का यह रूप होना चाहिए:

 (FAMILY ALTERNATE-FAMILIES...)

यदि FAMILY निर्दिष्ट है, लेकिन उपलब्ध नहीं है, तो Emacs ALTERNATE-FAMILIES में दिए गए अन्य परिवारों को एक-एक करके तब तक आजमाएगा, जब तक कि उसे ऐसा कोई परिवार न मिल जाए जो मौजूद नहीं है।

कैसे उपयोग करें face-font-family-alternatives:

आप बफर में: M-x set-frame-font

सूची से एक फ़ॉन्ट चुनें। चुना फॉन्ट परिभाषित करेगा कि किस फ़ॉन्ट खोज अनुक्रम face-font-family-alternativesका उपयोग करना है। इस उदाहरण में कॉन्सोल

यह दिखाने के लिए कि किसी चरित्र को प्रदर्शित करने के लिए किस फ़ॉन्ट परिवार का उपयोग किया गया था: M-x describe-char


धन्यवाद! लेकिन मुझे नहीं लगता कि यह सवाल का जवाब देता है। AFAICT, आपके द्वारा सुझाया गया कॉन्फ़िगरेशन FreeMono का उपयोग करेगा यदि Consolas फ़ॉन्ट उपलब्ध नहीं है, लेकिन यह Consolas द्वारा समर्थित नहीं वर्णों के लिए FreeMono पर वापस नहीं आएगा।
क्लेमेंट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.