Liqatura — mətnin oxunaqlılığını və estetikasını yaxşılaşdırmaq üçün iki və ya daha çox simvolun bir tipoqrafik işarəyə qrafik birləşməsidir. Klassik nümunələr fi, fl, ff, ffi cütlərini əhatə edir — burada f hərfinin çıxıntılı elementi qonşu simvolla birləşərək vizual konflikti aradan qaldırır. Müasir mobil və veb inkişafda liqaturalar OpenType xüsusiyyətləri vasitəsilə şrift səviyyəsində idarə olunur və iOS, Android və brauzerlərdə dəstəklənir. MDN Web Docs-a görə, font-variant-ligatures CSS xassəsi tərtibatçıya müxtəlif liqatura növlərini aktivləşdirməyə və söndürməyə imkan verir: standart, discretionary (dekorativ) və kontekstual.
Əsas məqamlar
Liqatura — iki və ya daha çox simvolun xüsusi hazırlanmış bir işarə ilə əvəz olunduğu tipoqrafik üsuldur. Liqaturanın əsas məqsədi qonşu simvollar arasında vizual konfliktləri aradan qaldırmaq və mətnin qavranılmasını yaxşılaşdırmaqdır. Məsələn, fi cütlüyündə f hərfinin yuxarı çıxıntısı i hərfinin nöqtəsi ilə toqquşur — liqatura onları bir zərif simvolda birləşdirir.
Liqaturalar məcburi (standart) və isteğe bağlı (dekorativ) bölünür. Standart liqaturalar — əksər şriftlərdə rast gəlinən cütlüklər: fi, fl, ff, ffi, ffl. Onlar keyfiyyətli tipoqrafiya üçün zəruri hesab olunur və şriftdə standart olaraq aktivdir. OpenType Spesifikasiyasına görə, standart liqaturalar 'liga' teqi ilə kodlaşdırılır və istənilən peşəkar şriftdə aktiv olmalıdır.
Vizual effekt: liqatura olmadan fi cütlüyü arzuolunmaz təması olan iki ayrı simvol kimi görünür. Liqatura ilə — bir ahəngdar simvol kimi. Fərq xüsusilə böyük ölçülərdə (başlıqlar, loqolar) və çox sayda təkrarlanan cütlüyü olan mətndə (məsələn, almanca häufigen Buchstabenkombinationen) nəzərə çarpır.
OpenType şriftləri bir neçə növ liqaturanı dəstəkləyir, hər biri öz teqi və təyinatı ilə. Standart (teq 'liga') — şriftdə standart olaraq aktiv olan məcburi liqaturalar. Onlar oxunaqlılığı yaxşılaşdırır və ciddi səbəb olmadan söndürülməməlidir. fi, fl, ff, ffi, ffl cütlüklərini və qarnitur üçün spesifik olan digərlərini ehtiva edir.
Discretionary liqaturalar (teq 'dlig') — dizaynerin qərarı ilə isteğe bağlı aktivləşdirilən dekorativ liqaturalar. Onlar oxunaqlılıq üçün məcburi deyil və mətnin stilizasiyası üçün istifadə olunur: ct, st, sp, Th, Qu və s. Discretionary liqaturalar tez-tez tarixi və ya kalliqrafik xarakterli şriftlərdə — məsələn, Garamond və ya Adobe Caslon-da rast gəlinir. Xəbərdarlıq: həddindən artıq discretionary liqaturalar oxunaqlılığı pisləşdirir, xüsusən də disleksiyası olan istifadəçilər üçün.
Kontekstual liqaturalar (teq 'clig') — simvolun ətraf mühitindən asılı olan liqaturalar. Onlar yalnız müəyyən şərtlərdə tətbiq olunur: simvol sözün əvvəlində və ya sonundadırsa, müəyyən durğu işarəsindən sonra və s. Kontekstual liqaturalar — bütün şriftlər tərəfindən dəstəklənməyən qabaqcıl OpenType xüsusiyyətidir. Tarixi liqaturalar (teq 'hlig') — köhnə çaplı kitabların üslubunu təqlid edən köhnəlmiş liqaturalar (long s, &). Nadir hallarda, yalnız tarixi və ya stilizə edilmiş mətnlərdə istifadə olunur.
| Liqatura növü | OpenType teqi | Nümunələr | Standart |
|---|---|---|---|
| Standart | liga | fi, fl, ff, ffi | Aktiv |
| Discretionary | dlig | ct, st, sp, Th | Söndürülmüş |
| Kontekstual | clig | Mövqedən asılıdır | Aktiv |
| Tarixi | hlig | long s, ct (tarixi) | Söndürülmüş |
Nadir növlər: riyazi dəst üçün liqaturalar (teq 'dlig' riyazi simvollar üçün) və inizial liqaturalar (drop caps) da mövcuddur — lakin onlar interfeys tipoqrafiyasında istifadə olunmur və yalnız ixtisaslaşmış şriftlər tərəfindən dəstəklənir.
Liqaturalar rəqəmsal tipoqrafiyadan çox əvvəl — hələ XV əsrdə metal yığım dövründə yaranmışdır. Mətbəəçi İohann Qutenberq 42 sətirli İncilinin sətirlərində yerə qənaət etmək üçün liqaturalardan istifadə edirdi. Hər bir hərf fiziki metal blok idi və iki simvolun bir hərfdə birləşməsi qurğuşuna qənaət edir və yığımı asanlaşdırırdı. Standart liqaturalar fi, fl, ffi, ffl həmin dövrün mirasıdır.
Fotoyığımda (XX əsr) liqaturalar praktiki funksiyasını itirdi, lakin keyfiyyətli tipoqrafiyanın estetik elementi kimi qaldı. Şrift dizaynerləri liqaturaları öz qarniturlarına daxil etməyə davam edirdilər, çünki onlar peşəkarlıq və detallara diqqət əlaməti idi. Rəqəmsal şriftlər dövründə (PostScript, TrueType) liqaturalar proqram dəyişdirmə ilə ayrıca gliflər kimi tətbiq olunurdu.
OpenType (1996) inqilab oldu: o, istifadəçinin müdaxiləsi olmadan simvollar ardıcıllığını avtomatik olaraq liqatura ilə əvəz edən GSUB (Glyph Substitution Table) mexanizmini təqdim etdi. GSUB kontekstual dəyişdirmələri, şərtləri və fallback variantlarını dəstəkləyir. Bu, şriftlərə teqlər vasitəsilə aktivləşdirilən/söndürülən yüzlərlə liqaturaya malik olmağa imkan verdi. Müasir şriftlər — SF Pro, Roboto, Inter — OpenType liqaturalarını bütün platformalarda dəstəkləyir: iOS, Android, macOS, Windows, veb.
iOS-da liqaturaları UIFontDescriptor vasitəsilə featureSettings atributundan istifadə edərək idarə etmək olar. Bu atribut hər biri bir OpenType xüsusiyyətini təsvir edən lüğətlər massivi qəbul edir. Liqaturaların deskriptor vasitəsilə idarə edilməsi şriftin digər OpenType xüsusiyyətlərinə təsir etmədən ayrı-ayrı liqatura növlərini idarə etməyin yeganə yoludur.
let descriptor = UIFontDescriptor.preferredFontDescriptor(
withTextStyle: .body
)
// Discretionary liqaturaları aktivləşdirin
let ligatureDescriptor = descriptor.addingAttributes([
.featureSettings: [
[
UIFontDescriptor.FeatureIdentifier: kLigaturesType,
UIFontDescriptor.TypeIdentifier: kCommonLigaturesOnSelector
]
]
])
let font = UIFont(
descriptor: ligatureDescriptor,
size: 17
)
NSAttributedString də ligature: NSNumber atributunu dəstəkləyir. Qiymət 0 — bütün liqaturaları söndür, 1 — standartları aktivləşdir (standart), 2 — hamısını aktivləşdir (discretionary daxil). Lakin NSAttributedString-də ligature atributu liqatura növləri üzərində incə nəzarət vermir — yalnız qlobal aktivləşdirmə/söndürmə. Seçmə idarəetmə üçün featureSettings ilə UIFontDescriptor istifadə edin.
SwiftUI liqaturalar üçün birbaşa modifier təmin etmir. SwiftUI-də liqaturaları idarə etmək üçün UIFontDescriptor vasitəsilə lazımi parametrlərlə UIFont yaradın və Font(descriptor:size:) ilə istifadə edin. Alternativ — AppKit/UIKit görünüşlərində NSMutableAttributedString üçün .ligature atributu ilə AttributedString (iOS 15+) istifadə edin.
// AttributedString vasitəsilə xüsusi liqaturalarla SwiftUI
var attributedText: AttributedString {
var text = AttributedString(
"Effective typography with ligatures"
)
// Bütün mətn üçün bütün liqaturaları aktivləşdirin
text.ligature = .all
return text
}
var body: some View {
Text(attributedText)
}
Vebdə liqaturalar font-variant-ligatures CSS xassəsi ilə idarə olunur, o açar sözləri qəbul edir: common-ligatures (standart aktiv), no-common-ligatures (standart söndürülmüş), discretionary-ligatures, no-discretionary-ligatures, contextual, no-contextual. Xassə 2015-ci ildən bütün müasir brauzerlər tərəfindən dəstəklənir. Brauzerlər standart olaraq standart və kontekstual liqaturaları aktivləşdirir.
/* 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 liqaturaları idarə etmək üçün birbaşa API-yə malik deyil. Android-də liqaturalar şrift səviyyəsində və Minikin (Android 10+) render mühərriki səviyyəsində idarə olunur. Şrift OpenType GSUB cədvəlini ehtiva edirsə, liqaturalar avtomatik tətbiq olunur. Android-də liqaturaları söndürmək üçün Typeface.Builder vasitəsilə yaradılmış xüsusi Typeface və ya mətnin preprosesinqi (göstərilmədən əvvəl simvolların dəyişdirilməsi) istifadə olunur. Məhdudiyyət: Android 10-dan aşağı versiyalarda liqaturalar bəzi TTF şriftləri ilə düzgün işləməyə bilər.
Aşağı səviyyəli nəzarət: bütün platformalarda OpenType xüsusiyyətləri üçün font-feature-settings parametri ilə CSS @font-face istifadə etmək olar. Bu metod liqaturalar da daxil olmaqla istənilən OpenType teqlərinə giriş verir. Nümunə: font-feature-settings: 'liga' 1, 'dlig' 1. Lakin font-feature-settings aşağı səviyyəli sintaksisdir və MDN daha yüksək səviyyəli alternativ kimi font-variant-ligatures istifadəsini tövsiyə edir.
Liqaturaların xüsusi sinfi — operatorları və kod simvollarını daha oxunaqlı işarələrdə birləşdirən proqramlaşdırma liqaturalarıdır. Fira Code, JetBrains Mono, Cascadia Code kimi proqramlaşdırma şriftləri məşhur operatorlar üçün discretionary liqaturaları ehtiva edir: != (≠ olur), >= (≥ olur), -> (ox olur), => (qalın ox olur), === (üçlü bərabər olur).
Proqramlaşdırma liqaturaları tərtibatçı cəmiyyətində mübahisəli mövzudur. Tərəfdarlar iddia edir ki, liqaturalar kodun oxunmasını sürətləndirir, çünki operatorlar vahid konseptlər kimi qavranılır. Tədqiqat (Kera et al., PLATEAU 2020) göstərdi ki, liqaturalar kodun oxunma sürətinə təsir etmir, lakin subyektiv olaraq tərtibatçıların 67%-nə xoş gəlir. Liqaturaların əleyhdarları qeyd edir ki, onlar kodu təhrif edir: redaktorda != simvolu ≠ kimi göstərilir, lakin mətn faylında iki simvol kimi saxlanılır ki, bu da əməkdaşlıq zamanı çaşqınlıq yarada bilər.
Texniki tətbiq: proqramlaşdırma liqaturaları discretionary OpenType liqaturalarıdır (teq 'dlig'). Onlar standart olaraq söndürülmüşdür və kod redaktorunda şrift parametrləri vasitəsilə aktivləşdirilir. Belə şriftlərdən istifadə edən tərtibatçılar redaktoru discretionary liqaturaları aktivləşdirmək üçün konfiqurasiya etməlidirlər. Terminalda (iTerm2, Windows Terminal) liqaturalar da şrift parametrləri vasitəsilə dəstəklənir. Uyğunluq: bütün redaktorlar və terminallar OpenType liqaturalarını dəstəkləmir. Şrift seçməzdən əvvəl alətinizlə uyğunluğu yoxlayın.
// Nümunə: JetBrains Mono-da operator liqaturaları
val isEqual = a != b // != ≠ kimi göstərilir
val arrow = x -> x + 1 // -> → kimi göstərilir
val range = 1 .. 10 // .. diapazon kimi göstərilir
Proqramlaşdırma liqaturaları olan məşhur şriftlər: Fira Code (liqaturaları olan ilk kütləvi şrift, 2015), JetBrains Mono (kod oxumaq üçün optimallaşdırılıb, 2020), Cascadia Code (Microsoft-dan, 2019), Iosevka (modul liqatura sistemi ilə konfiqurasiya edilə bilən şrift). Hər şriftin öz liqatura dəsti var — 50-dən 150+ dəyişdirməyə qədər. Tövsiyə: Fira Code və ya JetBrains Mono ilə başlayın — onlar redaktorlarda və IDE-lərdə ən yaxşı dəstəyə malikdir.
Tez-tez verilən suallar
NSAttributedString-də ligature = 0 atributunu qurun və ya kCommonLigaturesOffSelector ilə UIFontDescriptor istifadə edin. SwiftUI-də .ligature = .disabled ilə AttributedString yaradın.
Liqatura iki simvolu formanı dəyişən bir yeni işarə ilə əvəz edir. Kerning simvollar arasındakı məsafəni tənzimləyir, onların formasını dəyişmir. Liqatura qrafik birləşmə, kerning məkan korreksiyasıdır.
Bəli, Android 10-dan (API 29) başlayaraq. Minikin render mühərriki OpenType GSUB cədvəllərini tam dəstəkləyir. Köhnə versiyalarda dəstək cihaz istehsalçısından və şrift mühərriki versiyasından asılıdır.
Əsas mətn üçün standart liqaturalar (fi, fl, ff) kifayətdir — onlar oxunaqlılığı yaxşılaşdırır və istifadəçiyə görünməzdir. Discretionary liqaturaları yalnız başlıqlarda və ya dekorativ mətndə istifadə edin, çünki onlar uzun mətnlərin oxunaqlılığını azaldır.
Redaktor OpenType 'dlig' teqini dəstəkləməli və discretionary liqaturaları göstərməyi bacarmalıdır. VS Code, IntelliJ IDEA, Sublime Text dəstəkləyir. Köhnə terminallar və redaktorlar (nano, vim GUI-siz) — yox. Redaktor parametrlərini yoxlayın: font-ligatures aktivləşdirin.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun