疑似文泉驿字体 BUG

官方源文泉驿正黑字体,包括其等宽变种,在粗体渲染时会出现部分笔画不合理地变细。如下图的 “管” 与 “节” 字:
Screenshot_20201018_182516 Screenshot_20201018_182532
这个 Bug 在 Leap 15.2 与 Tumbleweed 20201012 上均可出现。并且从文泉驿官网下载的文泉驿正黑(0.9.45)字体没有此 Bug,如下图:
Screenshot_20201018_183841

我怀疑是打包的用的快照有问题,Call 一下打包者:@marguerite

@BearChild

我的 snapshot 是最早从文泉驿的论坛下载的,现在 FangQ 把论坛关了,我没有办法更新

而文泉驿的源代码是不公开的,除非我们拿 Fontforge 自己解包不然是没有源代码可以去修复的…

PS:我感觉现存最新的版本就是我保留的这个 snapshot 了,可以用 fontforge 解成 ufo 传 github,然后用 google fonts 开源的那些工具去搞成 CFF2 fonts 也就是 otf 格式,可能这是让文泉驿 long live 的唯一办法了。就是学习成本太高了…要看完 fontforge 教程…单就你这个 bug 应该好办,我感觉是 hinting 的问题(可能文泉驿是用 fontforge autohint 的),可以用 http://home.kabelfoon.nl/~slam/fonts/ 来看 hint instructions,把对应的粗体字的 hinting 数值改掉就好了…至于怎么改,可以打开 0.9.45 版本,甚至也可以去 Droid Sans Fallback 上扒

一个一个字修改是不可能的,我会秃的,这个字体带草字头的不少都这样,我估计竹字头也差不多。可不可以退回 Release 版,或者 0.9.46 的快照。毕竟能正常使用的版本才是好版本。
并且每夜构建版依然可以下载:参见此处,虽然与 SUSE 版一样存在此 BUG。

下面是 0.9.45、0.9.46 快照、0.9.47SUSE 版本的对比:
0.9.45
0.9.46-sp
0.9.47-suse

话说苏姐的名字不就有草字头吗?这个 Bug 是怎么从 2011 年活到今天的。:rofl: @marguerite

一直用 noto sans CJK SC

Noto sans SC 会奇怪的把一些界面给撑大,比如应用菜单之类的,大概 Adobe 的人都用的是超级大屏,不在乎这个。

@mkm19930608

我把那个下载链接认成了广告…

我怀疑你是 hinting 的问题…

fc-match -f “%{hintstyle}\n” “WenQuanYiZenHei”

结果是什么?

:sweat_smile:

终端输出原文:

bc@BC-LAPTOP ~> fc-match -f “%{hintstyle}\n” “WenQuanYiZenHei”
“1
”⏎          

但就算在 KDE 的系统设置里把字体微调关掉,问题也依然存在。

那就得等我明天有时间拿 fontforge 搞一下看看了 :joy:

我的电脑上面,韭菜还会显示成非菜。不知道你们的会不会。

@BearChild

通过 fontforge 打开后发现问题:

这是正常的 “艹”:

这是有问题的艹字头:

看到最左边的那个 buggy 的线没有,艹字头没有成型…所以渲染出问题了。

不过知道问题并不一定知道怎么修…

感谢您的工作。鉴于文泉驿没有源码,而这个 BUG 影响字符数量众多,并且 0.9.46-May 到 0.9.47-snapshot 并不是一个有着重要修改的更新,退回 0.9.46 似乎是可行的一个折中方案。

我肯定是要使用 google 的 fontmake 从零编译文泉驿的,因为只有这样才能让它长存而不是死掉…我已经把 .ttc 拆分成 .ttf 转成 .ufo3 格式丢到 GitHub 上去了,仓库在:GitHub - marguerite/wenq: WenQuanYi Fonts in ufo3 format

我检查 ufo3 格式发现它其实就是 .xml。然后我就去 glyphs 文件夹下找到一个有问题的字,比如艺术的 “艺” 字是 uni827A_.glif。打开格式是这样的(不是一个完整的字,有删节):

