許多字體,包括來自套件管理器(目前運行 Arch 系統)的字體,不包含通用系列“襯線“,”等寬字體“ 和 ”草書「。所以我必須手動指示正確的家庭(另請參閱https://eev.ee/blog/2015/05/20/i-stared-into-the-fontconfig-and-the-fontconfig-stared-back-at-me/)。
但對於 ”等寬字體" 字體,有一個解決方法:它們的間距屬性均為 100。您可以透過執行來檢查這一點fc-list :spacing=100
(另請參閱https://unix.stackexchange.com/a/363368/473666)。因此,我們的想法是自動將具有此屬性值的每種字體設為“等寬字體” 字體。
例如,在預設設定檔和文件中,他們設定了每種沒有“襯線“ 和 ”等寬字體“ 作為 ”無襯線字體「 這邊走:
<match target="pattern">
<test qual="all" name="family" compare="not_eq">
<string>sans-serif</string>
</test>
<test qual="all" name="family" compare="not_eq">
<string>serif</string>
</test>
<test qual="all" name="family" compare="not_eq">
<string>monospace</string>
</test>
<edit name="family" mode="append_last">
<string>sans-serif</string>
</edit>
</match>
所以,我嘗試了這個:
<match target="pattern">
<test qual="all" name="spacing" compare="eq">
<int>100</int>
</test>
<test qual="all" name="family" compare="not_eq">
<string>monospace</string>
</test>
<edit name="family" mode="append_last">
<string>monospace</string>
</edit>
</match>
結果:每一個系統上的字體現在是等寬字體。更改<int>100</int>
為 時也會發生這種情況<const>mono</const>
。我已經閱讀了man fonts.conf
和 中列出的許多預設配置文件,fc-conflist
但我無法使其工作。我嘗試了屬性及其值的多種組合,但結果始終是沒有任何或者每一個字體被視為等寬字體。
現在,我使用此命令生成來源列表並手動添加它們:fc-list :spacing=100 | awk -F: '{print $2}' | sort -u
。這是我第一次在 Stack Exchange 上問問題,我希望我能說清楚。
答案1
qual="all"
刪除間距測試中的參數。這用於指定測試列表(即family
字串列表)時的行為。標量測試qual="all"
總是成功的。這是 fontconfig 中的一個錯誤。
答案2
我需要將匹配目標更改為 ,<match target=font>
以測試間距;我認為 fontconfig 不知道模式匹配時的間距。
我還沒有嘗試設定字體系列,因為我不需要它,但是修改後的配置讓我可以在 GNOME 終端機中僅針對控制台文字關閉抗鋸齒功能:
<match target="font">
<test name="spacing" compare="eq">
<int>100</int>
</test>
<test name="prgname" compare="contains">
<string>gnome-terminal</string>
</test>
<edit name="antialias" mode="assign">
<bool>false</bool>
</edit>
</match>
在 fontconfig 版本 2.13.1 上測試。