Лигатура је графичко спајање два или више симбола у један типографски знак ради побољшања читљивости и естетике текста. Класични примери укључују парове fi, fl, ff, ffi — где се избочени елемент слова f стапа са суседним симболом, спречавајући визуелни конфликт. У савременом мобилном и веб развоју, лигатурама се управља на нивоу фонта преко OpenType-фича и подржане су на iOS-у, Android-у и у прегледачима. Према MDN Web Docs, CSS својство font-variant-ligatures омогућава програмеру да укључује и искључује различите типове лигатура: стандардне, discretionary (декоративне) и контекстуалне.
Главно
Лигатура је типографска техника при којој се два или више симбола замењују једним посебно дизајнираним знаком. Главни циљ лигатуре је елиминисање визуелних конфликата између суседних симбола и побољшање перцепције текста. У пару fi, на пример, горњи избочинак слова f се судара са тачком слова i — лигатура их спаја у један елегантан симбол.
Лигатуре се деле на обавезне (стандардне) и опционе (декоративне). Стандардне лигатуре су парови који се јављају у већини фонтова: fi, fl, ff, ffi, ffl. Сматрају се неопходним за квалитетну типографију и подразумевано су укључене у фонт. Према OpenType спецификацији, стандардне лигатуре су кодиране ознаком 'liga' и треба да буду укључене у сваком професионалном фонту.
Визуелни ефекат: без лигатуре пар fi изгледа као два одвојена симбола са нежељеним додиром. Са лигатуром — као један хармоничан симбол. Разлика је посебно приметна у великим величинама (наслови, логотипи) и у тексту са великим бројем понављајућих парова (нпр. у немачком језику са häufigen Buchstabenkombinationen).
OpenType фонтови подржавају неколико типова лигатура, сваки са својом ознаком и наменом. Стандардне (ознака 'liga') — обавезне лигатуре подразумевано укључене у фонт. Побољшавају читљивост и не би требало да се искључују без ваљаног разлога. Садрже парове fi, fl, ff, ffi, ffl и друге специфичне за гарнитуру.
Discretionary лигатуре (ознака 'dlig') — декоративне лигатуре које се укључују опционално по нахођењу дизајнера. Нису обавезне за читљивост и користе се за стилизацију текста: ct, st, sp, Th, Qu и друге. Discretionary лигатуре се често јављају у фонтовима са историјским или калиграфским карактером — на пример, у Garamond или Adobe Caslon. Упозорење: вишак discretionary лигатура погоршава читљивост, посебно за кориснике са дислексијом.
Контекстуалне лигатуре (ознака 'clig') — лигатуре које зависе од окружења симбола. Примењују се само под одређеним условима: ако је симбол на почетку или крају речи, после одређеног знака интерпункције итд. Контекстуалне лигатуре су напредна OpenType-фича коју не подржавају сви фонтови. Историјске лигатуре (ознака 'hlig') — застареле лигатуре које опонашају стил старих штампаних књига (long s, &). Користе се ретко, само у историјским или стилизованим текстовима.
| Тип лигатуре | OpenType ознака | Примери | Подразумевано |
|---|---|---|---|
| Стандардне | liga | fi, fl, ff, ffi | Укључене |
| Discretionary | dlig | ct, st, sp, Th | Искључене |
| Контекстуалне | clig | Зависи од позиције | Укључене |
| Историјске | hlig | long s, ct (истор.) | Искључене |
Ретки типови: постоје и лигатуре за математички скуп (ознака 'dlig' за математичке симболе) и лигатуре иницијала (drop caps) — али се не користе у интерфејсној типографији и подржавају их само специјализовани фонтови.
Лигатуре су се појавиле много пре дигиталне типографије — још у епохи металног слога у XV веку. Штампар Јоханес Гутенберг користио је лигатуре ради уштеде простора у редовима своје 42-редне Библије. Свако слово је било физички метални блок, а спајање два симбола у једно слово штедело је олово и поједностављивало слагање. Стандардне лигатуре fi, fl, ffi, ffl су наслеђе те епохе.
У фотослагању (XX век) лигатуре су изгубиле практичну функцију, али су остале као естетски елемент квалитетне типографије. Дизајнери фонтова настављали су да укључују лигатуре у своје гарнитуре, јер су постале знак професионализма и пажње према детаљима. У ери дигиталних фонтова (PostScript, TrueType) лигатуре су имплементиране као одвојени глифови са програмском заменом.
OpenType (1996) је био револуција: увео је механизам GSUB (Glyph Substitution Table) који аутоматски замењује секвенцу симбола лигатуром без интервенције корисника. GSUB подржава контекстуалне замене, услове и fallback-варијанте. Ово је омогућило фонтовима да имају стотине лигатура које се укључују/искључују преко ознака. Савремени фонтови — SF Pro, Roboto, Inter — подржавају OpenType лигатуре на свим платформама: iOS, Android, macOS, Windows, веб.
На iOS-у лигатурама се може управљати кроз UIFontDescriptor коришћењем атрибута featureSettings. Овај атрибут прихвата низ речника, од којих сваки описује једну OpenType-фичу. Управљање лигатурама кроз дескриптор је једини начин контролисања појединачних типова лигатура без утицаја на друге OpenType-фиче фонта.
let descriptor = UIFontDescriptor.preferredFontDescriptor(
withTextStyle: .body
)
// Омогући discretionary лигатуре
let ligatureDescriptor = descriptor.addingAttributes([
.featureSettings: [
[
UIFontDescriptor.FeatureIdentifier: kLigaturesType,
UIFontDescriptor.TypeIdentifier: kCommonLigaturesOnSelector
]
]
])
let font = UIFont(
descriptor: ligatureDescriptor,
size: 17
)
NSAttributedString такође подржава атрибут ligature: NSNumber. Вредност 0 — искључи све лигатуре, 1 — укључи стандардне (подразумевано), 2 — укључи све (укључујући discretionary). Међутим, атрибут ligature у NSAttributedString не даје прецизну контролу над типовима лигатура — само глобално укључивање/искључивање. За селективно управљање користите UIFontDescriptor са featureSettings.
SwiftUI не пружа директан модификатор за лигатуре. За управљање лигатурама у SwiftUI-ју креирајте UIFont са жељеним подешавањима кроз UIFontDescriptor и користите га кроз Font(descriptor:size:). Алтернативно — користите AttributedString (iOS 15+) са атрибутом .ligature за NSMutableAttributedString у AppKit/UIKit приказима.
// SwiftUI са прилагођеним лигатурама преко AttributedString
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 креирани кроз Typeface.Builder или препроцесинг текста (замена симбола пре приказивања). Ограничење: на Android-у испод 10, лигатуре могу радити неправилно са неким TTF фонтовима.
Ниво контроле на ниском нивоу: на свим платформама може се користити CSS @font-face са параметром font-feature-settings за OpenType-фиче. Овај метод даје приступ било којим OpenType ознакама, укључујући лигатуре. Пример: font-feature-settings: 'liga' 1, 'dlig' 1. Међутим, font-feature-settings је синтакса ниског нивоа и MDN препоручује коришћење font-variant-ligatures као алтернативе вишег нивоа.
Посебна класа лигатура — програмерске лигатуре, које обједињују операторе и симболе кода у читљивије знакове. Фонтови за програмирање попут Fira Code, JetBrains Mono, Cascadia Code укључују discretionary лигатуре за уобичајене операторе: != (постаје ≠), >= (постаје ≥), -> (постаје стрелица), => (постаје дебела стрелица), === (постаје троструко једнако).
Програмерске лигатуре су контроверзна тема у заједници програмера. Заговорници тврде да лигатуре убрзавају читање кода, јер се оператори перципирају као јединствени концепти. Истраживање (Kera et al., PLATEAU 2020) показало је да лигатуре не утичу на брзину читања кода, али се субјективно свиђају 67% програмера. Противници лигатура примећују да one изобличују код: симбол != у уређивачу се приказује као ≠, али се у текстуалној датотеци чува као два симбола, што може збуњивати при сарадњи.
Техничка имплементација: програмерске лигатуре су discretionary OpenType лигатуре (ознака 'dlig'). Оне су подразумевано искључене и укључују се у уређивачу кода кроз подешавања фонта. Програмери који користе такве фонтове морају подесити уређивач да укључи discretionary лигатуре. У терминалу (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-овима.
Често постављана питања
Поставите атрибут ligature = 0 у NSAttributedString-у или користите UIFontDescriptor са kCommonLigaturesOffSelector. У SwiftUI-ју — креирајте AttributedString са .ligature = .disabled.
Лигатура замењује два симбола једним новим знаком, мењајући облик. Кернинг регулише растојање између симбола, не мењајући њихов облик. Лигатура је графичко спајање, кернинг је просторна корекција.
Да, почев од Android 10 (API 29). Minikin рендеровање у потпуности подржава OpenType GSUB табеле. На ранијим верзијама подршка зависи од произвођача уређаја и верзије погона фонтова.
За основни текст довољне су стандардне лигатуре (fi, fl, ff) — one побољшавају читљивост и невидљиве су кориснику. Discretionary лигатуре користите само у насловима или декоративном тексту, јер смањују читљивост дугих текстова.
Уређивач мора да подржава OpenType ознаку 'dlig' и да уме да приказује discretionary лигатуре. VS Code, IntelliJ IDEA, Sublime Text подржавају. Стари терминали и уређивачи (nano, vim без GUI-ја) — не. Проверите подешавања уређивача: укључите font-ligatures.
Закључци
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође