Hvis du kun leser tekst på engelsk, og er fornøyd med vanlige libre fonter som er oppført på neste side, trenger du kanskje aldri å bekymre deg for detaljer om hvordan fontconfig virker. Men det er mange ting som kan endres hvis de ikke passer dine behov.
Selv om denne siden er lang, skraper den knapt overflaten, og du vil være i stand til å finne mange alternative synspunkter på nettet (men husk at noen ting har endret seg gjennom årene, for eksempel autohinter er ikke lenger standard). Målet her er å gi deg nok informasjon for å forstå endringene du gjør.
Xft fontprotokollen gir kantutjevnet skriftgjengivelse gjennom
freetype, og fonter styres fra
klientsiden ved bruk av fontconfig
(utenom rxvt-unicode-9.31 som kan bruke fonter
oppført i ~/.Xresources
, og AbiWord-3.0.5 som bruker kun den angitte
fonten). Standard søkesti er /usr/share/fonts
og ~/.local/share/fonts
, selv om for øyeblikket den
gamle og utdaterte plasseringen ~/.fonts
virker fortsatt. Fontconfig søker mapper i stien sin rekursivt
og opprettholder en hurtigbuffer med fontkarakteristikkene i hver
mappe. Hvis hurtiglageret ser ut til å være utdatert, ignoreres
den, og informasjon hentes fra selve fonten (det kan ta noen få
sekunder hvis du har mange fonter installert).
Hvis du har installert Xorg i et
hvilket som helst prefiks annet enn /usr
, ingen X
fonter ble installert i et sted kjent for Fontconfig. Symbolkoblinger var opprettet fra
OTF
og TTF
X font
mapper til /usr/share/fonts/X11-{OTF,TTF}
. Dette tillater
Fontconfig for å bruke OpenType og
TrueType fonter levert av X, selv
om mange mennesker vil foretrekke å bruke mer moderne fonter.
Fontconfig bruker navn for å definere fonter. Applikasjoner bruker vanligvis generiske skriftnavn som "Monospace", "Sans" og "Serif". Fontconfig løser disse navnene til en font som har alle tegn som dekker ortografien til språket som er angitt av lokalinnstillingene.
Følgende kommandoer kan være nyttige når du arbeider med fontconfig:
fc-list | less : viser en liste over alle tilgjengelige fonter (/sti/til/filnavn: Fontnavn:stil). Hvis du installerte en font mer enn 30 sekunder siden, men det vises ikke, da er det eller en av mappene ikke lesbar av brukeren din.
fc-match 'Font Name' : forteller deg hvilken font som brukes hvis den navngitte fonten er forespurt. Vanligvis vil du bruke dette til å se hva som skjer hvis en font du ikke har installert blir forespurt, men du kan også bruke den hvis systemet gir deg en annen font enn hva du forventet (kanskje fordi fontconfig tror ikke at fonten støtter språket ditt).
fc-match -a 'Type' | less : gir en liste over alle fonter som kan brukes for den typen (Monospace, Sans, Serif). Noter at i ekstreme tilfeller vil fontconfig ta en glyff fra hvilken som helst tilgjengelig font, selv om den ikke er av den angitte typen, og med mindre den vet om skriftens type, vil den anta at det er Sans.
Hvis du ønsker å vite hvilken font vil brukes til en tekststreng
(dvs. en eller flere glyfer, innledet av et mellomrom), lim inn
følgende kommando og erstatt xyz
av
teksten du vil sjekke:
FC_DEBUG=4 pango-view --font=monospace -t xyz | grep family : dette krever Pango-1.50.14 og ImageMagick-7.1.1-15 - det vil display vise teksten i et lite vindu, og etter å ha lukket det den siste linjen av utdata vil vise hvilken font som ble valgt. Dette er spesielt nyttig for CJK språk, og du kan også gi et språk, f.eks. PANGO_LANGUAGE=en;ja (engelsk, anta deretter japansk) eller bare zh-cn (eller andre varianter - 'zh' alene er ikke gyldig).
Hovedfilene er i /etc/fonts/conf.d/
,
som var ment å være en mappe fylt med symbolkoblinger til noen av
filene i /usr/share/fontconfig/conf.avail/
. Men mange
mennesker, og noen pakker, lager filene direkte. Hvert filnavn må
være i form av to sifre, en bindestrek, somename.conf og de leses
inn i rekkefølge.
Etter konvensjon er tallene tildelt som følger:
00-09 ekstra fontmapper
10-19 systemgjengivelsesstandarder (som kantutjevnelse.)
20-29 alternativer for fontgjengivelse
30-39 familiesubstitusjon
40-49 kartlegg familie til generisk type
50-59 last inn alternative konfigurasjonsfiler
60-69 generiske aliaser, kartlegg generisk til familie
70-79 justere hvilke skrifter som er tilgjengelige
80-89 samsvar med målskanning (endre skannede mønstre)
90-99 fontsyntese
Du kan også ha en personlig fonts.conf
i $XDG_CONFIG_HOME (which is
~/.config/fontconfig/
).
Hvis den forespurte fonten er installert, og forutsatt at den
inneholder kodepunkter nødvendig for gjeldende språk (i kilden,
se .orth-filene i fc-lang/
mappen),
vil den bli brukt.
Derimot, hvis dokumentet eller siden ba om en font som ikke er
installert (eller noen ganger ikke inneholder alle de nødvendige
kodepunktene) følgende regler kommer inn: Først, 30-metric-aliases.conf
brukes til å kartlegge
aliaser for noen fonter med samme beregninger (samme størrelse
osv.). Etter det, en ukjent font vil bli søkt etter i 45-latin.conf
- hvis det blir funnet, vil det bli
kartlagt som Serif eller Monospace eller Sans, ellers vil antas å
være Sans. Deretter 50-latin.conf
gir
ordnede lister over reservene - Dejavu
fonts vil bli brukt hvis du installerte dem. Kyrillisk og gresk
ser ut til å bli behandlet på samme måte. Det finnes lignende filer
med et 65- prefiks for Persiske og andre ikke-latinske
skriftsystemer. Alle disse filene foretrekker kommersielle fonter
hvis de er til stede, selv om moderne libre fonter er ofte minst
like.
Siden fontconfig-2.12.5, er det også generisk familietilpasning for noen emoji og matematiske fonter, se {45,60}-generic.conf.
I de sjeldne tilfellene hvor en font ikke inneholder alle forventede kodepunkter, se 'Prøv den første:' på I stared into the fontconfig for de lange detaljene.
Det er mulig å endre hvordan, eller om, fonter antydes. Følgende
eksempelfil inneholder standardinnstillingene, men med kommentarer.
Innstillingene er mye ned til brukerens preferanser og til valget
av fonttyper, så en endring som forbedrer noen sider kan forverre
andre. Den foretrukket plassering for denne filen er: ~/.config/fontconfig/fonts.conf
For å prøve ut forskjellige innstillinger, må du kanskje avslutte Xorg og deretter kjøre startx en gang til slik at alle applikasjoner bruker de nye innstillingene. Hvis du bruker Gnome, KDE eller LXQt, kan skrivebordene deres overstyre disse endringene. For å utforske mulighetene, lag en fil for brukeren din:
mkdir -pv ~/.config/fontconfig &&
cat > ~/.config/fontconfig/fonts.conf << "EOF"
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<match target="font" >
<!-- autohint was the old automatic hinter when hinting was patent
protected, so turn it off to ensure any hinting information in the font
itself is used, this is the default -->
<edit mode="assign" name="autohint"> <bool>false</bool></edit>
<!-- hinting is enabled by default -->
<edit mode="assign" name="hinting"> <bool>true</bool></edit>
<!-- for the lcdfilter see https://www.spasche.net/files/lcdfiltering/ -->
<edit mode="assign" name="lcdfilter"> <const>lcddefault</const></edit>
<!-- options for hintstyle:
hintfull: is supposed to give a crisp font that aligns well to the
character-cell grid but at the cost of its proper shape.
hintmedium: poorly documented, maybe a synonym for hintfull.
hintslight is the default: - supposed to be more fuzzy but retains shape.
hintnone: seems to turn hinting off.
The variations are marginal and results vary with different fonts -->
<edit mode="assign" name="hintstyle"> <const>hintslight</const></edit>
<!-- antialiasing is on by default and really helps for faint characters
and also for 'xft:' fonts used in rxvt-unicode -->
<edit mode="assign" name="antialias"> <bool>true</bool></edit>
<!-- subpixels are usually rgb, see
http://www.lagom.nl/lcd-test/subpixel.php -->
<edit mode="assign" name="rgba"> <const>rgb</const></edit>
<!-- thanks to the Arch wiki for the lcd and subpixel links -->
</match>
</fontconfig>
EOF
Du må nå redigere filen i ditt foretrukne redigeringsprogram.
For flere eksempler se blfs støttetråden som startet på 2016-09/00128, spesielt 2016-09/00137, og originaloppretteren sin foretrukne løsning på 2016-09/00147. Det er andre eksempler i Fontconfig in the Arch wiki og Fontconfig in the Gentoo wiki.
I tidligere versjoner av BLFS var de stygge gamle Xorg bitmap
fontene installert. Nå er det mange som ikke trenger å installere
noen av dem. Men hvis du av en eller annen grunn har installert en
eller flere punktgrafikkfonter, kan du hindre dem i å bli brukt av
fontconfig ved å opprette følgende
fil som root
bruker :
cat > /etc/fonts/conf.d/70-no-bitmaps.conf << "EOF"
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<!-- Reject bitmap fonts -->
<selectfont>
<rejectfont>
<pattern>
<patelt name="scalable"><bool>false</bool></patelt>
</pattern>
</rejectfont>
</selectfont>
</fontconfig>
EOF
Normalt er systemfonter og brukerfonter installert i mapper under
stedene spesifisert i Xft Font Protokoll og det er ingen åpenbar
grunn til å plassere dem andre steder. Imidlertid en full BLFS
installasjon av texlive-20230313 putter mange fonter
i /opt/texlive/2023/texmf-dist/fonts/
i opentype/
og truetype/
undermapper. Selv om å trekke inn alle
disse filene kan virke nyttige (det lar deg bruke dem i ikke
TeX programmer), det er flere
problemer med en slik tilnærming:
Det er hundrevis av filer, noe som gjør det vanskelig å velge fonter.
Noen av filene gjør rare ting, for eksempel å vise semaforflagg i stedet for ASCII bokstaver, eller kartlegge kyrilliske kodepunkter til tegnformer passende for gammelkirkeslavisk i stedet for det forventede nåværende form: greit hvis det er det du trenger, men smertefullt for normalt bruk.
Flere fonter har flere størrelser og ugjennomtrengelige korte navn, som begge gjør det enda vanskeligere å velge riktig font.
Når en font legges til CTAN, er den ledsaget av TeX pakker for å bruke de i gamle motorene (xelatex trenger normalt ikke dette), og da er versjonen ofte frosset mens fonten vedlikeholdes separat. Noen av disse fontene som f.eks Dejavu fonts er sannsynligvis allerede installert på BLFS systemet i en nyere versjon, og hvis du har flere versjoner av en font er det uklart hvilken som skal brukes av fontconfig.
Noen ganger er det imidlertid nyttig å se på disse skriftene i
ikke-TeX applikasjoner, om bare for å se om du ønsker å installere
en nåværende versjon. Hvis du har installert alle texlive, følgende eksempel vil lage en av
Arkandis Open Type fontene tilgjengelig for andre applikasjoner, og
alle tre av ParaType TrueType fonter. Juster eller gjenta linjene
etter ønske, for enten å lage alle opentype/
eller truetype
fonter tilgjengelig, eller for å velge
forskjellige fontmapper. Som root
bruker:
cat > /etc/fonts/conf.d/09-texlive.conf << "EOF"
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<dir>/opt/texlive/2023/texmf-dist/fonts/opentype/arkandis/berenisadf</dir>
<dir>/opt/texlive/2023/texmf-dist/fonts/truetype/paratype</dir>
</fontconfig>
EOF
Hvis du gjør dette, husk å endre alle forekomster av året i den filen når du oppgraderer texlive til en senere utgivelse.
Det er mange grunner til at folk ønsker å ha sider som spesifiserer en bestemt font ved bruk av en annen font, eller foretrekker spesifikke fonter i Monospace eller Sans eller Serif. Som du vil forvente, er det en rekke ulike måter å oppnå dette på.
Fontconfig installerer
brukerdokumentasjon som inkluderer et eksempel
'Brukerkonfigurasjonsfil' som bl.a foretrekker WenQuanYi ZenHei (en Sans font) hvis en
Serif font er forespurt for
kinesisk (denne delen kan være anakronistisk med mindre du har
ikke-gratis kinesiske fonter, fordi i 65-nonlatin.conf
denne fonten er allerede blant
foretrukne fonter når Serif er spesifisert for kinesisk) og å
foretrekke moderne VL Gothic
font hvis en Sans font er spesifisert på en Japansk side (ellers
ville et par andre fonter være foretrukket hvis de er installert).
Hvis du har installert gjeldende versjon, er brukerdokumentasjonen
tilgjengelig i HTML, PDF og tekstversjoner på /usr/share/doc/fontconfig-2.14.2/
: endre
versjonen hvis du installerte en annen.
Som et eksempel, hvis du av en eller annen grunn ønsker å bruke Nimbus Roman No9 L fonten når det refereres til Times New Roman (de er metrisk lik, og foretrukket for Times Roman, men Serif fonten fra Liberation fonts vil bli foretrukket for Times New Roman font hvis installert), som en individuell bruker kan du installere fonten og deretter lage følgende fil:
mkdir -pv ~/.config/fontconfig/conf.d &&
cat > ~/.config/fontconfig/conf.d/35-prefer-nimbus-for-timesnew.conf << "EOF"
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<!-- prefer Nimbus Roman No9 L for Times New Roman as well as for Times,
without this Tinos and Liberation Serif take precedence for Times New Roman
before fontconfig falls back to whatever matches Times -->
<alias binding="same">
<family>Times New Roman</family>
<accept>
<family>Nimbus Roman No9 L</family>
</accept>
</alias>
</fontconfig>
EOF
Dette er noe du vanligvis ville gjort i en individuell
brukerinnstilling, men filen i dette tilfellet har fått prefikset
'35-' slik at den kan om ønskelig brukes over hele systemet i
/etc/fonts/conf.d/
.
Følgende eksempel på en lokal konfigurasjon (dvs. en som gjelder for alle brukere av maskinen) gjør flere ting:
Hvis en Serif font er spesifisert, vil den foretrekke UMing varianter, slik at i zh-cn, zh-hk og zh-tw språk ting skal se bra ut (også zh-sg som faktisk bruker samme innstillinger som zh-cn) uten å påvirke Japansk.
Den foretrekker Japaneske IPAex fonts hvis de har blitt installert (skjønt VL Gothic vil ha forrang for (Japansk) Sans hvis den også er installert.
Fordi WenQuanYi ZenHei dekker Koreansk
Hangul glyffer og er også foretrukket for Serif i
65-nonlatin.conf
, hvis den er
installert, vil den bli brukt som standard for Koreansk
serif. For å få en skikkelig Serif font, UnBatang fonten er
spesifisert her - endre den linjen hvis du har installert en
annen Serif font enn de valgte Korean fonts.
Monospace fontene tvinges til de foretrukne Sans skriftene. Hvis teksten er på Koreansk da vil WenQuanYi ZenHei bli brukt.
I en ikke-CJK lokalitet er resultatet at passende fonter vil bli
brukt for alle varianter av kinesisk, japansk og Hangul-koreansk.
Alle andre språk bør allerede fungere hvis en font er til stede.
Som root
bruker:
cat > /etc/fonts/local.conf << "EOF"
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<alias>
<family>serif</family>
<prefer>
<family>AR PL UMing</family>
<family>IPAexMincho</family>
<!-- WenQuanYi is preferred as Serif in 65-nonlatin.conf,
override that so a real Korean font can be used for Serif -->
<family>UnBatang</family>
</prefer>
</alias>
<alias>
<family>sans-serif</family>
<prefer>
<family>WenQuanYi Zen Hei</family>
<family>VL Gothic</family>
<family>IPAexGothic</family>
</prefer>
</alias>
<alias>
<family>monospace</family>
<prefer>
<family>VL Gothic</family>
<family>IPAexGothic</family>
<family>WenQuanYi Zen Hei</family>
</prefer>
</alias>
</fontconfig>
EOF
Noen skrifter, spesielt kinesiske skrifter, leveres med conf filer
som kan være installert i /etc/fonts/conf.d
. Men hvis du gjør det og
deretter bruker en terminal til å kjøre en hvilken som helst
kommando som bruker fontconfig du
kan se feilmeldinger som f.eks som :
Fontconfig warning:
"/etc/fonts/conf.d/69-odofonts.conf", line 14: Having multiple
<family> in <alias> isn't supported and may not work as
expected
.
I praksis fungerer ikke disse gamle reglene. For ikke-CJK brukere, fontconfig vil vanligvis gjøre en god jobb uten disse reglene. Deres opprinnelse går tilbake til når CJK brukere trengte håndlagde punktgrafikk for å være lesbare i små størrelser, og de så stygge ut ved siden av kantutjevnede latinske glyfer - de foretrakk å bruke samme CJK skrift for de latinske tegnene. Det er en bivirkning ved å gjøre dette : fonten (Serif) brukes ofte også for Sans, og i en slik situasjon den (engelsk) teksten i Gtk menyene vil bruke denne fonten - sammenlignet med systemfonter, i tillegg til at den er serif både svak og ganske liten. Det kan gjøre det ubehagelig å lese.
Likevel kan disse gamle conf filene fikses hvis du ønsker å bruke
dem. Følgende eksempel er den første delen av 64-arphic-uming.conf
fra UMing - det er
mange flere lignende elementer som også må endres :
<match target="pattern">
<test qual="any" name="lang" compare="contains">
<string>zh-cn</string>
<string>zh-sg</string>
</test>
<test qual="any" name="family">
<string>serif</string>
</test>
<edit name="family" mode="prepend" binding="strong">
<string>AR PL UMing CN</string>
</edit>
</match>
Prosessen for å rette opp dette er grei, men kjedelig - for alle
elementer som produserer en feilmelding ved å bruke
redigeringsprogrammet (som root
bruker) rediger den installerte filen for å gjenta hele blokken så
mange ganger som det er flere variabler, reduser deretter hvert
eksempel til å ha bare ett av dem. Du kan ønske å jobbe med en feil
om gangen, lagre filen etter hver rettelse, og fra en eget terminal
kjør en kommando som f.eks fc-list
2>&1 | less for å se at reparasjonen
fungerte. For blokken ovenfor, den reparerte versjonen vil være :
<match target="pattern">
<test qual="any" name="lang" compare="contains">
<string>zh-cn</string>
</test>
<test qual="any" name="family">
<string>serif</string>
</test>
<edit name="family" mode="prepend" binding="strong">
<string>AR PL UMing CN</string>
</edit>
</match>
<match target="pattern">
<test qual="any" name="lang" compare="contains">
<string>zh-sg</string>
</test>
<test qual="any" name="family">
<string>serif</string>
</test>
<edit name="family" mode="prepend" binding="strong">
<string>AR PL UMing CN</string>
</edit>
</match>
Blogginnleggene av Eevee er spesielt nyttige hvis fontconfig ikke tror den valgte fonten støtter språket ditt, og for å foretrekke noen ikke-MS japanske fonter når en stygg MS-font allerede er installert.
Arch har mye informasjon i sin wiki på font_configuration.
Gentoo har noe informasjon i sin wiki på Fontconfig selv om mange av detaljene (hva du skal aktivere, og Infinality) er spesifikke for Gentoo.