Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

合并后汉字宽度异常 #7

Open
Zxis233 opened this issue Aug 18, 2022 · 7 comments
Open

合并后汉字宽度异常 #7

Zxis233 opened this issue Aug 18, 2022 · 7 comments

Comments

@Zxis233
Copy link

Zxis233 commented Aug 18, 2022

如图,合并了两种等宽字体,但是预览中中文宽度异常
image

这是正常状态下的
image

请问有什么好的解决方法吗

@BennLiu
Copy link

BennLiu commented Sep 18, 2022

一样的问题。。。

@MaxHasBeenUsed
Copy link

同合并了 JetBrains Mono 和一个中文字体,同样预览出来是这样。

但是你们难道都没有看过 JetBrains Mono 字体自己的预览吗?那里面就是这样的。没猜错的话正式使用起来应该没有问题吧,汉字间距正常?

@Zxis233
Copy link
Author

Zxis233 commented Jan 1, 2023

是的,在部分软件里显示正常,但是也有一部分会显示为加宽的中文(如Notepad++)

@quartzeast
Copy link

一样的问题,在大多数软件里都显示加宽的中文

@cesaryuan

This comment was marked as resolved.

@cesaryuan
Copy link

cesaryuan commented Oct 7, 2023

Description:
大概找到了问题所在(See ryanoasis/nerd-fonts#522),这是由于GDI的bug导致的,对于OS/2.PANOSE.Proportion被设置为monospaced的字体,GDI会忽略CJK的字形宽度而强制使用OS/2.xAvgCharWidth值的两倍作为CJK字符的宽度

Solution:
根据原因分析,可以得到以下两种解决方案,经测试可用:

  • 将合并后字体的OS/2.PANOSE.Proportion属性设置为0 (Any)
  • 修改合并后字体的OS/2.xAvgCharWidth为原中文字体的OS/2.xAvgCharWidth
    假设用于合并的字体为JetBrains Mono + Sarasa Fixed SC,已知Sarasa Fixed SC的OS/2.xAvgCharWidth为500,因此修改合并后字体的OS/2.xAvgCharWidth为500即可

Sceenshots:

image

Relate Links:
ryanoasis/nerd-fonts#522
adobe-fonts/source-han-sans#154 (comment)
https://typedrawers.com/discussion/comment/15397/#Comment_15397
fontforge/fontforge#4899 (comment)
ryanoasis/nerd-fonts#1167
fontforge/fontforge#1410 (comment)

Tools:

这里提供一个Python脚本

from fontTools.ttLib import TTFont

font = TTFont('E:\\Portable\\07-Other\\字体合并补全工具-简体中文标准字库-1.0.0-win64\\out.ttf')

font['OS/2'].xAvgCharWidth = 500
# font['OS/2'].panose.bProportion = 0

font.save('E:\\Portable\\07-Other\\字体合并补全工具-简体中文标准字库-1.0.0-win64\\out_xAvgCharWidth.ttf')

@AoThen
Copy link

AoThen commented Mar 14, 2024

Description: 大概找到了问题所在(See ryanoasis/nerd-fonts#522),这是由于GDI的bug导致的,对于OS/2.PANOSE.Proportion被设置为monospaced的字体,GDI会忽略CJK的字形宽度而强制使用OS/2.xAvgCharWidth值的两倍作为CJK字符的宽度

Solution: 根据原因分析,可以得到以下两种解决方案,经测试可用:

  • 将合并后字体的OS/2.PANOSE.Proportion属性设置为0 (Any)
  • 修改合并后字体的OS/2.xAvgCharWidth为原中文字体的OS/2.xAvgCharWidth
    假设用于合并的字体为JetBrains Mono + Sarasa Fixed SC,已知Sarasa Fixed SC的OS/2.xAvgCharWidth为500,因此修改合并后字体的OS/2.xAvgCharWidth为500即可

Sceenshots:

image

Relate Links: ryanoasis/nerd-fonts#522 adobe-fonts/source-han-sans#154 (comment) https://typedrawers.com/discussion/comment/15397/#Comment_15397 fontforge/fontforge#4899 (comment) ryanoasis/nerd-fonts#1167 fontforge/fontforge#1410 (comment)

Tools:

这里提供一个Python脚本

from fontTools.ttLib import TTFont

font = TTFont('E:\\Portable\\07-Other\\字体合并补全工具-简体中文标准字库-1.0.0-win64\\out.ttf')

font['OS/2'].xAvgCharWidth = 500
# font['OS/2'].panose.bProportion = 0

font.save('E:\\Portable\\07-Other\\字体合并补全工具-简体中文标准字库-1.0.0-win64\\out_xAvgCharWidth.ttf')

赞👍

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants