使用注册表优化终端、编辑器的中英字体混合显示,如「Consolas + 雅黑」「Monaco + 雅黑」
在终端、cmd、编辑器中偶尔会有中文字符出现,Windows下默认的点阵字体「宋体」和等宽英文字符放在一起非常违和。一个解决方法是下载混合字体,比如「Consolas + YAHEI hybrid」,「Source Code Pro + YAHEI hybrid」。但是这些字体组合毕竟有限,如果想用「Anonymous Pro + 幼圆」、或者更改字重、使用斜体该怎么办呢?这时便要用到注册表的FontLink功能了。
FontLink,顾名思义,是将某个字体未包含的字符映射到另一个字体上。比如编辑器中设定默认字体是「Consolas」,如果文件中有汉字字符,Windows本来默认显示为「宋体」,但是FontLink设置了「雅黑」,便可以用「雅黑」来显示。
以「Consolas + 雅黑」为例,下面是实现方法:
- 按下
Win+R打开「运行」,输入regedit点击确定,开启「注册表」; 定位到如下位置;
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink
- 找到
Consolas项,双击打开,在「数值数据」文本框内输入以下内容后点击确定; MSYH.TTF,,
MSYH.TTF- 注销或重启计算机
用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没事;我估计现在还是这样)。
使用注册表优化终端、编辑器的中英字体混合显示,如「Consolas + 雅黑」「Monaco + 雅黑」的更多相关文章
- 【转】Win7注册表的使用(更新中)
一.注册表的存储结构和数据类型 1.基本概念: Windows 7的注册表主要由“键”和“键值”构成,称HKEY为根键(RootKey),SubKey为子键. 键(Key):“位于左侧窗格如同文件夹图 ...
- IE8中li添加float属性,中英数字混合BUG
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Ruby Rails学习中:注册表单,注册失败,注册成功
接上篇 一. 注册表单 用户资料页面已经可以访问了, 但内容还不完整.下面我们要为网站创建一个注册表单. 1.使用 form_for 注册页面的核心是一个表单, 用于提交注册相关的信息(名字.电子邮件 ...
- Windows注册表的基本知识及应用
转帖:Windows注册表的基本知识及应用 2009-12-23 11:30:56 分类: Windows注册表的基本知识及应用 一.注册表的重要性 在DOS年代,对计算机的内存管理及系统配置主要通 ...
- 10#Windows注册表的那些事儿
引言 用了多年的Windows系统,其实并没有对Windows系统进行过深入的了解,也正是由于Windows系统不用深入了解就可以简单上手所以才有这么多人去使用.笔者是做软件开发的,使用的基本都是Wi ...
- [转帖]Windows注册表内容详解
Windows注册表内容详解 来源:http://blog.sina.com.cn/s/blog_4d41e2690100q33v.html 对 windows注册表一知半解 不是很清晰 这里学习一下 ...
- Windows注册表内容详解
Windows注册表内容详解 http://blog.sina.com.cn/s/blog_4d41e2690100q33v.html (2011-04-05 10:46:17) 第一课 注册表 ...
- Windows注册表内容详解(转载)
(关于windows注册表的整理,来源网络) 前提 一.什么是注册表 注册表是windows操作系统.硬件设备以及客户应用程序得以正常运行和保存设置的核心"数据库",也可以说是 ...
- C#综合揭秘——通过修改注册表建立Windows自定义协议
引言 本文主要介绍注册表的概念与其相关根项的功能,以及浏览器如何通过连接调用自定义协议并与客户端进行数据通信.文中讲及如何通过C#程序.手动修改.安装项目等不同方式对注册表进行修改.其中通过安装项目对 ...
随机推荐
- 监听 手机back键和顶部的回退
// 回退事件,监听 手机back键和顶部的回退 pushHistory(); window.addEventListener("popstate", function(e) { ...
- java基础36 双例集合Map下的HashMap和TreeMap集合
单例集合体系: ---------| collection 单例集合的根接口--------------| List 如果实现了list接口的集合类,具备的特点:有序,可重复 注:集合 ...
- 从源码层次分析asterisk如何产生呼叫
老规矩,看别人是怎么搞的 http://blog.chinaunix.net/uid-14723273-id-1739552.html over...
- [java笔记]父类设计法则
1.父类通常情况下都设计为抽象类或接口,其中优先考虑接口,如接口不能满足才考虑抽象类. 2.一个具体的类尽可能不去继承另一个具体类,这样的好处是无需检查对象是否为父类的对象.
- java解析Xml格式的字符串
最近在工作中,需要调别的接口,接口返回的是一个字符串,而且内容是xml格式的,结果在解析json的时候报错,最终修改了接口的返回方式,以Map返回, 才得以接收到这个xml的字符串,然后通过dom4j ...
- Java第三阶段学习(三、字符流、转换流)
一.字节流读取中文时出现的问题: 文件中有中文时,用字节流读取会出现乱码的问题,因为一个中文为两个字节. 二.字符编码表 编码表:其实就是生活中字符和计算机二进制的对应关系表. 1.ascii: 一个 ...
- 百度Webuploader 大文件分片上传(.net接收)
前阵子要做个大文件上传的功能,找来找去发现Webuploader还不错,关于她的介绍我就不再赘述. 动手前,在园子里找到了一篇不错的分片上传的帖子,参考之后,踏出了第一步.此文记录我这次实践的点滴,仅 ...
- LoadRunner中的随机数
LoadRunner中的随机数 Action() { int i; ]; srand(time(NULL)); i=rand()%; lr_save_datetime("%m%d%H%M%S ...
- MapReduce的原理及执行过程
MapReduce简介 MapReduce是一种分布式计算模型,是Google提出的,主要用于搜索领域,解决海量数据的计算问题. MR有两个阶段组成:Map和Reduce,用户只需实现map()和re ...
- mac 用密钥远程登陆
window远程登陆命令:mstsc A为本地主机(即用于控制其他主机的机器) ;B为远程主机(即被控制的机器Server), 假如ip为192.168.60.110;A和B的系统都是Linux 在A ...