Arch-Linux

奇怪的Unicode行為

  • February 23, 2020

我正在使用 Arch Linux,而我似乎無法正確理解的一件事是 Unicode 字型。

我會給你一個錯誤的例子。這是 gucharmap 的截圖: 古查爾圖

左上角的選定字形按應有的方式呈現,但隨後要複製的文本呈現為與另一種字型完全不同的圖示。

然後是顯示相同圖示的 urxvt 螢幕截圖:

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"。你不應該期望你的配置文件來控制它。

那你可能會問:

這是為什麼fontconfigprefer, , …是什麼default以及在做時提到的所有內容man fonts-conf

一種用途是,如果應用程序無法設置其字型而只遵循 fontconfig,一種情況是,如果您使用通用姓氏術語配置應用程序,如serif, sans-serif, monospace, …在這裡,您的應用程序將諮詢fontconfig您的首選字型。

同樣,每個應用程序都有其設置字型的方式。對於它們中的每一個,您都需要按照預期的方式對其進行配置。您無法強制所有應用程序全域使用您想要的字型。

引用自:https://unix.stackexchange.com/questions/567877