<?xml version="1.0" encoding="UTF-8"?>
<glyph name="uni827A" format="2">
  <advance width="1024" height="1024"/>
  <unicode hex="827A"/>
  <outline>
    <contour>
      <point x="215" y="403" type="line" smooth="yes"/>
      <point x="151" y="403"/>
    </contour>
    <contour>
      <point x="135" y="719" type="line" smooth="yes"/>
      <point x="18" y="722" type="qcurve"/>
      <point x="20" y="688" type="qcurve" smooth="yes"/>
    </contour>
  </outline>
</glyph>

这里很好猜,outline 是一整个字,contour 是左右或者上下这种分开的结构。里面带 (x,y) 的 point 就是画字形的锚点。

对应打开 fontforge 的界面(看我前面的图),是有 (x, y) 坐标系的,那么解决方法就是:

找到出问题的点,删掉它。

经过排查(就是在 fontforge 图形界面看个大概,然后打开 .glif 文件去找大概点,之后删掉这个点,再图形界面打开看效果),问题在这里:

      <point x="4" y="95"/>
</contour>

出问题的艹字头字基本在第二个 contour 的最后一个 point,都是 x = 4 且 y 不等的。

那么我们可以通过 programming 来解决啦,稍等我写个程序跑一下看看。

文泉驿不是开源的么?

开源的但你能改吗?

我也不懂啊。。。你说的文泉驿源码不公开,我就有点懵了

当然不公开了…在 wenq 自己的服务器上谁也没见过

我写了个程序跑了一遍,应该是这些字显示不对:

你看看跟你的情况是不是一样 @BearChild

文本:

艺艻艼艽艾艿芀芁节芃芄芅芆芇芉芊芋芌芍芎
芏芐芑芒芓芕芖芗芘芙芚芛芜芝芞芟芠芡芢芣
芤芥芦芧芨芩芪芫芭芮芯芰芲芳芴芵芶芷芸芹
芺芼芽芾芿苀苁苂苃苄苅苆苇苈苉苊苋苌苍苎
苏苐苑苒苔苕苖苗苘苙苚苜苝苞苟苠苡苢苣苤
苦苧苨苩苪苫苬苭苮苯苰苲苳苴苵苶苷苸苹苺
苻苼苽苾苿茀茁范茄茅茇茈茉茊茋茌茍茎茏茐
茑茒茓茔茕茖茘茙茚茛茜茝茞茟茠茡茢茣茤茥
茦茧茨茩茪茫茬茭茮茯茰茱茲茳茴茵茶茷茸茹
茺茼茽茾茿荀荁荂荃荄荅荇荈荊荋荌荍荎荏荐
荑荒荓荔荕荖荗荘荙荚荛荜荝荞荟荠荡荢荣荤
荥荦荧荨荩荪荫荬荭荮药荰荱荲荳荴荵荶荷荸
荹荺荻荼荽荾荿莀莁莂莃莄莅莆莇莈莉莊莋莌
莍莎莏莐莑莒莓莔莕莖莗莘莙莚莛莜莝莞莟莠
莡莢莣莤莥莦莧莨莩莪莬莭莮莯莰莱莲莳莴莵
莶获莸莹莺莻莼莽莾莿菀菂菃菄菅菆菇菈菉菊
菋菌菍菎菏菑菒菓菔菕菖菗菘菙菚菛菝菞菟菠
菡菢菣菤菥菦菧菨菩菪菫菬菭菮菰菲菳菴菵菶
菷菸菹菺菻菼菽菾菿萀萁萂萃萅萆萇萈萉萊萋
萌萍萎萏

是的,这些字符都有问题。然后 @benren 提到的 “韭菜还会显示成非菜” 的问题也是存在的,我这里成功复现这个 BUG,能不能请您也一并看一下?

好的,我先写程序把上一个修复了。然后做一个测试版本给你用看解决没有。然后再看别的。真正推送修复需要我把 google 的 fontmake 编译链在 openSUSE 上建立起来。