Noto Sans CJK otf格式的问题

系统字体配置、中文显示和输入法问题
回复
mdmawat
帖子: 1
注册时间: 2017-05-21 19:38
系统: Debian
送出感谢: 0
接收感谢: 0

Noto Sans CJK otf格式的问题

#1

帖子 mdmawat » 2017-05-21 19:48

OS: Debian Testing
DE: Mate 1.16
没有用官方源中的TTC格式的字体,而是从Google官方下载的NotoSansCJKcs.OTF,结果发现字体无法加载。有没有人遇到过类似的问题?
使用官方OTF的目的有两个,一个是我发现OTF的渲染效果更好一点,其次是源中的TTC格式需要fontconfig中重新排定优先级,否则根据字母排序jp日本汉字先出来。
附件
mate-de-fonts.png
头像
AutoXBC
帖子: 1750
注册时间: 2007-10-23 12:54
送出感谢: 2 次
接收感谢: 24 次

Re: Noto Sans CJK otf格式的问题

#2

帖子 AutoXBC » 2017-05-22 1:10

用 Kubuntu 17.04 测试了一下,Google 官方下载版没有问题,可以正常使用。注意自行添加字体后,应该手动刷新字体缓存

代码: 全选

fc-cache -fv
我发现OTF的渲染效果更好一点
ttc 是一种字体容器格式,并不是字体本身的格式。字体本身分为 TrueType 和 OpenType,Noto 的 otf 下载版是 OpenType 格式,同时 Debian 源中的 ttc 容器包含的字体也是 OpenType 格式。以下可以佐证:

https://packages.debian.org/sid/all/fon ... k/filelist
其中明确说明安装目录是 /usr/share/fonts/opentype/noto/

如下命令的输出
$fc-match -v 'Microsoft Yahei' | grep format
fontformat: "TrueType"(w)

$fc-match -v 'Noto Sans CJK SC' | grep format
fontformat: "CFF"(w)
CFF 是基于 OpenType 的压缩字体。我觉得所谓 otf 效果更好应该是错觉,希望你贴图证明。
源中的TTC格式需要fontconfig中重新排定优先级,否则根据字母排序jp日本汉字先出来
Google 的官方下载版文件 NotoSansCJKsc-hinted.zip 如其文件名说言,仅仅包含 Noto Sans CJK SC 和 Noto Sans Mono CJK SC 两个简体中文字体,如此才不需要调节 fontconfig 中的字体顺序;而 Debian 源中的 fonts-noto-cjk_1.004+repack2-2_all.deb 同时包含了 CJK 国际区中的简体中文,繁体中文,韩文,日文。所以,所谓下载版不需要调节字体顺序,是以无法使用繁体中文,韩文,日文字体为代价的,并不是下载版有什么魔法。

如上,下载版和仓库版并无实质不同。从 noto 开发的初衷看,应该用其覆盖所有文字,才能达成无豆腐块。所以,推荐继续用仓库中的版本,并调节 fontconfig 将 Noto Sans CJK SC 置于优先位置。
头像
Ping-Wu
帖子: 776
注册时间: 2012-11-14 9:34
系统: Ubuntu 18.04
送出感谢: 2 次
接收感谢: 40 次

Re: Noto Sans CJK otf格式的问题

#3

帖子 Ping-Wu » 2017-05-22 2:04

AutoXBC 写了:用 Kubuntu 17.04 测试了一下,Google 官方下载版没有问题,可以正常使用。注意自行添加字体后,应该手动刷新字体缓存

代码: 全选

fc-cache -fv
我发现OTF的渲染效果更好一点
ttc 是一种字体容器格式,并不是字体本身的格式。字体本身分为 TrueType 和 OpenType,Noto 的 otf 下载版是 OpenType 格式,同时 Debian 源中的 ttc 容器包含的字体也是 OpenType 格式。以下可以佐证:

https://packages.debian.org/sid/all/fon ... k/filelist
其中明确说明安装目录是 /usr/share/fonts/opentype/noto/

如下命令的输出
$fc-match -v 'Microsoft Yahei' | grep format
fontformat: "TrueType"(w)

