Ligatúra két vagy több karakter grafikus összekapcsolása egyetlen tipográfiai jellé a szöveg olvashatóságának és esztétikájának javítása érdekében. Klasszikus példák a fi, fl, ff, ffi párok — ahol az f betű kiálló eleme összeolvad a szomszédos karakterrel, megelőzve a vizuális konfliktust. A modern mobil- és webfejlesztésben a ligatúrák betűtípus szinten kezelhetők OpenType-funkciókon keresztül, és támogatottak iOS-en, Androidon és a böngészőkben. A MDN Web Docs szerint a CSS font-variant-ligatures tulajdonság lehetővé teszi a fejlesztő számára a ligatúrák különböző típusainak be- és kikapcsolását: szabványos, discretionary (dekoratív) és kontextuális.
A legfontosabb tudnivalók
Ligatúra egy tipográfiai technika, amely során két vagy több karaktert egyetlen speciálisan tervezett jelre cserélünk. A ligatúra fő célja a szomszédos karakterek közötti vizuális konfliktusok megszüntetése és a szöveg érzékelésének javítása. A fi párban például az f betű felső kinyúlása összeütközik az i betű pontjával — a ligatúra egyetlen elegáns szimbólumban egyesíti őket.
A ligatúrák kötelező (szabványos) és opcionális (dekoratív) csoportokra oszthatók. A szabványos ligatúrák olyan párok, amelyek a legtöbb betűtípusban megtalálhatók: fi, fl, ff, ffi, ffl. Ezek a minőségi tipográfiához szükségesnek tekintendők, és alapértelmezetten be vannak kapcsolva a betűtípusban. Az OpenType specifikáció szerint a szabványos ligatúrák a 'liga' címkével vannak kódolva, és minden professzionális betűtípusban be kell kapcsolva lenniük.
Vizuális hatás: ligatúra nélkül a fi pár két különálló, nemkívánatos érintkezéssel rendelkező karakternek tűnik. Ligatúrával — egyetlen harmonikus szimbólumnak. A különbség különösen nagy méretekben (címek, logók) és sok ismétlődő párt tartalmazó szövegben (például a német nyelvben a häufigen Buchstabenkombinationen esetében) szembetűnő.
Az OpenType betűtípusok többféle ligatúrát támogatnak, mindegyik saját címkével és céllal. Szabványos ('liga' címke) — kötelező ligatúrák, amelyek alapértelmezetten be vannak kapcsolva a betűtípusban. Javítják az olvashatóságot, és nem szabad kikapcsolni őket alapos indok nélkül. Tartalmazzák a fi, fl, ff, ffi, ffl párokat és más, a betűtípusra jellemző párokat.
Discretionary ligatúrák ('dlig' címke) — dekoratív ligatúrák, amelyek opcionálisan kapcsolhatók be a tervező döntése alapján. Nem szükségesek az olvashatósághoz, és a szöveg stilizálására szolgálnak: ct, st, sp, Th, Qu és mások. A discretionary ligatúrák gyakran előfordulnak történelmi vagy kalligrafikus jellegű betűtípusokban — például a Garamond vagy az Adobe Caslon esetében. Figyelmeztetés: a discretionary ligatúrák túlzott használata rontja az olvashatóságot, különösen diszlexiás felhasználók számára.
Kontextuális ligatúrák ('clig' címke) — olyan ligatúrák, amelyek a karakter környezetétől függenek. Csak bizonyos feltételek mellett alkalmazandók: ha a karakter egy szó elején vagy végén van, egy adott írásjel után, stb. A kontextuális ligatúrák fejlett OpenType-funkciók, amelyeket nem minden betűtípus támogat. Történelmi ligatúrák ('hlig' címke) — elavult ligatúrák, amelyek a régi nyomtatott könyvek stílusát utánozzák (long s, &). Ritkán használatosak, csak történelmi vagy stilizált szövegekben.
| Ligatúra típusa | OpenType címke | Példák | Alapértelmezett |
|---|---|---|---|
| Szabványos | liga | fi, fl, ff, ffi | Be van kapcsolva |
| Discretionary | dlig | ct, st, sp, Th | Ki van kapcsolva |
| Kontextuális | clig | Pozíciótól függ | Be van kapcsolva |
| Történelmi | hlig | long s, ct (tört.) | Ki van kapcsolva |
Ritka típusok: léteznek ligatúrák matematikai szedéshez (a 'dlig' címke matematikai szimbólumokhoz) és kezdőbetűs ligatúrák (drop caps) is — de ezek nem használatosak a felületi tipográfiában, és csak speciális betűtípusok támogatják őket.
A ligatúrák jóval a digitális tipográfia előtt — már a fém szedés korában, a 15. században megjelentek. Johannes Gutenberg nyomdász ligatúrákat használt a 42 soros Bibliája sorainak helytakarékossága érdekében. Minden betű egy fizikai fém blokk volt, és két karakter egyetlen betűvé egyesítése ólmot takarított meg, és egyszerűsítette a szedést. A szabványos fi, fl, ffi, ffl ligatúrák ennek a kornak az örökségei.
A fotószedésben (20. század) a ligatúrák elvesztették gyakorlati funkciójukat, de megőrizték esztétikai szerepüket a minőségi tipográfiában. A betűtervezők továbbra is belefoglalták a ligatúrákat a betűtípusaikba, mivel a professzionalizmus és a részletekre való odafigyelés jelévé váltak. A digitális betűtípusok korában (PostScript, TrueType) a ligatúrákat külön glifekként implementálták programozott helyettesítéssel.
Az OpenType (1996) forradalmat hozott: bevezette a GSUB (Glyph Substitution Table) mechanizmust, amely automatikusan helyettesíti a karaktersorozatot egy ligatúrával, felhasználói beavatkozás nélkül. A GSUB támogatja a kontextuális helyettesítéseket, feltételeket és tartalék változatokat. Ez lehetővé tette, hogy a betűtípusok több száz ligatúrával rendelkezzenek, amelyek címkék segítségével kapcsolhatók be/ki. Modern betűtípusok — SF Pro, Roboto, Inter — támogatják az OpenType ligatúrákat minden platformon: iOS, Android, macOS, Windows, web.
iOS-en a ligatúrák a UIFontDescriptor segítségével kezelhetők a featureSettings attribútum használatával. Ez az attribútum egy szótártömböt fogad el, amelynek minden eleme egy OpenType-funkciót ír le. A ligatúrák kezelése a leíró segítségével az egyetlen módja az egyes ligatúratípusok szabályozásának anélkül, hogy azok érintenék a betűtípus más OpenType-funkcióit.
let descriptor = UIFontDescriptor.preferredFontDescriptor(
withTextStyle: .body
)
// Discretionary ligatúrák engedélyezése
let ligatureDescriptor = descriptor.addingAttributes([
.featureSettings: [
[
UIFontDescriptor.FeatureIdentifier: kLigaturesType,
UIFontDescriptor.TypeIdentifier: kCommonLigaturesOnSelector
]
]
])
let font = UIFont(
descriptor: ligatureDescriptor,
size: 17
)
NSAttributedString szintén támogatja a ligature: NSNumber attribútumot. A 0 érték kikapcsolja az összes ligatúrát, az 1 bekapcsolja a szabványosakat (alapértelmezett), a 2 pedig az összeset (beleértve a discretionarykat is). Az NSAttributedString ligature attribútuma azonban nem biztosít finom vezérlést a ligatúratípusok felett — csak globális be-/kikapcsolást. Szelektív kezeléshez használja a UIFontDescriptort a featureSettings beállítással.
SwiftUI nem biztosít közvetlen módosítót a ligatúrákhoz. A ligatúrák SwiftUI-ben történő kezeléséhez hozzon létre egy UIFont-ot a kívánt beállításokkal a UIFontDescriptor segítségével, és használja a Font(descriptor:size:) metódussal. Alternatív megoldásként — használjon AttributedString-et (iOS 15+) a .ligature attribútummal az NSMutableAttributedString-hez az AppKit/UIKit nézetekben.
// SwiftUI egyéni ligatúrákkal az AttributedString segítségével
var attributedText: AttributedString {
var text = AttributedString(
"Effective typography with ligatures"
)
// Összes ligatúra engedélyezése a teljes szöveghez
text.ligature = .all
return text
}
var body: some View {
Text(attributedText)
}
A weben a ligatúrák a CSS font-variant-ligatures tulajdonságával kezelhetők, amely a következő kulcsszavakat fogadja el: common-ligatures (szabványos bekapcsolva), no-common-ligatures (szabványos kikapcsolva), discretionary-ligatures, no-discretionary-ligatures, contextual, no-contextual. A tulajdonságot 2015 óta minden modern böngésző támogatja. Alapértelmezetten a böngészők bekapcsolják a szabványos és a kontextuális ligatúrákat.
/* 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 nem rendelkezik közvetlen API-val a ligatúrák kezeléséhez. Androidon a ligatúrák a betűtípus és a Minikin renderelőmotor (Android 10+) szintjén kezelhetők. Ha a betűtípus tartalmaz OpenType GSUB táblát, a ligatúrák automatikusan alkalmazandók. A ligatúrák kikapcsolásához Androidon egyéni, a Typeface.Builder segítségével létrehozott Typeface-ek, vagy szöveg előfeldolgozás (karakterek cseréje a megjelenítés előtt) használható. Korlátozás: Android 10 alatt a ligatúrák bizonyos TTF betűtípusokkal hibásan működhetnek.
Alacsony szintű vezérlés: minden platformon használható a CSS @font-face a font-feature-settings paraméterrel az OpenType-funkciókhoz. Ez a módszer hozzáférést biztosít bármely OpenType-címkéhez, beleértve a ligatúrákat is. Példa: font-feature-settings: 'liga' 1, 'dlig' 1. Azonban a font-feature-settings alacsony szintű szintaxis, és az MDN a font-variant-ligatures használatát ajánlja magasabb szintű alternatívaként.
A ligatúrák különleges osztályát a programozói ligatúrák képezik, amelyek az operátorokat és a kód szimbólumait olvashatóbb jelekké egyesítik. A programozáshoz használt betűtípusok, mint a Fira Code, JetBrains Mono, Cascadia Code, discretionary ligatúrákat tartalmaznak a gyakori operátorokhoz: != (≠ lesz), >= (≥ lesz), -> (nyíl lesz), => (vastag nyíl lesz), === (hármas egyenlőségjel lesz).
A programozói ligatúrák vitatott téma a fejlesztői közösségben. A támogatók szerint a ligatúrák felgyorsítják a kód olvasását, mivel az operátorok egységes fogalmakként érzékelhetők. Kutatás (Kera et al., PLATEAU 2020) kimutatta, hogy a ligatúrák nem befolyásolják a kód olvasási sebességét, de szubjektíven a fejlesztők 67%-ának tetszenek. A ligatúrák ellenzői megjegyzik, hogy azok torzítják a kódot: a != szimbólum a szerkesztőben ≠-ként jelenik meg, de a szövegfájlban két karakterként tárolódik, ami zavaró lehet az együttműködés során.
Technikai implementáció: a programozói ligatúrák discretionary OpenType ligatúrák ('dlig' címke). Alapértelmezetten ki vannak kapcsolva, és a kódszerkesztőben a betűtípus beállításain keresztül kapcsolhatók be. Az ilyen betűtípusokat használó fejlesztőknek konfigurálniuk kell a szerkesztőt a discretionary ligatúrák bekapcsolásához. A terminálban (iTerm2, Windows Terminal) a ligatúrák szintén támogatottak a betűtípus beállításain keresztül. Kompatibilitás: nem minden szerkesztő és terminál támogatja az OpenType ligatúrákat. Mielőtt betűtípust választana, ellenőrizze a kompatibilitást az eszközével.
// Példa: operátor ligatúrák a JetBrains Mono-ban
val isEqual = a != b // != renderelve: ≠
val arrow = x -> x + 1 // -> renderelve: →
val range = 1 .. 10 // .. renderelve: tartományként
Népszerű betűtípusok programozói ligatúrákkal: Fira Code (az első tömeges ligatúrákkal rendelkező betűtípus, 2015), JetBrains Mono (kódolvasásra optimalizálva, 2020), Cascadia Code (a Microsofttól, 2019), Iosevka (konfigurálható betűtípus moduláris ligatúrarendszerrel). Minden betűtípus saját ligatúrakészlettel rendelkezik — 50 és 150+ helyettesítés között. Javaslat: kezdje a Fira Code vagy a JetBrains Mono betűtípussal — ezek rendelkeznek a legjobb támogatással a szerkesztőkben és IDE-kben.
Gyakran ismételt kérdések
Állítsa be a ligature = 0 attribútumot az NSAttributedString-ben, vagy használja a UIFontDescriptort a kCommonLigaturesOffSelector segítségével. SwiftUI-ben — hozzon létre egy AttributedString-et a .ligature = .disabled beállítással.
Ligatúra két karaktert egy új jelre cserél, megváltoztatva az alakot. Kerning a karakterek közötti távolságot szabályozza anélkül, hogy megváltoztatná az alakjukat. A ligatúra grafikus összekapcsolás, a kerning térbeli korrekció.
Igen, Android 10-től (API 29) kezdve. A Minikin renderelő teljes mértékben támogatja az OpenType GSUB táblákat. Korábbi verziókon a támogatás az eszköz gyártójától és a betűtípusmotor verziójától függ.
A fő szöveghez elégségesek a szabványos ligatúrák (fi, fl, ff) — ezek javítják az olvashatóságot, és észrevehetetlenek a felhasználó számára. A discretionary ligatúrákat csak címekben vagy dekoratív szövegben használja, mivel csökkentik a hosszú szövegek olvashatóságát.
A szerkesztőnek támogatnia kell az OpenType 'dlig' címkét és képesnek kell lennie a discretionary ligatúrák megjelenítésére. A VS Code, IntelliJ IDEA, Sublime Text támogatja. A régi terminálok és szerkesztők (nano, vim GUI nélkül) — nem. Ellenőrizze a szerkesztő beállításait: kapcsolja be a font-ligatures opciót.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is