cht電腦資訊字型
adm Find login register

fontconfig 字型順序的設定

coolcd
joined: 2008-01-21
posted: 2601
promoted: 348
bookmarked: 95
1subject: fontconfig 字型順序的設定Promote 0 Bookmark 02011-08-25quote  

這串討論上承 請幫忙測試 Linux 下 Firefox 字型

因討論與主題偏離,故開新文討論

hemiola
不知道在此接著討論是否合適。coolcd 想請教你,你知道非 ubuntu 環境中(或是說 ubuntu 砍掉 69-language-selector-zh-*.conf),哪個檔在決定中文字型的顯示順序嗎?是否是 65-nonlatin.conf?

依我實測 sans-serif,沒有 prepend binding 之類的設定時,改變 65-nonlatin.conf 內 sans-serif 中文字型順序,確實會影響 fc-match 的排序,但如果有自己加 family prepend 或 binding 的設定,或者某些字型加了 family prefer (如 WenQuanYi ZenHei),也會影響字型的取用順序。

hemiola 大哥不要一直叫我啦,這樣可能別人不好意思參與討論 XD

guest
2subject: fontconfig 字型順序的設定Promote 0 Bookmark 02011-08-25quote  

coolcd

這串討論上承 請幫忙測試 Linux 下 Firefox 字型

因討論與主題偏離,故開新文討論

 

依我實測 sans-serif,沒有 prepend binding 之類的設定時,改變 65-nonlatin.conf 內 sans-serif 中文字型順序,確實會影響 fc-match 的排序,但如果有自己加 family prepend 或 binding 的設定,或者某些字型加了 family prefer (如 WenQuanYi ZenHei),也會影響字型的取用順序。

hemiola 大哥不要一直叫我啦,這樣可能別人不好意思參與討論 XD

XD 抱歉抱歉,說得也是,希望大家一起討論。

我剛在正體中文 ubuntu 下很簡單地試了一下,發現有太多檔案有關,測到都有點亂了。

砍掉 69-language-selector-zh-tw.conf 後,用 fc-match --sort sans 來看,wqy-zenhei 變成 sans 的第一位,發現原因是 44-wqy-zenhei.conf 。

照  http://wenq.org/forum/viewtopic.php?f=6&t=943 修改了 44-wqy-zenhei.conf 後, AR PL UMing HK 變第一位,原因是 64-ttf-arphic-uming.conf 。

把 64-ttf-arphic-uming.conf 砍掉,wqy-zenhei 變回第一位,原因…不知道,找不到是哪個檔造成的…。似乎是 65-nonlatin.conf。

接著我照 http://wenq.org/forum/viewtopic.php?f=6&t=943 此篇二樓的做法使用 local.conf 後,排第一位的變成是 wqy-microhei,我以為會是Bitstream Vera Sans,但是都沒有。

從這測試看來,中文字型長久以來的問題,造成 fontconfig 的混亂,以現在的版本來說,64-ttf-arphic-uming.conf 似乎根本不需要了,重點是如 http://wenq.org/forum/viewtopic.php?f=3&t=926 所說的,好好地修 65-nonlatin.conf。

另外我問這個問題和做這些測試,是希望找到不用 69-language-selector-zh-tw.conf 可以達到 sans 第一位 dejavu sans、第二位 wqy-microhei 的方法,不過看來都行不通,似乎一定得用 mode="prepend" binding="strong"。

coolcd
joined: 2008-01-21
posted: 2601
promoted: 348
bookmarked: 95
3subject: fontconfig 字型順序的設定Promote 0 Bookmark 02011-08-26quote  

guest
我剛在正體中文 ubuntu 下很簡單地試了一下,發現有太多檔案有關,測到都有點亂了。

砍掉 69-language-selector-zh-tw.conf 後,用 fc-match --sort sans 來看,wqy-zenhei 變成 sans 的第一位,發現原因是 44-wqy-zenhei.conf 。

照  http://wenq.org/forum/viewtopic.php?f=6&t=943 修改了 44-wqy-zenhei.conf 後, AR PL UMing HK 變第一位,原因是 64-ttf-arphic-uming.conf 。

把 64-ttf-arphic-uming.conf 砍掉,wqy-zenhei 變回第一位,原因…不知道,找不到是哪個檔造成的…。似乎是 65-nonlatin.conf。

接著我照 http://wenq.org/forum/viewtopic.php?f=6&t=943 此篇二樓的做法使用 local.conf 後,排第一位的變成是 wqy-microhei,我以為會是Bitstream Vera Sans,但是都沒有。

我前兩天就是在做跟你一樣的事,才會感嘆,為何 fontconfig 設定那麼複雜!

去官網查說明,看到一篇 fontconfig-user ,沒有看得很仔細,但有看到一個重點

<alias> 內可以接四種 element,<family>指定要作用的字型,<prefer>、<accept>與<default>,這三個 elements 各自有其功用,內部可再指定<family>

<alias> 會針對 <alias> 內第一層 <family> 內指定的字型A 動作,<prefer> 是將字型B prepend 到字型A,<accept>是將字型C append 到字型A,<default> 則將字型D 加到字型A 的最後。

<alias><family>A</family>
<prefer><family>B</family></prefer>
<accept><family>C</family></accept>
<default><family>D</family></default>
</alias>

你的系統有安裝 Bitstream Vera Sans 嗎?如果沒有,45-latin.conf 會在 Bitstream Vera Sans 後加上 sans-serif,你看到的結果可能是 sans serif。

從這測試看來,中文字型長久以來的問題,造成 fontconfig 的混亂,以現在的版本來說,64-ttf-arphic-uming.conf 似乎根本不需要了,重點是如 http://wenq.org/forum/viewtopic.php?f=3&t=926 所說的,好好地修 65-nonlatin.conf。

另外我問這個問題和做這些測試,是希望找到不用 69-language-selector-zh-tw.conf 可以達到 sans 第一位 dejavu sans、第二位 wqy-microhei 的方法,不過看來都行不通,似乎一定得用 mode="prepend" binding="strong"。

應該把 WenQuanYi 那種強迫人家使用它的設定拿掉,修好 65-nonlatin.conf。只是繁體中文的 sans serif 可能有點麻煩,有人可接受 WenQuanYi、Droid Sans Fallback 的中文字型(非台灣寫法),但肯定有人不喜歡。要用微軟正黑體,好像鼓勵使用微軟不太好,cwTexHeiBold 又不夠清晰,總之如果有意思要改順序,還需要大家先討論出一個共識。在 local.conf 指定 prepend 或 prefer 應該還是目前比較實際的解法。

conf.d 內的設定應該能不改就儘量不改,以免升級時麻煩。

guest
4subject: fontconfig 字型順序的設定Promote 0 Bookmark 02011-08-28quote  

coolcd

我前兩天就是在做跟你一樣的事,才會感嘆,為何 fontconfig 設定那麼複雜!

去官網查說明,看到一篇 fontconfig-user ,沒有看得很仔細,但有看到一個重點

<alias> 內可以接四種 element,<family>指定要作用的字型,<prefer>、<accept>與<default>,這三個 elements 各自有其功用,內部可再指定<family>

<alias> 會針對 <alias> 內第一層 <family> 內指定的字型A 動作,<prefer> 是將字型B prepend 到字型A,<accept>是將字型C append 到字型A,<default> 則將字型D 加到字型A 的最後。

<alias><family>A</family>
<prefer><family>B</family></prefer>
<accept><family>C</family></accept>
<default><family>D</family></default>
</alias>

你的系統有安裝 Bitstream Vera Sans 嗎?如果沒有,45-latin.conf 會在 Bitstream Vera Sans 後加上 sans-serif,你看到的結果可能是 sans serif。

 

你實作有成功嗎?我在 ubuntu 下照你上述的說明,怎麼試都不行,只要 69-language-selector-zh-tw.conf 一拿掉,sans 排第一位的一定中文字型,即使 prefer 裡是 dejavu sans 也一樣。

下次用 archlinux 試試看。

coolcd
joined: 2008-01-21
posted: 2601
promoted: 348
bookmarked: 95
5subject: Promote 0 Bookmark 02011-08-28quote  

guest

你實作有成功嗎?我在 ubuntu 下照你上述的說明,怎麼試都不行,只要 69-language-selector-zh-tw.conf 一拿掉,sans 排第一位的一定中文字型,即使 prefer 裡是 dejavu sans 也一樣。

下次用 archlinux 試試看。

應該算有成功吧……

我在 local.conf 加入以下設定

<alias>
      <family>sans</family>
      <family>sans-serif</family>
      <prefer>
            <family>Liberation Sans</family>
            <family>cwTexHeiBold</family>
      </prefer>
</alias>

$ fc-match --sort sans 出來的結果,是先 cwTexHeiBold,再 Liberation Sans

看似沒有成功,但實際上用 gvim、firefox 測試,當指定用 sans 顯示時,英文會用 Liberation Sans 顯示,中文會用 cwTexHeiBold 顯示,符合我的期待。

所以我懷疑是 fc-match 的 bug。

ychao
joined: 2007-10-25
posted: 298
promoted: 21
bookmarked: 3
6subject: Promote 0 Bookmark 02011-08-31quote  

之前根據 LGJ 前輩的說法,得用 binding="strong"。不過應用軟體取字fallback的順序,不知是否跟fc-match是一樣的?

coolcd
joined: 2008-01-21
posted: 2601
promoted: 348
bookmarked: 95
7subject: Promote 0 Bookmark 02011-08-31quote  

ychao

之前根據 LGJ 前輩的說法,得用 binding="strong"。不過應用軟體取字fallback的順序,不知是否跟fc-match是一樣的?

條條大路通羅馬,應該不只一種方法可以達到同樣或類似的效果。

至於應用軟體取字 fallback 順序是否與 fc-match 一樣,要看軟體對 fontconfig 支援度如何吧。之前 firefox 支援還 ok,chrome 不 ok,但現在好像反過來了。

guest
8subject: Promote 0 Bookmark 02011-08-31quote  

coolcd

條條大路通羅馬,應該不只一種方法可以達到同樣或類似的效果。

至於應用軟體取字 fallback 順序是否與 fc-match 一樣,要看軟體對 fontconfig 支援度如何吧。之前 firefox 支援還 ok,chrome 不 ok,但現在好像反過來了。

Firefox 修好囉!不過不知道為什麼,要等到 Firefox 9…。

本人已不在此站活動

joined: 2007-09-19
posted: 4946
promoted: 325
bookmarked: 206
歸隱山林
9subject: Promote 1 Bookmark 02011-09-01quote  

coolcd
ychao
之前根據 LGJ 前輩的說法,得用 binding="strong"。不過應用軟體取字fallback的順序,不知是否跟fc-match是一樣的?
條條大路通羅馬,應該不只一種方法可以達到同樣或類似的效果。

這兩種設定方式意義上是不一樣的。strong 的設定是忽略 locale 及 fc cache 的內容強迫指定。cooled 的設定方式則沒有[完全]這樣做。

fc 找字時會先參考 locale,然後檢視字型的 lang tag,及其它 fc-cat 裡頭的資訊,所以常常兩個人的 fc 設定明明一樣,但甲的顯示方式卻和乙的顯示方式不一樣。fc-cat 裡頭的資訊又是經過 fc-cache 的判斷,例如 lang 字型上標示為 zh,但經 fc 檢視的結果,字數不足以表達 zh,那麼 zh 的 lang tag 會被略過,但此時其他應用程式可能直接自行檢視這個字型,最後的結果就會和 fc 不一致了。

由於字型規格並不完全統一,字型品質也不一致,應用軟體的做法又不一樣(例如排版軟體一般是會無視 fc 的),每個人的 locale 設定又不一樣,為避免麻煩,所以才會使用 strong binding 的方式。


edited: 2

cht電腦資訊字型
adm Find login register
views:27032