F9y4ng / GreasyFork-Scripts

The open source code of this project is used for userscripts (油猴脚本) for desktop browsers, including Font Rendering (Customized) (字体渲染(自用脚本)- Font Rendering.user.js), and Search Engine Assistant (优雅的搜索引擎助手 - Google & Baidu Switcher.user.js), etc.
https://f9y4ng.github.io/GreasyFork-Scripts/
GNU General Public License v3.0
950 stars 46 forks source link

[发现错误]中文引号覆盖问题 #226

Closed Rortenfeat closed 1 year ago

Rortenfeat commented 1 year ago

1. 准备工作(确认预先完成的操作)

2. 描述错误信息(清楚而简洁地描述错误)

  1. 引号字体不可控,小字号下的字体 Hinting 看起来很不和谐
  2. 英文中的引号也都被换成中文引号了

3. 错误再现(重现行为步骤,直至复现您遇到的问题)

4. 屏幕截图(如有屏幕截图,请添加以帮助解释您的问题)

imageimage 设置的字体:Segoe UI,苹方

5. 预期结果(清晰明了地描述您所期待想要什么样的结果)

这两天才注意到的,貌似是新功能?希望可以选择关闭。

6. 客户端信息(请在冒号后认真填写您的本地信息)

7. 脚本运行环境排查 (请确认环境条件并填写相关信息)

8. 附加信息(在此处添加您认为有用的其他信息)

F9y4ng commented 1 year ago

这是“中文双引号”,及‘单引号’的测试。

It's a test for "English quotes".

It's a test using “Chinese quotes(‘中文引号’)” in English.

我给出了三组引号的使用示例,分别是:

  1. 全角中文引号;
  2. 半角英文引号;
  3. 在英文语句中使用全角中文引号的示例;

你应该能明白为什么会出现你遇到的问题了吧?

由于字体热替换的原因,部分常用的英文字体也会被替换为你选中的中文字体,所以在应用第三方字体时会出现英文标点也使用了中文字体。这个问题我会在下个月更新中尝试解决。

Rortenfeat commented 1 year ago

谢谢回复。

关于您引号方面的解释,我是了解的。但是这部分牵扯到的问题可能更为复杂。

  1. 「“”/‘’」和「"/'」的区别并不是全角和半角的区别,在 Unicode 编码上它们都本意用于半角符号。
  2. 准确地讲,前者叫「弯引号」,后者叫「直引号」。其中「弯引号」既用于中文排版,也用于英文排版。而「直引号」是英文打字机时代的产物,为了简便引号的输入(所以又被称为「傻瓜引号」),正式排版中不应出现。
  3. 所以英文引号和中文引号是共用同一个码位的,视觉上全角和半角的分别完全取决于字体偏向哪一种。

参考 https://www.zhihu.com/question/31424658 https://www.zhihu.com/question/23008549

所以中英文引号的问题不仅是输入的问题,还是字体和编码的问题。我的想法是脚本不一定要参与到这场「混战」中去,如果没办法完美解决的话,还是提供一个选择为好。

另外关于问题1,前端方面我真的不懂,但是只要开启脚本,不管设置的字体是什么,弯引号都会被渲染为宋体。这应该不是您说的热替换的问题吧?所以这是预期状况吗?

感谢您对开源社区的奉献。

F9y4ng commented 1 year ago

你遇到的问题是出在字体的全局热替换上,这并不是预期的效果。因为热替换使得网页默认的英文字体也被替换为中文字体中定义的英文部分,这时中文引号的效果就出现了。我录制了一段动画(看大图),动画中你可以看出热替换字体的中文引号和你提到的英文「弯引号」的区别,而中间的英文字体的半角引号是没有变化的。

_2023_06_13_20_10_43_304

我会尝试看是否能修正或找到hack方法,如果不能实现,我会在下个更新中去掉中文引号的这个功能。

Rortenfeat commented 1 year ago

感谢解惑🙏

F9y4ng commented 1 year ago

更新至v2023.06.17.1