$fc-match -v 'Noto Sans CJK SC' | grep format
fontformat: "CFF"(w)
CFF 是基于 OpenType 的压缩字体。我觉得所谓 otf 效果更好应该是错觉,希望你贴图证明。
源中的TTC格式需要fontconfig中重新排定优先级,否则根据字母排序jp日本汉字先出来
Google 的官方下载版文件 NotoSansCJKsc-hinted.zip 如其文件名说言,仅仅包含 Noto Sans CJK SC 和 Noto Sans Mono CJK SC 两个简体中文字体,如此才不需要调节 fontconfig 中的字体顺序;而 Debian 源中的 fonts-noto-cjk_1.004+repack2-2_all.deb 同时包含了 CJK 国际区中的简体中文,繁体中文,韩文,日文。所以,所谓下载版不需要调节字体顺序,是以无法使用繁体中文,韩文,日文字体为代价的,并不是下载版有什么魔法。

如上,下载版和仓库版并无实质不同。从 noto 开发的初衷看,应该用其覆盖所有文字,才能达成无豆腐块。所以,推荐继续用仓库中的版本,并调节 fontconfig 将 Noto Sans CJK SC 置于优先位置。
我看了一下Ubuntu Mate 17.04里的 69-language-selector-zh-cn.conf 档案,发现还是有点乱,而且也没有考虑到noto serif字体:
fontconfig.1704.jpg
是否有好的建议让我们试试去改善?
上次由 Ping-Wu 在 2017-05-22 7:27,总共编辑 1 次。
头像
AutoXBC
帖子: 1750
注册时间: 2007-10-23 12:54
送出感谢: 2 次
接收感谢: 24 次

Re: Noto Sans CJK otf格式的问题

#4

帖子 AutoXBC » 2017-05-22 3:25

Ping-Wu 写了:我看了一下Ubuntu Mate 17.04里的 69-language-selector-zh-cn.conf 档案,发现还是有点乱,而且也没有考虑到noto sans-serif字体,是否有好的建议让我们试试去改善?
如果可以修改上游项目 fontconfig,改进 69-language-selector-zh-cn.conf 的内容,我建议写成这个顺序,其他字体一律不写
DejaVu
Noto
动不了 fontconfig,我希望某个桌面套件或者发行版出个前端工具,让用户选择首选西文字体,首选中文字体,然后生成配置文件,可以迅速解决绝大多数用户的疑问。

什么都动不了的话,只能自行写 ~/.fonts.conf,衬线非衬线等宽一共就需要写 6 行,其他删除。这个位置优先级最高,升级也不会覆盖,写完一劳永逸。
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<match target="pattern">
<test name="family" qual="any">
<string>serif</string>
</test>
<edit name="family" binding="strong" mode="prepend">
<string>DejaVu Serif</string>
<string>Microsoft YaHei</string>

</edit>
</match>
<match target="pattern">
<test name="family" qual="any">
<string>sans-serif</string>
</test>
<edit name="family" binding="strong" mode="prepend">
<string>DejaVu Sans</string>
<string>Microsoft YaHei</string>

</edit>
</match>
<match target="pattern">
<test name="family" qual="any">
<string>monospace</string>
</test>
<edit name="family" binding="strong" mode="prepend">
<string>DejaVu Sans Mono</string>
<string>Microsoft YaHei</string>

</edit>
</match>
<dir>~/.fonts</dir>
<match target="font">
<edit name="rgba" mode="assign">
<const>rgb</const>
</edit>
</match>
<match target="font">
<edit name="hinting" mode="assign">
<bool>true</bool>
</edit>
</match>
<match target="font">
<edit name="hintstyle" mode="assign">
<const>hintfull</const>
</edit>
</match>
<match target="font">
<edit name="antialias" mode="assign">
<bool>true</bool>
</edit>
</match>
</fontconfig>
头像
Ping-Wu
帖子: 776
注册时间: 2012-11-14 9:34
系统: Ubuntu 18.04
送出感谢: 2 次
接收感谢: 40 次

