Monaspace
(monaspace.githubnext.com)- Monaspace एक नया font system है, जिसे fixed-width grid बनाए रखते हुए code स्क्रीन पर अधिक समृद्ध typography अभिव्यक्ति लाने के लिए बनाया गया है
- इसका मुख्य फ़ीचर Texture Healing है, जो पास-पास आने वाले character pairs में spacing के असंतुलन को alternate glyphs से ठीक करके fixed-width text की density में अंतर कम करता है
- यह तरीका OpenType के contextual alternates को code fonts पर लागू करता है, इसलिए अलग editor plugin के बिना अधिकांश editors में इस्तेमाल किया जा सकता है, और Visual Studio Code के लिए settings भी दी गई हैं
- Monaspace में weight 200~800, slant 0~-11°, width 100~125 axes हैं, और language-specific code ligatures को style sets के रूप में on/off किया जा सकता है
- GitHub Next ने 2022 से Lettermatic के साथ मिलकर इस font को बनाया है, और code rendering को developer tools के लिए अधिक व्यापक अभिव्यक्ति माध्यम में बदलना चाहता है
fixed-width code स्क्रीन का विस्तार करने वाला font system
- Monaspace code fonts की एक “superfamily” है, जिसका फ़ोकस स्क्रीन पर code दिखाने के तरीके को आगे बढ़ाने पर है
- code को teletype के शुरुआती दौर से ही fixed-width fonts में दिखाया जाता रहा है, और Monaspace इस grid को बनाए रखते हुए उसमें अधिक अर्थ जोड़ना चाहता है
- मौजूदा editors अक्सर color-based syntax highlighting से आगे की जानकारी hover, underline, graphic decoration जैसे interface elements के ज़रिए देते हैं
- Monaspace font स्तर पर code और developer tools के उपयोग के लिए एक ज़्यादा expressive palette प्रदान करता है
Copilot सुझाव और typography
- Copilot जैसे code suggestions, Monaspace के ज़रिए एक अलग typographic voice पा सकते हैं
- ghost text की वजह से suggested code को parse करना और उसका मूल्यांकन करना मुश्किल हो सकता है
- अगर font expression ही यह दिखाए कि कौन-सा हिस्सा suggested code है, तो बाद में भी suggested code fragments को अलग पहचानना आसान हो जाता है
fixed-width fonts की सीमाएँ, जिन पर Texture Healing काम करता है
- fixed-width fonts में हर character को एक ही चौड़ाई वाले box में रखना पड़ता है, इसलिए text density समान नहीं रह पाती
l,iजैसे संकरे characters को box भरने के लिए बढ़े-चढ़े serifs चाहिए होते हैं, और फिर भी ज़रूरत से ज़्यादा खाली जगह बचती हैm,wजैसे चौड़े characters box के भीतर दब जाते हैं, उनकी shape विकृत होती है, strokes पतले हो जाते हैं, और अंदर की खाली जगह भी सीमित हो जाती है- ये सीमाएँ 1960s के teletype दौर से चली आ रही fixed-width fonts की संरचनात्मक समस्या हैं
Texture Healing कैसे काम करता है
- Texture Healing उन character pairs को पहचानता है जिनमें एक character के पास जगह कम है और उसके बगल वाले character के पास जगह बची हुई है, फिर glyphs को बदल देता है
- संकरे characters ऐसे alternate glyphs में बदल जाते हैं जो अपनी कुछ खाली जगह पड़ोसी को दे देते हैं, और चौड़े characters ऐसे alternate glyphs में बदलते हैं जो box के किनारों तक फैलते हैं
- यह फ़ीचर OpenType के contextual alternates से लागू किया गया है
- contextual alternates आम तौर पर Arabic script या cursive fonts में इस्तेमाल होते हैं, जहाँ आसपास के characters के हिसाब से glyph shape बदलती है
- Monaspace इस तकनीक को code के लिए fixed-width fonts में लागू करता है
- नतीजे में text फिर भी fixed-width grid का पालन करता है
- Visual Studio Code में Texture Healing चालू करने का तरीका Monaspace दस्तावेज़ में देखा जा सकता है
font axes और styles
- Monaspace का weight axis 200 से 800 तक उपलब्ध है
- 200: Extra Light
- 300: Light
- 400: Regular
- 500: Medium
- 600: Semibold
- 700: Bold
- 800: ExtraBold
- slant axis 0 से -11° तक उपलब्ध है
- 0: Normal
- -5.5°: बीच का वह बिंदु जहाँ कुछ characters oblique से italic रूप में बदलते हैं
- -11°: Italic
- width axis 100 से 125 तक उपलब्ध है
- 100: Normal
- 112.5: Semiwide
- 125: Wide
- Monaspace में Neon, Argon, Xenon, Radon, Krypton जैसे family names शामिल हैं
code ligatures और OpenType settings
- Monaspace में विभिन्न programming languages के लिए code ligatures शामिल हैं
- ligatures को style sets के रूप में व्यवस्थित किया गया है, ताकि उपयोगकर्ता केवल वही sets on/off कर सके जो वह चाहता है
- हर style set को मोटे तौर पर किसी खास language की ज़रूरत के आधार पर डिज़ाइन किया गया है
ss01: JavaScript में आम character sequences के लिए ligatures शामिल हैंss05: F# operators के लिए ligatures देता है
- अतिरिक्त OpenType features भी दिए गए हैं
calt: Texture Healing को सक्रिय करता हैliga:///,||जैसे repeated characters की spacing को समायोजित करता है, और////जैसी लंबी sequences के भीतर सक्रिय न होने के लिए डिज़ाइन किया गया है
- Visual Studio Code में
settings.jsonकेeditor.fontLigaturesमें इच्छित features और style sets निर्दिष्ट करके इन्हें सक्रिय किया जाता है
निर्माण और वितरण
- Monaspace को सभी developers के लिए code rendering बेहतर बनाने के उद्देश्य से बनाया गया है
- GitHub Next ने 2022 में यह काम शुरू किया था और Lettermatic के साथ मिलकर font बनाया
- contributors की सूची, documentation और font files Monaspace repo में देखे जा सकते हैं
- डाउनलोड GitHub repository पर उपलब्ध है
1 टिप्पणियां
Hacker News की राय
Texture Healing फ़ीचर OpenType फीचर्स का बहुत चतुराई से उपयोग करता है, जिससे समस्या पैदा करने वाले monospace फ़ॉन्ट संयोजन ग्रिड को बिल्कुल बिगाड़े बिना कहीं अधिक बेहतर दिखते हैं
सीधा तरीका यह होता कि
mi,lmजैसे मुश्किल letter pairs के लिए ligatures बना दिए जाएँ, लेकिन यहाँ यह आसपास के अक्षरों के अनुसार fixed width के भीतर अलग तरह से भरने वाले alternate glyphs चुने जाने जैसा लगता हैव्यवहार में इसका उपयोग कठिन है। अक्षर की चौड़ाई उसके बाद आने वाले अक्षर पर निर्भर करती है, इसलिए टाइप करते समय टेक्स्ट उछलता है। पढ़ते समय यह शानदार लगता है, लेकिन लिखते समय भयानक है
इस प्रोजेक्ट के हिस्से के रूप में इस तकनीक को विकसित करने वाले Riley Cran और पूरी https://lettermatic.com टीम कमाल की है
उदाहरण के लिए, डिफ़ॉल्ट उदाहरण
time_limitमें दूसराmदोनों तरफiहोने की वजह से “फैलने” के लिए ज़्यादा जगह पाता है, इसलिए वह पहलेmसे साफ़ तौर पर चौड़ा दिखता है। यह अच्छा है या नहीं, इस पर मुझे संदेह हैयह texture healing भी पहले से ही पूरी तरह सही character-cell grid को तोड़ देता है, इसलिए कुछ मायनों में इसमें दोनों तरफ की कमियाँ हैं
flashy ligatures को भी मैं कुछ हद तक इसी नज़र से देखता हूँ। source code में सीधे असली characters लिखे जा सकते हैं, और Unicode का व्यापक समर्थन है। Raku ऐसा करता है, लेकिन सच में चमकने के लिए variable-width fonts सहित बेहतर typesetting की ज़रूरत है
शुरू में लगा, “एक और monospace font family है, दिखने में अच्छी है,” लेकिन texture healing देखने के बाद इसे ज़रूर आज़माने का मन हुआ
अलग-अलग उपयोगों के लिए अलग style के फ़ॉन्ट इस्तेमाल करने का विचार मुझे बहुत पसंद आया। लेकिन मैं ज़्यादातर terminal इस्तेमाल करता हूँ, इसलिए नहीं पता कौन-सा terminal इसे सपोर्ट करता है, और शायद command-line text editors को भी इसका समर्थन करना होगा। फिर भी मुझे यह शानदार विचार लगता है
ESC[<10-19>mfont 0~9 चुनने वाला escape sequence हैव्यवहार में यह चलता है या नहीं, यह अलग बात है। मैं Alacritty इस्तेमाल करता हूँ, लेकिन सपोर्ट के बारे में कुछ नहीं मिला, और खुद आज़माने पर भी कोई नतीजा नहीं मिला
जानना चाहूँगा कि लोग Mix & Match उदाहरण को कैसे देखते हैं
handwritten तरफ वाला Radon लगभग italic जैसा दिखता है, इसलिए दूसरे फ़ॉन्ट्स के साथ अच्छी तरह मेल खाता है। लेकिन बाकी में metrics वगैरह इतने मिलते-जुलते हैं कि “authoritative docstrings” या “Copilot voice” जैसे उदाहरणों में फ़र्क करना काफ़ी मुश्किल है
मैं लंबे समय से Operator Mono का खुला विकल्प ढूँढ रहा था, और Mix & Match की वजह से अब लगा कि शायद यह वही विकल्प हो सकता है
कुछ लोग इसे नापसंद करेंगे, लेकिन व्यक्तिगत रूप से मैं इसे आज़माना चाहूँगा
दूसरे variants जानकारी पहुँचाने के लिहाज़ से पर्याप्त अलग नहीं हैं
ligatures काफ़ी हैं, लेकिन मेरे लिए अभी भी कम हैं। अब
!=और<=तो बुनियादी हैं, और Fira Code का*ptrमें*की ऊँचाई मिलाना,X:Yमें:को बीच में रखना, या0xFFमेंxको ऊपर उठाना कितना अच्छा है, यह बात बार-बार ध्यान खींचती हैKrypton variant का रूप मुझे लगभग पसंद आ गया था, लेकिन lowercase
tकी crossbar lowercasecजैसे अक्षरों की ऊँचाई की तुलना में बहुत नीचे है। इसलिए अभी तो मैं Fira Code ही इस्तेमाल करता रहूँगा, और user feedback के बाद लगभग एक साल में क्या बदला है, यह फिर से देखूँगा/**के दो*का misaligned होना अटपटा लगता है// What if tentative ideas looked handwritten?और/** * What if docstrings looked authoritative? */जैसे उदाहरणों में यह खास तौर पर दिखता हैआइडिया अच्छा है, लेकिन समझ नहीं आता कि PragmataPro जैसी संकरी फ़ॉन्ट्स ज़्यादा क्यों नहीं दिखतीं
मैं इसे लगभग 10 साल से इस्तेमाल कर रहा हूँ, और अच्छा होता अगर इस क्षेत्र में और विकल्प होते, लेकिन लगता है कोई भी उतना संकरा जाने की कोशिश नहीं करता। Berkeley Graphics लगभग एक साल से Berkeley Mono के एक संकरे वर्ज़न का संकेत दे रहा है, लेकिन अभी तक कुछ हुआ नहीं है
यहाँ Monaspace में width slider तो है, लेकिन इसकी शुरुआत ही “PragmataPro से चौड़ा” से होती है और आखिर में “हद से ज़्यादा चौड़ा” तक पहुँचती लगती है। समझ नहीं आता कि इसे संकरे वर्ज़न की तरफ नीचे जाने लायक क्यों नहीं बनाया गया
डिफ़ॉल्ट Iosevka काफ़ी करीब है, लेकिन line spacing बहुत ज़्यादा है। अच्छी बात यह है कि settings में
leading = 1110सेट करके इसे लगभग वैसा ही customize किया जा सकता है। यह वैल्यू मैंने trial and error से ढूँढी थीसबसे संकरी फ़ॉन्ट की तलाश में मुझे लगा कि Quinze ही जवाब है। यह Iosevka या M+ से लगभग 20% ज़्यादा संकरी है। PragmataPro से सीधी तुलना नहीं मिली, लेकिन अगर Iosevka, PragmataPro का मुफ़्त विकल्प है, तो Quinze उससे भी संकरी होगी
असल में Quinze इतनी संकरी है कि जब मैंने इसे ब्राउज़र के सारे fixed-width text पर ज़बरदस्ती लागू किया, तो readability बेहतर होने के बजाय खराब हो गई। उसी ऊँचाई पर यह “सामान्य” फ़ॉन्ट्स की तुलना में काफ़ी छोटी दिखती है। coding environment में मैं फ़ॉन्ट size बड़ा करके इस्तेमाल करता हूँ, और वहाँ यह संकरी चौड़ाई के साथ अच्छी लगती है
इसकी कमी यह है कि Quinze बहुत minimal है। इसमें लगभग सिर्फ ASCII है, ligatures नहीं हैं, और customization भी नहीं है। मुझे ये बातें परेशान नहीं करतीं
फिर भी यह आपकी चाहत के मुताबिक़ काफ़ी संकरी हो सकती है
https://mplusfonts.github.io/
मैं ब्राउज़र में Times की जगह “Bell MT” इस्तेमाल करता हूँ, और emacs Org mode में variable-width फ़ॉन्ट के रूप में भी, जो अच्छा है, लेकिन अच्छा होता अगर इसका कोई बड़ा और ज़्यादा संकरा वर्ज़न होता
एक और अच्छी संकरी monospaced फ़ॉन्ट “The Sans Mono Condensed” है, जो शुरुआती O’Reilly किताबों की वजह से मशहूर हुई थी। बाद में O’Reilly किसी दूसरी monospaced फ़ॉन्ट पर चला गया। इसकी कमी यह है कि इसमें सिर्फ Western character set है, लेकिन मुझे यह बहुत पसंद थी
पेज पर Radon का symbol Rd दिखाया गया है, जो खटकता है। Radon का symbol Rn होना चाहिए
Radium
Raहै, RadonRnहै, और इससे मुझे दोबारा जाँचना पड़ा कि क्या सच मेंRसे शुरू होकर नाम मेंdवाला कोई और element हैRhहैmono flag सेट नहीं है, इसलिए फ़ॉन्ट लोड कराने के लिए मुझे GTK2 gvim में कोशिश करनी पड़ी
% ttfmono MonaspaceArgon-Regular.otfका resultmonospaced flag = 0आता है, और उसके अनुसार0 = variable-width, otherwise = monospacedअफ़सोस की बात है कि शायद इसी flag की वजह से ligatures enable नहीं हो रहे
फिर भी patched
stमें चल रहे vim में मैं ligatures और texture healing देख पाया, और वह मुझे सच में बहुत पसंद आया। टाइप करते समय लाइन बहुत ही हल्के से हिलती है, और cursor के आगे बढ़ने पर, जैसे चौड़ा हुआm, कोई भद्दा सा निशान भी नहीं छोड़ता। code के लिए यह काफ़ी सोच-समझकर डिज़ाइन किया गया हैअगर मैं एक feature माँग सकता, तो अच्छा होता अगर angled 0 में backslash जोड़ने या
!=ligature में!को बनाए रखने जैसी कुछ variants चुनी जा सकतीं। मेरा मतलब यहाँ दिखता है: https://github.com/be5invis/Iosevka/blob/main/doc/stylistic-...https://st.suckless.org/patches/ligatures/
मैं आज रिलीज़ हुआ वर्ज़न इस्तेमाल कर रहा हूँ, इसलिए हो सकता है यह हाल में ठीक किया गया हो
“Show all fonts” checkbox को साफ़ तौर पर enable करना पड़ता है, तभी “non-monospaced” फ़ॉन्ट्स भी दिखती हैं
आधुनिक सिस्टम्स में अब शायद code फ़ॉन्ट्स monospaced फ़ॉन्ट्स से आगे बढ़ सकती हैं
मैं यहाँ यह कई बार recommend कर चुका हूँ, लेकिन मैं proportional coding फ़ॉन्ट Input Sans इस्तेमाल करता हूँ
https://input.djr.com
इस फ़ॉन्ट में typos पकड़ना शायद और मुश्किल लगता है
SSH पर Vim इस्तेमाल करते समय monospaced फ़ॉन्ट ही ठीक है, लेकिन Neovim की वजह से इतने frontend आ गए हैं, फिर भी proportional फ़ॉन्ट support करने वाले लगभग नहीं के बराबर हैं। जो support करते भी हैं, वे इस्तेमाल करने में तकलीफ़देह रूप से धीमे लगते हैं
>=को≥में बदलने वाले ligatures support करता है? मैंने फ़ोन पर web preview में देखने की कोशिश की, लेकिन शायद यह Android Firefox की limitation होसंदर्भ के लिए, ligature यह होती है: https://fonts.google.com/knowledge/glossary/ligature
मुझे हमेशा यह समझ नहीं आता कि ऐसे फ़ॉन्ट्स में बिंदु वाला 0 कैसे मानक जैसा बन गया। मैं उसे हमेशा 8 से भ्रमित कर देता हूँ, इसलिए मुझे slash वाला 0 कहीं ज़्यादा पसंद है
अगर ऐसा कोई variant हो तो मैं यह फ़ॉन्ट ज़रूर आज़माना चाहूँगा
फ़ॉन्ट डिज़ाइनर dotted 0 के उभरे हुए किनारों और
8के धँसे हुए किनारों को उभारकर उन्हें visually अलग दिखा सकता है, लेकिन यह फ़ॉन्ट ऐसा करता है या नहीं, पता नहींTexture healing सच में बहुत चतुर और सुंदर idea है
इसे monospaced रूप में अक्सर इस्तेमाल होने वाली चीनी handwriting पर भी आज़माना चाहूँगा। आम होने के बावजूद बहुत घने अक्षर, खासकर
邊鐵餐廳臺藥機麵顧露樓幫讓जैसे पारंपरिक अक्षर, अगर अतिरिक्त जगह पाकर थोड़ा फैल सकें तो काफ़ी फ़ायदा होगा