使用更纱黑体替换ubuntu系统默认字体[新年第一帖]

系统字体配置、中文显示和输入法问题
回复
zrqlx126
帖子: 400
注册时间: 2007-06-22 18:52

使用更纱黑体替换ubuntu系统默认字体[新年第一帖]

#1

帖子 zrqlx126 »

一、字体准备
英文字体(四字重)
  • 西文衬线字体:Noto Serif (regular、bold、italic、bolditalic)
  • 西文无衬线字体:ubuntu(regular、bold、italic、bolditalic)
  • 西文等宽字体:Ubuntu Mono(regular、bold、italic、bolditalic)
中文字体(四字重)
  • 宋体:Noto Serif CJK {SC,TC}(regular、bold、italic、bolditalic)
  • 黑体:Noto Sans CJK {SC,HK,TC}(regular、bold、italic、bolditalic)
  • 黑体(西文等宽):Noto Sans Mono {SC,HK,TC}(regular、bold、italic、bolditalic)
需要说明的是,除了更纱黑体外,基本上简体中文ubuntu系统已经全部自带了上述字体,无需下载。更纱黑体字形说明,可以查看之前的文章viewtopic.php?f=8&t=492571
二、下载更纱黑体
这里下载更纱黑体的无微调ttf版本,并且仅提取简体中文的四个字重字体 (regular、bold、italic、bolditalic),为了不破坏系统字体,这里只安装到用户目录的字体文件夹中。

代码: 全选