Re: Noto Sans CJK otf格式的问题

#5

帖子 Ping-Wu » 2017-05-23 1:34

AutoXBC 写了:
Ping-Wu 写了:我看了一下Ubuntu Mate 17.04里的 69-language-selector-zh-cn.conf 档案,发现还是有点乱,而且也没有考虑到noto sans-serif字体,是否有好的建议让我们试试去改善?
如果可以修改上游项目 fontconfig,改进 69-language-selector-zh-cn.conf 的内容,我建议写成这个顺序,其他字体一律不写
DejaVu
Noto
动不了 fontconfig,我希望某个桌面套件或者发行版出个前端工具,让用户选择首选西文字体,首选中文字体,然后生成配置文件,可以迅速解决绝大多数用户的疑问。

什么都动不了的话,只能自行写 ~/.fonts.conf,衬线非衬线等宽一共就需要写 6 行,其他删除。这个位置优先级最高,升级也不会覆盖,写完一劳永逸。
我第一次把话讲错了,真的是太对不起Ubuntu的中文开发亲们! :Aadterboom

在69-language-selector-xx-xx.conf 之后,有一个 70-fonts-noto-cjk.conf 档案,专门处理 noto 字体。

在Ubuntu Mate 17.04里,所有的中文衬线(serif)字体,都由非衬线(sans-serif)Noto字体取代:

代码: 全选

<match target="pattern">
        <test name="lang">
            <string>zh-cn</string>
        </test>
        <test name="family">
            <string>serif</string>
        </test>
        <edit name="family" mode="prepend">
            <string>Noto Sans CJK SC</string>
        </edit>
    </match>
如果我们一定要使用serif字体的话,可以在 /etc/fonts/conf.d 里,加一个像下面这么一个档案:

71-fonts-noto-cjk-serif.conf

代码: 全选

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>

    <match target="pattern">
        <test name="lang">
            <string>zh-cn</string>
        </test>
        <test name="family">
            <string>serif</string>
        </test>
        <edit name="family" mode="prepend">
            <string>Noto Serif CJK SC</string>
        </edit>
    </match>

    <match target="pattern">
        <test name="lang">
            <string>zh-tw</string>
        </test>
        <test name="family">
            <string>serif</string>
        </test>
        <edit name="family" mode="prepend">
            <string>Noto Serif CJK TC</string>
        </edit>
    </match>

 </fontconfig>
衬线(serif)跟非衬线(sans-serif)的比较,可以由底下所附的两个截图参考:

衬线(serif):
serif.jpg
非衬线(sans-serif):
sans-serif.jpg
对我个人来讲,因为看惯了手机里的非衬线字型,衬线字型读起来很不习惯。

因此,Ubuntu的做法,把衬线中文字型用非衬线NotoCJK字型显示,是正确的。
头像
AutoXBC
帖子: 1750
注册时间: 2007-10-23 12:54
送出感谢: 2 次
接收感谢: 24 次

Re: Noto Sans CJK otf格式的问题

#6

帖子 AutoXBC » 2017-05-23 2:03

Ping-Wu 写了:如果我们一定要使用serif字体的话,可以在 /etc/fonts/conf.d 里,加一个像下面这么一个档案
Debian 系中没有打包 Noto Serif CJK 分支,写这个配置的话,要手动去 Google 的页面下载衬线字体。
头像
Ping-Wu
帖子: 776
注册时间: 2012-11-14 9:34
系统: Ubuntu 18.04
送出感谢: 2 次
接收感谢: 40 次

Re: Noto Sans CJK otf格式的问题

#7

帖子 Ping-Wu » 2017-05-23 2:07

Ping-Wu 写了:衬线(serif)跟非衬线(sans-serif)的比较,可以由底下所附的两个截图参考:

衬线(serif):
图片

非衬线(sans-serif):
图片

对我个人来讲,因为看惯了手机里的非衬线字型,衬线字型读起来很不习惯。

因此,Ubuntu的做法,把衬线中文字型用非衬线NotoCJK字型显示,是正确的。
另外讲一个我们自己的经验。浏览网页,用非衬线字体,但是在办公室做文书处理时,却必须使用到衬线字体。下面是两种字体,在LibreOffice(5.3.0 可携带版)里做比较:
Untitled 1 - LibreOffice Writer_006.jpg
别的不说,打印非衬线字体的文件时,墨水没有几天就用完了。这是像我这种做老板的人最关心的事,但一般Linux支持者(Linux enthusiasts)根本不会去注意这些非技术上的事。
madjxatw
帖子: 14
注册时间: 2011-04-10 21:08
送出感谢: 0
接收感谢: 0

Re: Noto Sans CJK otf格式的问题

#8

帖子 madjxatw » 2018-02-01 22:28

Debian 9 源中的ttc格式似乎没有 hint 信息? 我用下来也感觉不如 google 官方的美观。Ubuntu有没有重新打过包不清楚。
madjxatw
帖子: 14
注册时间: 2011-04-10 21:08
送出感谢: 0
接收感谢: 0

Re: Noto Sans CJK otf格式的问题

#9

帖子 madjxatw » 2018-02-01 22:34

AutoXBC 写了:用 Kubuntu 17.04 测试了一下,Google 官方下载版没有问题,可以正常使用。注意自行添加字体后,应该手动刷新字体缓存

代码: 全选

fc-cache -fv
我发现OTF的渲染效果更好一点
ttc 是一种字体容器格式,并不是字体本身的格式。字体本身分为 TrueType 和 OpenType,Noto 的 otf 下载版是 OpenType 格式,同时 Debian 源中的 ttc 容器包含的字体也是 OpenType 格式。以下可以佐证:

https://packages.debian.org/sid/all/fon ... k/filelist
其中明确说明安装目录是 /usr/share/fonts/opentype/noto/

如下命令的输出
$fc-match -v 'Microsoft Yahei' | grep format
fontformat: "TrueType"(w)

$fc-match -v 'Noto Sans CJK SC' | grep format
fontformat: "CFF"(w)
CFF 是基于 OpenType 的压缩字体。我觉得所谓 otf 效果更好应该是错觉,希望你贴图证明。
源中的TTC格式需要fontconfig中重新排定优先级,否则根据字母排序jp日本汉字先出来
Google 的官方下载版文件 NotoSansCJKsc-hinted.zip 如其文件名说言,仅仅包含 Noto Sans CJK SC 和 Noto Sans Mono CJK SC 两个简体中文字体,如此才不需要调节 fontconfig 中的字体顺序;而 Debian 源中的 fonts-noto-cjk_1.004+repack2-2_all.deb 同时包含了 CJK 国际区中的简体中文,繁体中文,韩文,日文。所以,所谓下载版不需要调节字体顺序,是以无法使用繁体中文,韩文,日文字体为代价的,并不是下载版有什么魔法。

如上,下载版和仓库版并无实质不同。从 noto 开发的初衷看,应该用其覆盖所有文字,才能达成无豆腐块。所以,推荐继续用仓库中的版本,并调节 fontconfig 将 Noto Sans CJK SC 置于优先位置。
我相信这些问题楼主应该都明白,他也说了为什么用官方字体的原因,一个有hint,另一个是省去做 fontconfig 配置,字体体积也较小吧。楼主的问题重点其实应该是:Mate桌面环境下为什么 google 官方的 otf 都是 blank box,桌面上无法显示字体,而源中的ttc格式却是正常的。阁下是否知道其中缘由呢?
madjxatw
帖子: 14
注册时间: 2011-04-10 21:08
送出感谢: 0
接收感谢: 0

Re: Noto Sans CJK otf格式的问题

#10

帖子 madjxatw » 2018-04-17 16:29

我也遇到这样的问题了,你是直接从 Google 的下载的 Super OTC 格式的文件吧?解压到 /usr/share/fonts/opentype/noto/ 后,请确认下字体文件的 permission,很可能是 other 用户没有设置 read 权限,这样非 root 就无法访问这个字体文件了。`sudo chmod o+r *.ttc` 就搞定了。
回复

回到 “字体美化和中文支持”