लिगेचर दो या अधिक वर्णों का एक टाइपोग्राफिक चिह्न में ग्राफिक संयोजन है जो पाठ की पठनीयता और सौंदर्य में सुधार करता है। क्लासिक उदाहरणों में fi, fl, ff, ffi जोड़े शामिल हैं — जहाँ अक्षर f का उभरा हुआ तत्व पड़ोसी वर्ण के साथ विलीन हो जाता है, दृश्य संघर्ष को रोकता है। आधुनिक मोबाइल और वेब डेवलपमेंट में, लिगेचर को फ़ॉन्ट स्तर पर OpenType सुविधाओं के माध्यम से नियंत्रित किया जाता है और ये iOS, Android और ब्राउज़रों में समर्थित हैं। MDN Web Docs के अनुसार, CSS प्रॉपर्टी font-variant-ligatures डेवलपर को विभिन्न प्रकार के लिगेचर को चालू और बंद करने की अनुमति देती है: मानक, विवेकाधीन (सजावटी), और प्रासंगिक।
मुख्य बिंदु
लिगेचर एक टाइपोग्राफिक तकनीक है जिसमें दो या अधिक वर्णों को एक विशेष रूप से डिज़ाइन किए गए ग्लिफ़ से बदल दिया जाता है। लिगेचर का मुख्य उद्देश्य आसन्न वर्णों के बीच दृश्य संघर्ष को समाप्त करना और पाठ धारणा में सुधार करना है। उदाहरण के लिए, fi जोड़ी में, अक्षर f का ऊपरी उभार अक्षर i के बिंदु से टकराता है — लिगेचर उन्हें एक एकल सुरुचिपूर्ण प्रतीक में विलीन कर देता है।
लिगेचर अनिवार्य (मानक) और वैकल्पिक (सजावटी) में विभाजित होते हैं। मानक लिगेचर वे जोड़े हैं जो अधिकांश फ़ॉन्ट में पाए जाते हैं: fi, fl, ff, ffi, ffl। इन्हें गुणवत्तापूर्ण टाइपोग्राफी के लिए आवश्यक माना जाता है और ये फ़ॉन्ट में डिफ़ॉल्ट रूप से सक्षम होते हैं। OpenType विनिर्देश के अनुसार, मानक लिगेचर को 'liga' टैग के साथ कोडित किया जाता है और ये किसी भी पेशेवर फ़ॉन्ट में मौजूद होने चाहिए।
दृश्य प्रभाव: लिगेचर के बिना, fi जोड़ी एक अवांछनीय टकराव के साथ दो अलग-अलग वर्णों जैसा दिखता है। लिगेचर के साथ, यह एक सामंजस्यपूर्ण प्रतीक जैसा दिखता है। अंतर विशेष रूप से बड़े आकार (शीर्षक, लोगो) और कई दोहराए जाने वाले जोड़ों वाले पाठ में ध्यान देने योग्य है (उदाहरण के लिए, जर्मन में häufigen Buchstabenkombinationen के साथ)।
OpenType फ़ॉन्ट कई प्रकार के लिगेचर का समर्थन करते हैं, प्रत्येक का अपना टैग और उद्देश्य होता है। मानक (टैग 'liga') अनिवार्य लिगेचर हैं जो फ़ॉन्ट में डिफ़ॉल्ट रूप से सक्षम होते हैं। ये पठनीयता में सुधार करते हैं और बिना अच्छे कारण के इन्हें अक्षम नहीं किया जाना चाहिए। इनमें fi, fl, ff, ffi, ffl और टाइपफ़ेस के लिए विशिष्ट अन्य जोड़े शामिल हैं।
विवेकाधीन लिगेचर (टैग 'dlig') सजावटी लिगेचर हैं जो डिज़ाइनर के विवेक पर वैकल्पिक रूप से सक्षम किए जाते हैं। ये पठनीयता के लिए आवश्यक नहीं हैं और पाठ स्टाइलिंग के लिए उपयोग किए जाते हैं: ct, st, sp, Th, Qu और अन्य। विवेकाधीन लिगेचर अक्सर ऐतिहासिक या सुलेख चरित्र वाले फ़ॉन्ट में पाए जाते हैं — उदाहरण के लिए, Garamond या Adobe Caslon में। चेतावनी: विवेकाधीन लिगेचर की अधिकता पठनीयता को ख़राब करती है, विशेषकर डिस्लेक्सिया वाले उपयोगकर्ताओं के लिए।
प्रासंगिक लिगेचर (टैग 'clig') वे लिगेचर हैं जो वर्ण के आसपास के संदर्भ पर निर्भर करते हैं। ये केवल कुछ शर्तों के तहत लागू होते हैं: यदि वर्ण किसी शब्द की शुरुआत या अंत में है, किसी विशिष्ट विराम चिह्न के बाद, इत्यादि। प्रासंगिक लिगेचर एक उन्नत OpenType सुविधा है जो सभी फ़ॉन्ट द्वारा समर्थित नहीं है। ऐतिहासिक लिगेचर (टैग 'hlig') पुराने लिगेचर हैं जो पुरानी मुद्रित पुस्तकों की शैली की नकल करते हैं (long s, &)। इनका उपयोग शायद ही कभी किया जाता है, केवल ऐतिहासिक या शैलीबद्ध पाठों में।
| लिगेचर प्रकार | OpenType टैग | उदाहरण | डिफ़ॉल्ट |
|---|---|---|---|
| मानक | liga | fi, fl, ff, ffi | सक्षम |
| विवेकाधीन | dlig | ct, st, sp, Th | अक्षम |
| प्रासंगिक | clig | स्थिति पर निर्भर करता है | सक्षम |
| ऐतिहासिक | hlig | long s, ct (ऐतिहासिक) | अक्षम |
दुर्लभ प्रकार: गणितीय टाइपसेटिंग के लिए लिगेचर (गणितीय प्रतीकों के लिए टैग 'dlig') और प्रारंभिक लिगेचर (ड्रॉप कैप्स) भी मौजूद हैं, लेकिन ये इंटरफ़ेस टाइपोग्राफी में उपयोग नहीं किए जाते हैं और केवल विशेष फ़ॉन्ट द्वारा समर्थित हैं।
लिगेचर डिजिटल टाइपोग्राफी से बहुत पहले — 15वीं शताब्दी में धातु टाइप के युग में दिखाई दिए। पहले मुद्रक जोहान्स गुटेनबर्ग ने अपनी 42-पंक्ति वाली बाइबिल की पंक्तियों में जगह बचाने के लिए लिगेचर का उपयोग किया। प्रत्येक टाइप टुकड़ा एक भौतिक धातु ब्लॉक था, और दो वर्णों को एक टुकड़े में संयोजित करने से सीसा बचता था और टाइपसेटिंग सरल होती थी। मानक लिगेचर fi, fl, ffi, ffl उस युग की विरासत हैं।
फोटोटाइपसेटिंग (20वीं शताब्दी) में, लिगेचर ने अपना व्यावहारिक कार्य खो दिया लेकिन गुणवत्तापूर्ण टाइपोग्राफी के सौंदर्य तत्व के रूप में बने रहे। फ़ॉन्ट डिज़ाइनरों ने अपने टाइपफ़ेस में लिगेचर को शामिल करना जारी रखा क्योंकि वे व्यावसायिकता और विस्तार पर ध्यान देने का प्रतीक बन गए। डिजिटल फ़ॉन्ट (PostScript, TrueType) के युग में, लिगेचर को प्रोग्रामेटिक प्रतिस्थापन के साथ अलग ग्लिफ़ के रूप में कार्यान्वित किया गया था।
OpenType (1996) एक क्रांति थी: इसने GSUB तंत्र (ग्लिफ़ प्रतिस्थापन तालिका) पेश किया, जो उपयोगकर्ता के हस्तक्षेप के बिना स्वचालित रूप से वर्णों के अनुक्रम को लिगेचर से बदल देता है। GSUB प्रासंगिक प्रतिस्थापन, शर्तों और फ़ॉलबैक वेरिएंट का समर्थन करता है। इसने फ़ॉन्ट को सैकड़ों लिगेचर रखने की अनुमति दी जिन्हें टैग के माध्यम से सक्षम/अक्षम किया जा सकता है। आधुनिक फ़ॉन्ट — SF Pro, Roboto, Inter — सभी प्लेटफ़ॉर्म पर OpenType लिगेचर का समर्थन करते हैं: iOS, Android, macOS, Windows, वेब।
iOS पर, लिगेचर को UIFontDescriptor के माध्यम से featureSettings विशेषता का उपयोग करके नियंत्रित किया जा सकता है। यह विशेषता शब्दकोशों की एक सरणी स्वीकार करती है, जिनमें से प्रत्येक एक OpenType सुविधा का वर्णन करता है। विवरणक के माध्यम से लिगेचर को नियंत्रित करना फ़ॉन्ट की अन्य OpenType सुविधाओं को प्रभावित किए बिना व्यक्तिगत प्रकार के लिगेचर को प्रबंधित करने का एकमात्र तरीका है।
let descriptor = UIFontDescriptor.preferredFontDescriptor(
withTextStyle: .body
)
// विवेकाधीन लिगेचर सक्षम करें
let ligatureDescriptor = descriptor.addingAttributes([
.featureSettings: [
[
UIFontDescriptor.FeatureIdentifier: kLigaturesType,
UIFontDescriptor.TypeIdentifier: kCommonLigaturesOnSelector
]
]
])
let font = UIFont(
descriptor: ligatureDescriptor,
size: 17
)
NSAttributedString भी ligature विशेषता का समर्थन करता है: NSNumber। मान 0 सभी लिगेचर को अक्षम करता है, 1 मानक सक्षम करता है (डिफ़ॉल्ट), 2 सभी सक्षम करता है (विवेकाधीन सहित)। हालाँकि, NSAttributedString में ligature विशेषता लिगेचर प्रकारों पर सूक्ष्म नियंत्रण प्रदान नहीं करती है — केवल वैश्विक सक्षम/अक्षम। चयनात्मक नियंत्रण के लिए, featureSettings के साथ UIFontDescriptor का उपयोग करें।
SwiftUI लिगेचर के लिए कोई प्रत्यक्ष संशोधक प्रदान नहीं करता है। SwiftUI में लिगेचर को नियंत्रित करने के लिए, UIFontDescriptor के माध्यम से वांछित सेटिंग्स के साथ एक UIFont बनाएँ और इसे Font(descriptor:size:) के माध्यम से उपयोग करें। वैकल्पिक रूप से, AppKit/UIKit दृश्यों में NSMutableAttributedString के लिए .ligature विशेषता के साथ AttributedString (iOS 15+) का उपयोग करें।
// AttributedString के माध्यम से कस्टम लिगेचर के साथ SwiftUI
var attributedText: AttributedString {
var text = AttributedString(
"Effective typography with ligatures"
)
// पूरे पाठ के लिए सभी लिगेचर सक्षम करें
text.ligature = .all
return text
}
var body: some View {
Text(attributedText)
}
वेब पर, लिगेचर को CSS प्रॉपर्टी font-variant-ligatures के माध्यम से नियंत्रित किया जाता है, जो कीवर्ड स्वीकार करती है: common-ligatures (मानक सक्षम), no-common-ligatures (मानक अक्षम), discretionary-ligatures, no-discretionary-ligatures, contextual, no-contextual। यह प्रॉपर्टी 2015 से सभी आधुनिक ब्राउज़रों द्वारा समर्थित है। डिफ़ॉल्ट रूप से, ब्राउज़र मानक और प्रासंगिक लिगेचर सक्षम करते हैं।
/* Disable all ligatures for monospace */
code, pre {
font-variant-ligatures: none;
}
/* Enable discretionary ligatures for headings */
.title-fancy {
font-variant-ligatures:
common-ligatures
discretionary-ligatures
contextual;
}
Android के पास लिगेचर को नियंत्रित करने के लिए कोई सीधा API नहीं है। Android पर, लिगेचर को फ़ॉन्ट स्तर और Minikin रेंडरिंग इंजन (Android 10+) द्वारा नियंत्रित किया जाता है। यदि फ़ॉन्ट में OpenType GSUB तालिका है, तो लिगेचर स्वचालित रूप से लागू होते हैं। Android पर लिगेचर को अक्षम करने के लिए, Typeface.Builder के माध्यम से बनाए गए कस्टम Typeface या टेक्स्ट प्रीप्रोसेसिंग (प्रदर्शन से पहले वर्ण प्रतिस्थापन) का उपयोग किया जाता है। सीमा: Android 10 से नीचे, लिगेचर कुछ TTF फ़ॉन्ट के साथ सही ढंग से काम नहीं कर सकते हैं।
निम्न-स्तरीय नियंत्रण: सभी प्लेटफ़ॉर्म पर, आप OpenType सुविधाओं के लिए font-feature-settings पैरामीटर के साथ CSS @font-face का उपयोग कर सकते हैं। यह विधि लिगेचर सहित किसी भी OpenType टैग तक पहुँच प्रदान करती है। उदाहरण: font-feature-settings: 'liga' 1, 'dlig' 1। हालाँकि, font-feature-settings एक निम्न-स्तरीय सिंटैक्स है, और MDN उच्च-स्तरीय विकल्प के रूप में font-variant-ligatures का उपयोग करने की अनुशंसा करता है।
लिगेचर का एक विशेष वर्ग — प्रोग्रामिंग लिगेचर — ऑपरेटरों और कोड प्रतीकों को अधिक पठनीय ग्लिफ़ में जोड़ता है। Fira Code, JetBrains Mono, Cascadia Code जैसे प्रोग्रामिंग फ़ॉन्ट सामान्य ऑपरेटरों के लिए विवेकाधीन लिगेचर शामिल करते हैं: != (≠ बन जाता है), >= (≥ बन जाता है), -> (तीर बन जाता है), => (मोटा तीर बन जाता है), === (ट्रिपल इक्वल्स बन जाता है)।
प्रोग्रामिंग लिगेचर डेवलपर समुदाय में एक विवादास्पद विषय है। समर्थकों का तर्क है कि लिगेचर कोड पढ़ने की गति बढ़ाते हैं क्योंकि ऑपरेटरों को एकल अवधारणाओं के रूप में माना जाता है। एक अध्ययन (Kera et al., PLATEAU 2020) ने दिखाया कि लिगेचर कोड पढ़ने की गति को प्रभावित नहीं करते हैं, लेकिन 67% डेवलपर व्यक्तिपरक रूप से उन्हें पसंद करते हैं। लिगेचर के विरोधी ध्यान देते हैं कि वे कोड को विकृत करते हैं: संपादक में != प्रतीक ≠ के रूप में प्रदर्शित होता है, लेकिन टेक्स्ट फ़ाइल में यह दो वर्णों के रूप में संग्रहीत होता है, जो सहयोग के दौरान भ्रमित करने वाला हो सकता है।
तकनीकी कार्यान्वयन: प्रोग्रामिंग लिगेचर विवेकाधीन OpenType लिगेचर हैं (टैग 'dlig')। ये डिफ़ॉल्ट रूप से अक्षम होते हैं और फ़ॉन्ट सेटिंग्स के माध्यम से कोड संपादक में सक्षम किए जाते हैं। ऐसे फ़ॉन्ट का उपयोग करने वाले डेवलपर को विवेकाधीन लिगेचर सक्षम करने के लिए संपादक को कॉन्फ़िगर करना होगा। टर्मिनलों (iTerm2, Windows Terminal) में, लिगेचर फ़ॉन्ट सेटिंग्स के माध्यम से भी समर्थित हैं। संगतता: सभी संपादक और टर्मिनल OpenType लिगेचर का समर्थन नहीं करते हैं। फ़ॉन्ट चुनने से पहले, अपने टूलचेन के साथ संगतता की जाँच करें।
// उदाहरण: JetBrains Mono में ऑपरेटर लिगेचर
val isEqual = a != b // != ≠ के रूप में प्रस्तुत
val arrow = x -> x + 1 // -> → के रूप में प्रस्तुत
val range = 1 .. 10 // .. रेंज के रूप में प्रस्तुत
लोकप्रिय फ़ॉन्ट प्रोग्रामिंग लिगेचर के साथ: Fira Code (लिगेचर वाला पहला बड़े पैमाने का फ़ॉन्ट, 2015), JetBrains Mono (कोड पढ़ने के लिए अनुकूलित, 2020), Cascadia Code (Microsoft से, 2019), Iosevka (मॉड्यूलर लिगेचर सिस्टम के साथ अनुकूलन योग्य फ़ॉन्ट)। प्रत्येक फ़ॉन्ट के लिगेचर का अपना सेट होता है — 50 से 150+ प्रतिस्थापन। अनुशंसा: Fira Code या JetBrains Mono से शुरू करें — इनका संपादकों और IDE में सबसे अच्छा समर्थन है।
अक्सर पूछे जाने वाले प्रश्न
NSAttributedString में attribute ligature = 0 सेट करें या kCommonLigaturesOffSelector के साथ UIFontDescriptor का उपयोग करें। SwiftUI में, .ligature = .disabled के साथ AttributedString बनाएँ।
लिगेचर दो वर्णों को एक नए ग्लिफ़ से बदलता है, उनका आकार बदलता है। कर्निंग वर्णों के बीच की जगह को समायोजित करता है बिना उनका आकार बदले। लिगेचर एक ग्राफिक कनेक्शन है; कर्निंग एक स्थानिक समायोजन है।
हाँ, Android 10 (API 29) से शुरू करके। Minikin रेंडरिंग OpenType GSUB तालिकाओं का पूरी तरह से समर्थन करती है। पुराने संस्करणों पर, समर्थन डिवाइस निर्माता और फ़ॉन्ट इंजन संस्करण पर निर्भर करता है।
मुख्य पाठ के लिए, मानक लिगेचर (fi, fl, ff) पर्याप्त हैं — ये पठनीयता में सुधार करते हैं और उपयोगकर्ता को दिखाई नहीं देते हैं। विवेकाधीन लिगेचर का उपयोग केवल शीर्षकों या सजावटी पाठ में करें, क्योंकि ये लंबे पाठों की पठनीयता को कम करते हैं।
संपादक को OpenType 'dlig' टैग का समर्थन करना चाहिए और विवेकाधीन लिगेचर प्रस्तुत करने में सक्षम होना चाहिए। VS Code, IntelliJ IDEA, Sublime Text उनका समर्थन करते हैं। पुराने टर्मिनल और संपादक (nano, GUI के बिना vim) नहीं करते। अपनी संपादक सेटिंग्स जाँचें: font-ligatures सक्षम करें।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें