奇怪的Unicode行為
我正在使用 Arch Linux,而我似乎無法正確理解的一件事是 Unicode 字型。
左上角的選定字形按應有的方式呈現,但隨後要複製的文本呈現為與另一種字型完全不同的圖示。
然後是顯示相同圖示的 urxvt 螢幕截圖:
如您所見,它只是渲染了一些框。這是我的大多數應用程序中最常見的行為。
另外這裡是
fc-list
(它在一個粘貼箱中,因為它太長了)的輸出,也許它很有用,我不知道。所以我認為正在發生的是我安裝了另一種字型,其 Unicode 區域與 Material 圖示中的字型重疊。我的問題是,我該如何解決這個問題?這就是問題所在嗎?
更新
將我的字型配置更改為:
<?xml version='1.0'?> <!DOCTYPE fontconfig SYSTEM 'fonts.dtd'> <fontconfig> <alias> <family>serif</family> <prefer><family>Noto Sans</family></prefer> <default><family>Material Icons</family></default> </alias> <alias> <family>sans-serif</family> <prefer><family>Noto Sans</family></prefer> <default><family>Material Icons</family></default> </alias> <alias> <family>sans</family> <prefer><family>Linux Libertine</family></prefer> <default><family>Material Icons</family></default> </alias> <alias> <family>monospace</family> <prefer><family>Hack</family></prefer> <default><family>Material Icons</family></default> </alias> </fontconfig
修復了 gucharmap 字形與要複製的文本不匹配的 問題,但是應用程序不呈現字形的問題仍然存在。
這讓我認為問題在於應用程序沒有使用正確的字型來呈現字形。我假設為別名設置預設標籤會成功,因此如果首選字型不包含 unicode 字元,它們將用作備份。我覺得這是錯誤的,但文件並沒有真正說清楚。
更新
有人要求輸出
locale
,所以這裡是:LANG=en_GB.utf8 LC_CTYPE="en_GB.utf8" LC_NUMERIC="en_GB.utf8" LC_TIME="en_GB.utf8" LC_COLLATE="en_GB.utf8" LC_MONETARY="en_GB.utf8" LC_MESSAGES="en_GB.utf8" LC_PAPER="en_GB.utf8" LC_NAME="en_GB.utf8" LC_ADDRESS="en_GB.utf8" LC_TELEPHONE="en_GB.utf8" LC_MEASUREMENT="en_GB.utf8" LC_IDENTIFICATION="en_GB.utf8" LC_ALL=
我想幫助您了解事情的運作方式,以便您自己解決這些問題。你身上發生的事情是非常正常的行為。
但是,應用程序不呈現字形的問題仍然存在
你沒有提到哪個應用程序失敗。您需要轉到每個應用程序並設置包含您的字形的字型。例如 LibreOffice,您轉到
Tools -> Options -> LibreOffice Writer -> Basic Fonts (Western)
或Basic Fonts (CTL)
設置字型Default, Heading, List, Caption, Index"
。你不應該期望你的配置文件來控制它。那你可能會問:
這是為什麼
fontconfig
?prefer
, , …是什麼default
以及在做時提到的所有內容man fonts-conf
?一種用途是,如果應用程序無法設置其字型而只遵循 fontconfig,另一種情況是,如果您使用通用姓氏術語配置應用程序,如
serif
,sans-serif
,monospace
, …在這裡,您的應用程序將諮詢fontconfig
您的首選字型。同樣,每個應用程序都有其設置字型的方式。對於它們中的每一個,您都需要按照預期的方式對其進行配置。您無法強制所有應用程序全域使用您想要的字型。