我正在使用 Arch Linux,但我似乎无法解决的一件事是 Unicode 字体。
我会给你一个例子来说明哪里出了问题。这是 gucharmap 的屏幕截图:
左上角选定的字形按其应有的方式呈现,但随后要复制的文本呈现为完全不同的图标,可能与另一种字体不同。
这是 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=
答案1
我想帮助您了解事情是如何运作的,以便您可以自己解决此类问题。你所发生的事情是一种非常正常的行为。
然而,应用程序不渲染字形的问题仍然存在
您没有提到哪个应用程序失败。您需要转到每个应用程序并设置包含字形的字体。例如 LibreOffice,您可以转到Tools -> Options -> LibreOffice Writer -> Basic Fonts (Western)
、 或Basic Fonts (CTL)
并设置 的字体Default, Heading, List, Caption, Index"
。你不应该指望你的配置文件来控制它。
那么你可能会问:
为什么是这样fontconfig
?什么是prefer
、default
、 ... 以及 do 中提到的所有内容man fonts-conf
?
一使用是如果应用程序无法设置其字体并且只能遵循 fontconfig,花药是如果您使用通用姓氏术语配置您的应用程序,例如serif
, sans-serif
, monospace
, ...这里,您的应用程序将咨询fontconfig
您的首选字体。
同样,每个应用程序都有其设置字体的方式。对于其中的每一个,您都需要按照其本来的方式进行配置。有您无法强制全球所有应用程序使用您想要的字体。