將間距 = 100 的每個字體設定為“等寬”

將間距 = 100 的每個字體設定為“等寬”

許多字體,包括來自套件管理器(目前運行 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 上測試。

相關內容