FixCJK! 是为 Gecko/Webkit/Blink 内核浏览器编写的用户脚本,适用平台包括但不限于:Firefox/Icecat/Chrome/Chromium/Opera,以及各种采用 Webkit/Blink 内核的“国产”浏览器。主要功能为:
强力后备(fallback)字体设置。忽略浏览器和系统设定,直接设定映射为“无衬线(sans-serif)”和“有衬线(serif)”的实际字体列表。对于没有指定具体字体或者非中文操作系统环境中的网页有奇效。
替换中易宋体为矢量字体。除此之外,本脚本并不替换网页指定的第一顺位的字体。
将中英文混排中错误使用了中易宋体的英文部分设置为使用单独的拉丁字体。默认是 Ubuntu Mono(其字符宽度正好是中易宋体的一半并自带良好的 hinting 信息)。
对于矢量粗体,将使用字体文件提供的真粗体而不是合成伪粗体(最初目的是绕过 Linux 版 Chrome/Chromium 的这个 bug)。
设定中文全角标点字体。对于弯引号,根据上下文自动识别并设定为全角字体。
中文全角标点压缩。弥补中文字体标点不自带 kerning 信息的普遍设计缺陷,使中文网页排版更符合印刷惯例并贴近国家标准。
自动空格:中英文之间自动加空格,类似于这个扩展。考虑到大多数人的习惯,自动加空格仅在“双击”之后触发。
其中功能 1-4 及 7 对所有浏览器的所有版本均有效;功能 5-6 只保证在最新 Gecko 和 Webkit/Blink 内核上正常工作。
---------------------------------------------------
这个帖子是为了解决
Issues #99 设立的测试贴,请路过的不要见怪。
但到了引号就出问题了。“全角”的引号并没有一个专门的位点,它和英文引号的编码,无论是 GB2312 还是 Unicode 的各种实现,都是完全一样的。所谓的“全角引号”和“半角引号”的区别,完全就是字体的不同。也就是说,如果要同时显示中英文两种引号,至少要使用两种字体。一种字体中引号是全角的,另外一种字体中引号是半角的。微软雅黑中的引号是半角的,所以如果要在中文文章中显示出“全角”引号,单用微软雅黑是不行的,必须要配合其他字体,比如思源黑体或者华文黑体。
另外,纯全角符号留白太多,也不好看,尤其是出现多个连续符号的情况下。比如下面这段话:
她轻轻地哼起了《摇篮曲》:“月儿明,风儿静,树叶儿遮窗棂啊……”
以及
顿号(、Chinese back-sloping comma),是表示并列词语之间的停顿的符号。“句子内部并列词语之间的停顿,用顿号 [1]。”“用在平列连用的单字、词语之间,或标示条列次序的文字之后 [2] 。”
都出现了连续三个标点的情况。在正规排版时这都需要“标点压缩”来减小标点之间的空白。Word 也默认启用了压缩标点空白的功能。实际上即使单个全角句号,所占空白也过大,也应该进行压缩。当然浏览器默认的排版引擎是不管这么多的,只能靠用户脚本,比如 FixCJK! 来解决。当然它能解决的问题不只这些,具体可以参看开发主页。
但是一般网页如果指定了字体fallback列表,由于一般英文字体在前,雅黑的全宽引号就被英文半宽引号替代了。除非网页只指定语言(lang属性)和sans, serif之类的虚拟字体,然后真实字体在浏览器中指定为雅黑,那么对于显式指定为中文的部分其引号是用全宽的雅黑显示的。
是不是只用Stylish就能达到目的了?
如果可以的话我就做一个,因为我正好有这个需求又不敢用这个脚本。
但是那种特别的元素还是比较少啦,绝大部分情况应该可以用 Stylish 搞定。
可以对一些特定的class禁用脚本。但是这也只是 case by case 的处理办法。对所有<a>标签都禁用就似乎过分误杀了……
可能需要一个自定义规则列表,以域名(或者正则/通配符匹配url)和选择器为条件,放过一些元素不处理。
没看过你脚本的代码,上面建议仅供参考。