zoukankan      html  css  js  c++  java
  • 使用注册表优化终端、编辑器的中英字体混合显示,如「Consolas + 雅黑」「Monaco + 雅黑」

    在终端、cmd、编辑器中偶尔会有中文字符出现,Windows下默认的点阵字体「宋体」和等宽英文字符放在一起非常违和。一个解决方法是下载混合字体,比如「Consolas + YAHEI hybrid」,「Source Code Pro + YAHEI hybrid」。但是这些字体组合毕竟有限,如果想用「Anonymous Pro + 幼圆」、或者更改字重、使用斜体该怎么办呢?这时便要用到注册表的FontLink功能了。

    FontLink,顾名思义,是将某个字体未包含的字符映射到另一个字体上。比如编辑器中设定默认字体是「Consolas」,如果文件中有汉字字符,Windows本来默认显示为「宋体」,但是FontLink设置了「雅黑」,便可以用「雅黑」来显示。

    以「Consolas + 雅黑」为例,下面是实现方法:

    1. 按下Win+R打开「运行」,输入regedit点击确定,开启「注册表」;
    2. 定位到如下位置;

    3. HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionFontLinkSystemLink
    4. 找到Consolas项,双击打开,在「数值数据」文本框内输入以下内容后点击确定;
    5. MSYH.TTF,205,154
      MSYH.TTF
    6. 注销或重启计算机

    用Monaco和微软雅黑字体美化cmd和PowerShell

    Windows自己有个FontLink功能,也就是说,如果某个字体有不能显示的字符,

    就用一些备用字体来替换(熟悉Java的同学,记得fontconfig.properties吧)。

    这些可以在注册表里设置。所以如果是使用Windows字体系统的程序,都可以获得这个功能。

    如果把一个等宽英文字体的备选字体设为雅黑,那么只要你选择了那个英文字体,

    如果有中文需要显示,就不会出现框框,而是用雅黑来显示了!

    请安装并选择Monaco,这是苹果出的很好看的字体。

    然后我们要修改Monaco的FontLink。首先打开regedit,找到

    HKLM/Software/Microsoft/Windows NT/CurrentVersion/FontLink/SystemLink

     你会发现有很多字体名的键,然后你就明白为什么你选择一个英文字体,但是输入中文的时候仍然可以正常显示了。

    现在我们需要自己建立一个这样的键,新建字符串键Monaco,然后照下图输入

    你可能发现,MSYH.TTF这个字体在其他的键里也有出现(例如Segoe UI),而且有两个,第一个后面带着两个数字(默认是128,96)。但是我设置成了205,154。这是什么意思呢?

    一、数字是什么?如果一个英文字体不能显示中文字体,就用它的备选字体来显示,这时用的字号都是一样的。但是中文和英文字号,如果相同的话,实际的大小是不同的,就显得很不和谐。所以要给中文字体一个scaling factor,让相应的字体变大或者变小一些,从而和相应的英文字体配套。

    二、为什么要重复一个没有数字的?其实这个FontLink是GDI和GDI+的功能,但是GDI+不能识别后面的数字(其实很多方面GDI+都比GDI弱爆了,嘿嘿)。所以要重复一次,GDI+找不到第一个字体,就用第二个了。

    三、我为什么选择一个不一样的值?随便配套两个字体,那个factor怎么选,应该是不同的吧,网上我没找到怎么选这个的资料。我首先用默认的128,96来试,发现效果就是第二张效果图,中文感觉很矮,感觉和英文不在一个水平线上。这种现象我在Emacs里面也看过。在Emacs里面,Monaco和雅黑字号比是1:1.6时,一个中文正好是两个英文的宽度,非常和谐,所以,我就把默认的值都乘以1.6,就出来205,154了。我试过几次,如果太大的话(比如都扩大两倍),就回到了一开始的状态(第二张效果图那样)。所以1.6是个最适当的选择。

    因为这是GDI的特性,相当底层,所以设置完要重启系统,然后就看见效果了!

    3. 讨论

    一开始我说,第一张效果图内含玄机,就是同样的字体,输入时是等宽的,但是cmd反馈的渲染却是不等宽的!可见cmd的字符渲染还有很多问题。有一种可能是输出采用了雅黑字体的非等宽信息,整体比输入时要窄。使用这个设定,在Notepad里雅黑的宽度要稍大于两个英文字符。

    其实我们这样设置cmd,其实是绕过了cmd本身一些缺陷的hack。但是cmd现在可以用上很好看的字体组合,所以这点“瑕疵”还是可以容忍的。毕竟雅黑是个含有高级排版信息的非等宽字体啊。如果实在需要,可以把雅黑替换成幼圆。

    这个设置还有一个比较好用的地方。例如Vim本身对字体的支持较弱,分别设置字体还要utf-8编码才行,还不支持非等宽字体。所以如果使用FontLink,直接选择Monaco作为字体,一切OK。再比如把记事本字体选为Monaco,中文自然就成了雅黑。

    那么是否都以后的字体设置都省了呢?不是。只有使用Windows本身字体渲染功能的软件可以使用这个。像Emacs这种自己动手丰衣足食的,本身对字体支持非常完善,比Windows这点小东西强大得多了去了。Java也是自己渲染字体,虽然有点Buggy(例如Swing显示雅黑粗斜体的时候,居然乱码,但是normal没事;我估计现在还是这样)。

  • 相关阅读:
    黑客悬赏活动第二期 | 百万ELF赏金,aelf跨链转账标准协议CCTP等你挑战!
    2020年aelf首场全民公测,有奖狂欢四重好礼大放送!
    使用aelf最新稳定测试币AEUSD试玩BingoGame Demo,赢取体验奖金!
    开发者大赛 | aelf轻型DApp开发训练大赛结果公布!
    黑客赏金第一期 | aelf跨链转账标准协议准备就绪,88888ELF赏金等你挑战!
    Twitter AMA预告 | aelf 创始人马昊伯将以【aelf治理与发展】为主题进行在线答疑!
    aelf Enterprise 1.0.0 Preview 2 版正式发布!
    aelf技术点解读 | 分红合约接口实现方案
    深入浅出索引--Mysql45讲笔记记录 打卡day3
    一条SQL语句是如何执行的?--Mysql45讲笔记记录 打卡day1
  • 原文地址:https://www.cnblogs.com/shangdawei/p/4399081.html
Copyright © 2011-2022 走看看