# 这里从清华大学开源网站下载最新版
wget -c https://mirrors.tuna.tsinghua.edu.cn/github-release/be5invis/Sarasa-Gothic/LatestRelease/sarasa-gothic-ttf-unhinted-0.35.8.7z
# 创建临时文件夹
mkdir -p tmp_fonts
# 创建解压文件列表
cat > file << 'EOF'
sarasa-mono-sc-bolditalic.ttf
sarasa-mono-sc-bold.ttf
sarasa-mono-sc-italic.ttf
sarasa-mono-sc-regular.ttf
sarasa-ui-sc-bolditalic.ttf
sarasa-ui-sc-bold.ttf
sarasa-ui-sc-italic.ttf
sarasa-ui-sc-regular.ttf
EOF
# 解压文件
7z x -t7z sarasa-gothic-ttf-unhinted-0.35.8.7z -otmp_fonts -i@file
# 将字体移动到主目录字体文件夹
mkdir -p ~/.local/share/fonts
mv tmp_fonts/*.ttf ~/.local/share/fonts
三、字体配置
第一,设置西文字体(强绑定)优先级高于简体中文,保证字体匹配时优先使用英文字体替换中文字体。

代码: 全选

	<alias binding="strong">
		<family>serif</family>
		<prefer><family>Noto Serif</family></prefer>
	</alias>
	<alias binding="strong">
		<family>sans-serif</family>
		<prefer><family>Ubuntu</family></prefer>
	</alias>
	<alias binding="strong">
		<family>monospace</family>
		<prefer><family>Ubuntu Mono</family></prefer>
	</alias>
第二, 设置简体中文字体(强绑定)优先级低于西文字体,用于覆盖 ubuntu 中其他配置文件,这里不再考虑语言选项,强绑定优先级高于语言设置。其他语言用户,可以在下一段中对中文字体进行替换,以符合需求。

代码: 全选

	<alias binding="strong">
		<family>serif</family>
		<prefer><family>Noto Serif CJK SC</family></prefer>
	</alias>
	<alias binding="strong">
		<family>sans-serif</family>
		<prefer><family>Sarasa UI SC</family></prefer>
	</alias>
	<alias binding="strong">
		<family>monospace</family>
		<prefer><family>Sarasa Mono SC</family></prefer>
	</alias>
第三,根据中文语言环境,选择合适的字体替换简体中文字体,以符合需求。这里对港澳台等地区,均使用 noto 系列字体对中文简体字体进行替换。

代码: 全选

	<!-- 香港 -->
	<match target="pattern">
		<test name="lang"><string>zh-hk</string></test>
		<test name="family"><string>Noto Serif CJK SC</string></test>
		<test name="family"><string>serif</string></test>
		<edit name="family" binding="strong"><string>Noto Serif CJK TC</string></edit>
	</match>
	<match target="pattern">
		<test name="lang"><string>zh-hk</string></test>
		<test name="family"><string>Sarasa UI SC</string></test>
		<test name="family"><string>sans-serif</string></test>
		<edit name="family" binding="strong"><string>Noto Sans CJK HK</string></edit>
	</match>
	<match target="pattern">
		<test name="lang"><string>zh-hk</string></test>
		<test name="family"><string>Sarasa Mono SC</string></test>
		<test name="family"><string>monospace</string></test>
		<edit name="family" binding="strong"><string>Noto Sans Mono CJK HK</string></edit>
	</match>
	<!-- 澳门 -->
	<match target="pattern">
		<test name="lang"><string>zh-mo</string></test>
		<test name="family"><string>Noto Serif CJK SC</string></test>
		<test name="family"><string>serif</string></test>
		<edit name="family" binding="strong"><string>Noto Serif CJK TC</string></edit>
	</match>
	<match target="pattern">
		<test name="lang"><string>zh-mo</string></test>
		<test name="family"><string>Sarasa UI SC</string></test>
		<test name="family"><string>sans-serif</string></test>
		<edit name="family" binding="strong"><string>Noto Sans CJK TC</string></edit>
	</match>
	<match target="pattern">
		<test name="lang"><string>zh-mo</string></test>
		<test name="family"><string>Sarasa Mono SC</string></test>
		<test name="family"><string>monospace</string></test>
		<edit name="family" binding="strong"><string>Noto Sans Mono CJK TC</string></edit>
	</match>
	<!-- 台湾 -->
	<match target="pattern">
		<test name="lang"><string>zh-tw</string></test>
		<test name="family"><string>Noto Serif CJK SC</string></test>
		<test name="family"><string>serif</string></test>
		<edit name="family" binding="strong"><string>Noto Serif CJK TC</string></edit>
	</match>
	<match target="pattern">
		<test name="lang"><string>zh-tw</string></test>
		<test name="family"><string>Sarasa UI SC</string></test>
		<test name="family"><string>sans-serif</string></test>
		<edit name="family" binding="strong"><string>Noto Sans CJK TC</string></edit>
	</match>
	<match target="pattern">
		<test name="lang"><string>zh-tw</string></test>
		<test name="family"><string>Sarasa Mono SC</string></test>
		<test name="family"><string>monospace</string></test>
		<edit name="family" binding="strong"><string>Noto Sans Mono CJK TC</string></edit>
	</match>
第四,将 OpenSymbol 符号字体放在中文字体之后,优先级低于中文,这里主要修正 libreoffice 中列表符号显示错误的问题,该问题主要是符号字体匹配的问题。可以查看 https://forum.ubuntu.com.cn/viewtopic.php?f=35&t=491968

代码: 全选

	<alias binding="strong">
		<family>serif</family>
		<prefer><family>OpenSymbol</family></prefer>
	</alias>
	<alias binding="strong">
		<family>sans-serif</family>
		<prefer><family>OpenSymbol</family></prefer>
	</alias>
	<alias binding="strong">
		<family>monospace</family>
		<prefer><family>OpenSymbol</family></prefer>
	</alias>
第五,字体渲染全部为使用矢量字体的用户考虑, 开启抗锯齿,优先使用内置微调,微调类型全部设置为 hintslight,lcdfilter 模式全部设置为 cddefault,启用内置点阵(表情符号必须开启内嵌点阵),禁用合成粗体。

代码: 全选

	<match target="font">
        	<edit name="antialias"><bool>true</bool></edit>
		<edit name="hinting"><bool>true</bool></edit>
		<edit name="autohint"><bool>false</bool></edit>
		<edit name="hintstyle"><const>hintslight</const></edit>
		<edit name="rgba"><const>rgb</const></edit>
		<edit name="lcdfilter"><const>lcddefault</const></edit>
		<edit name="embeddedbitmap"><bool>true</bool></edit>
		<edit name="embolden"><bool>false</bool></edit>
	</match>
第六,修正等宽西文在与 Sarasa Mono SC 混排时的对齐效果,这里首先设置奇偶标记,判断字体大小是否为奇数,是奇数返回 true 是偶数返回 false。该段落完全照抄了金步国Linux字体美化实战(Fontconfig配置)文章。该文章地址为http://www.jinbuguo.com/gui/linux_fontconfig.html

代码: 全选

	<!-- 设置奇偶标记 -->
	<match target="font">
		<test name="family"><string>Sarasa Mono SC</string></test>
		<edit name="isOddPx">
			<eq>
				<round><divide><plus><name>pixelsize</name><double>0.5</double></plus><double>2</double></divide></round>
				<ceil><divide><plus><name>pixelsize</name><double>0.5</double></plus><double>2</double></divide></ceil>
			</eq>
		</edit>
	</match>
	<!-- 如果"视觉大小"是奇数,那么上调为偶像素,因为 Monospace 在奇像素下总是大一级显示 -->
	<match target="font">
		<test name="family"><string>Sarasa Mono SC</string></test>
		<test name="isOddPx"><bool>true</bool></test>
		<edit name="pixelsize"><plus><name>pixelsize</name><int>1</int></plus></edit>
	</match>
第七,修正等宽西文在与 Noto Sans Mono CJK HK 以及 Noto Sans Mono CJK TC 混排时的对齐效果,方法同上。
第九,删除奇偶标记

代码: 全选

	<match target="font">
		<edit name="isOddPx" mode="delete"></edit>
	</match>
完整的配置文件可以在附件中下载,下载后去掉后缀,将文件重名为fonts.conf。考虑到字体配置有较大危险性,为了系统安全考虑,配置文件仅放在用户的字体配置文件夹中,同时为了方便查看和理解,将所有配置文件写在一个文件中。
最后,就可以对系统字体进行设置了,打开终端,输入以下代码,设置系统字体,注销或者重启就可以看到效果。

代码: 全选

gsettings set org.gnome.desktop.interface font-name 'Sans 10'
gsettings set org.gnome.desktop.interface document-font-name 'Serif 10'
gsettings set org.gnome.desktop.interface monospace-font-name 'Monospace 10'
gsettings set org.gnome.desktop.wm.preferences titlebar-font 'Sans Bold 10'
该配置文件参考了众多开源文章。对于中西等款条件下的文本对齐,重点参考了金步国的翻译的fonts.conf 中文手册http://www.jinbuguo.com/gui/fonts.conf.html以及Linux字体美化实战(Fontconfig配置)http://www.jinbuguo.com/gui/linux_fontconfig.html,由于本人水平有限,错误之处在所难免,欢迎坛友修改指正。
附件
fonts.conf.txt
(8.07 KiB) 已下载 142 次
上次由 zrqlx126 在 2022-02-07 21:28,总共编辑 3 次。
头像
Ping-Wu
帖子: 1822
注册时间: 2012-11-14 9:34
系统: Debian 12

Re: 使用更纱黑体替换ubuntu系统默认字体[新年第一帖]

#2

帖子 Ping-Wu »

感谢花时间整理这些资料。不过我觉得有点太复杂了,刚开始应该再简单一点才会有更多人参与。有时间再提出我的意见。

另外,我从 Font-Manager 打开 sarasa-ui-sc,发现它本身也包括了繁体中文跟日韩字体。

期待第二帖
zrqlx126
帖子: 400
注册时间: 2007-06-22 18:52

Re: 使用更纱黑体替换ubuntu系统默认字体[新年第一帖]

#3

帖子 zrqlx126 »

看起来是复杂了一些,在帖子中已经把每一步是干什么的,写的比较明白了。配置文件看起来很长,其实是可以精简的。
第一步覆盖系统英文字体设定,第二步覆盖系统简体中文设定,这两步是必须的。
第三步,港澳台地区设定,配置文件也说明了,由于我们只使用了更纱黑体中文部分的四个字重,并且只使用了ui和mono两种字形。所以如果需要新加坡(使用简体)、韩、日等地区字体设定的,可以自行安装中、日、韩等其他字形,在第三步之后,照着港澳台的设定文本再写一段就行了,并不复杂。如果仅仅使用简体中文环境,那么这一步可完全可以跳过。
第四步, 主要解决 libreoffice 中列表符号显示错误的问题,当然这个仅改善观感,不影响正常使用,该步骤完全可以跳过。
第五步,主要是对字体进行渲染,这一步西文和中文使用相同的渲染配置,需要单独渲染中文的,可以在下面按照自己的意愿针对单个字体再写一段。当然系统其他配置文件中也有相关设定,这里仅仅是再明确一次。该步骤完全可以跳过。
第六、七、九步是对等宽字体进行的特别调整,确保系统在使用mono字族时,可以视觉上对齐。该步骤仅仅影响观感,完全可有可无,不喜欢的也可以跳过这些步骤。
所以精简一下,这就不到40行(含注释)

代码: 全选

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
	<!-- 设置西文字体(强绑定)优先级高于简体中文,
	保证字体匹配时优先使用英文字体替换中文字体。
	-->
	<alias binding="strong">
		<family>serif</family>
		<prefer><family>Noto Serif</family></prefer>
	</alias>
	<alias binding="strong">
		<family>sans-serif</family>
		<prefer><family>Ubuntu</family></prefer>
	</alias>
	<alias binding="strong">
		<family>monospace</family>
		<prefer><family>Ubuntu Mono</family></prefer>
	</alias>

	<!-- 设置简体中文字体(强绑定)优先级低于西文字体,
	用于覆盖 ubuntu 中其他配置文件,这里不再考虑语言选
	项,强绑定优先级高于语言设置。其他语言用户,可以在
	下一段中对中文字体进行替换,以符合需求。
	-->
	<alias binding="strong">
		<family>serif</family>
		<prefer><family>Noto Serif CJK SC</family></prefer>
	</alias>
	<alias binding="strong">
		<family>sans-serif</family>
		<prefer><family>Sarasa UI SC</family></prefer>
	</alias>
	<alias binding="strong">
		<family>monospace</family>
		<prefer><family>Sarasa Mono SC</family></prefer>
	</alias>
</fontconfig>
上次由 zrqlx126 在 2022-02-07 21:33,总共编辑 1 次。
头像
zzugyl
帖子: 360
注册时间: 2011-03-07 17:26
系统: Ubuntu 20.04.3 LTS

Re: 使用更纱黑体替换ubuntu系统默认字体[新年第一帖]

#4

帖子 zzugyl »

设置界面、文件管理和web浏览页面,实际效果如何?
常在深闺人未识 一朝成名天下知
zrqlx126
帖子: 400
注册时间: 2007-06-22 18:52

Re: 使用更纱黑体替换ubuntu系统默认字体[新年第一帖]

#5

帖子 zrqlx126 »

zzugyl 写了: 2022-02-02 12:28 设置界面、文件管理和web浏览页面,实际效果如何?
效果这个问题就看个人喜好了,noto系列字体瘦长,个人并不喜欢。更纱黑体字体方方正正,看起来还是不错的。
个人推荐如下设置:
1.显示器分辨率在1080p及以下的。
衬线字体:Noto Serif + Noto Serif CJK SC
无衬线字体:HarmonyOS Sans + HarmonyOS Sans SC (鸿蒙系统字体,免费授权)
等宽字体:Iosevka(更纱黑体作者的另外一款开源西文等宽字体) + Noto Sans Mono CJK SC
显示设置:10pt,字体缩放1.0,显示缩放100%。
2.显示器分辨率为2k及以上的。
衬线字体:Noto Serif + Noto Serif CJK SC
无衬线字体:Ubuntu + Sarasa UI SC
等宽字体:Ubuntu Mono + Sarasa Mono SC
显示设置:10pt,字体缩放1.0,显示缩放150%或200%。
我这里屏幕分辨率1080p,但是采用第二个方案。截图如下:
2022-02-02 17-23-02屏幕截图.png
2022-02-02 17-21-06屏幕截图.png
2022-02-02 17-25-01屏幕截图.png
2022-02-02 17-25-40屏幕截图.png
2022-02-02 17-27-13屏幕截图.png
上次由 zrqlx126 在 2022-02-07 21:38,总共编辑 1 次。
头像
Ping-Wu
帖子: 1822
注册时间: 2012-11-14 9:34
系统: Debian 12

Re: 使用更纱黑体替换ubuntu系统默认字体[新年第一帖]

#6

帖子 Ping-Wu »

Fontconfig 是 Keith Packard 年轻时写的,现在接近退休了,我们还在使用。这么多年来,fontconfig 并没有太大的改变,最少跟硬体进步的脚步完全不能比。另外如我在另帖指出,Ubuntu 在显示中文时还是会出现一些乱码,以前介绍给在政府机构服务的朋友使用时,真是丢尽了脸。(很奇怪,后来我们转到 Debian 后,同样的情况下,则没有问题???)

我个人的想法是,干脆根本不使用 fontconfig。Noto sans CJK SC 出来后,解决了英文字母等距的问题。我们曾经尝试独尊这个字体,但碰到另一个很严重的问题(已在另帖指出)。另外一个问题是 Noto sans CJK SC 里的英文字是非等距的,基本上无法在终端机上使用。

sarasa-ui-sc 解决了第一个问题。终端机的问题可以经由修改首选项,使用 sarasa-mono-sc,第二个问题也解决。理论上应该不需要 fontconfig 了。???

基本上 sarasa-ui-sc + sarasa-mono-sc 应该可以解决99% Linux 桌面使用者中英文字体上的需要。对那些特别挑剔的个人(如百草谷老居士😸)或一般公司或行政机构可以另行购买其它的字体。大型的应用软件如 LibreOffice, GIMP 等,都可以自己加入字体,不需要动到 fontconfig。Gnome Tweaker 里的字体选择功能经过这么多年的开发,也很成熟了。

过年后我会自己试一下。另外如我在上面提到, sarasa-ui-sc 好像也包括了繁体中文?如果我们能利用我们 Linux 桌面的经验对两岸统一做出一些贡献,再怎么卑微,这一辈子也没有白活了。
头像
Ping-Wu
帖子: 1822
注册时间: 2012-11-14 9:34
系统: Debian 12

Re: 使用更纱黑体替换ubuntu系统默认字体[新年第一帖]

#7

帖子 Ping-Wu »

刚刚动手把我的 Debian 12 有关字体方面做了一些调整,基本上:

(1)把系统里所有字体(/usr/share/fonts/*)移到 /opt/fonts/,然后把 sarasa-ui-sc (非等距更纱简体中文黑体)以及 sarasa-mono-sc (等距更纱简体中文黑体)两种中文字群放入 /usr/share/fonts/ 里,每一种字群各有10个属性;
(2)把 /etc/fonts 遮盖住 (mv fonts fonts.bak),间接的取消了 fontconfig 的功能;
(3)利用 gnome tweak 套件选择适当字体(即 sarasa-ui-sc 或 sarasa-mono-sc)供系统使用。

重新开机后,一切都很正常。虽然是简体中文字体,显示及输出繁体中文或日文也没问题(英文当然更没问题)。

这样做,整个系统只需要两种字体,变得很简单了。如果有绝对必要的话,可以从 /opt/fonts 里复制出来,或到网络上免费或付费下载,也很方便。不过最重要的是,先从最简单的做起。

《2022.0223 补充》今天我发现一个很严重的问题,差一点就决定把这项(极端重要☺的)计划放弃。

我发现在 Google Chrome 下,撇号『‘』被显示为 『â(TM)』,如 can't 被显示为 caâ(TM)t,you've 被显示为 youâ(TM)re。这是一个很严重的问题,正准备把 /usr/share/fonts 跟 /etc/fonts/ 回复原状,后来又发现,这些问题只出现在两个人的意见文里,所有其他的网页,完全没有这个问题这两个人一定是用了某种古怪(esoteric)的浏览器来发文,根本不必理会。会使用这种浏览器的人也一定不会是什么好东西。

(待续)
头像
Ping-Wu
帖子: 1822
注册时间: 2012-11-14 9:34
系统: Debian 12

Re: 使用更纱黑体替换ubuntu系统默认字体[新年第一帖]

#8

帖子 Ping-Wu »

看起来更纱黑不属于 “cairo scaled font” (???),在显示有些 pdf 档案时都是方块。

Fontconfig error: Cannot load default config file

(evince:47106): Pango-WARNING **: 16:44:16.614: failed to create cairo scaled font, expect ugly output. the offending font is 'Sarasa UI SC 14'

这个有关脱离 fontconfig 的尝试也算玩够了,下一步就要转到 VBox 虚拟机继续进行。实际吃饭工具,工作机器,则一切回到原状。两天的咖啡时间,得到不少经验以及新的知识,从书本跟网络是学不到的!
头像
Ping-Wu
帖子: 1822
注册时间: 2012-11-14 9:34
系统: Debian 12

Re: 使用更纱黑体替换ubuntu系统默认字体[新年第一帖]

#9

帖子 Ping-Wu »

Ping-Wu 写了: 2022-02-24 11:02这个有关脱离 fontconfig 的尝试也算玩够了,下一步就要转到 VBox 虚拟机继续进行。实际吃饭工具,工作机器,则一切回到原状。两天的咖啡时间,得到不少经验以及新的知识,从书本跟网络是学不到的!
今天我的系统(Debian 12)的内核从 5.16.0-1-amd64 升级到 5.16.0-3-amd64 后,发现不能开机。重新开机时,按 F10 转回 5.16.0-1 内核开机后,找出无法从 5.16.0-3 开机的原因,乃在于因为没有 fontconfig,系统无法编译配合新内核的 initramfs,当然无法开机。

本来想这个 fontconfig-free 的日子还可以再敖几天,但这个内核无法升级的问题破坏了这个构想。不过回到原来的系统只需要把 /usr/share/fonts/ 跟 /etc/fonts/ 这两个档案夹还原,再重新开机,整个过程不到两分钟。
回复