使用注册表优化终端、编辑器的中英字体混合显示,如「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#程序.手动修改.安装项目等不同方式对注册表进行修改.其中通过安装项目对 ...
随机推荐
- ArcMap2SLD添加中文支持
首先,你可以从作者提供的链接下载ArcMap2SLD.zip(支持ArcMap10.2) 1.打开LUT_sld_mapping_file.xml文件(上传文件中已经修改)修改文件<LUT> ...
- XP远程连接Win10,提示【远程计算机需要网络级别身份验证,而您的计算机不支持该验证】
最近电脑安装了Win10系统,在办公室可以通过其他电脑远程,但是回去后使用自己的电脑(XP系统)进行远程提示失败, 提示[远程计算机需要网络级别身份验证,而您的计算机不支持该验证],然后上网查找资料, ...
- vue项目下使用iview总结
iview在IE浏览器下有问题,打开页面是空白
- Hexo命令无法找到 -问题修复
本人PC安装hexo按照官方npm方式下载: npm install -g hexo-cli 但是到了控制台,输入hexo总是无法找到该命令,提示:Command not Found!!!,无论git ...
- (三)使用XML配置SQL映射器
SqlSessionFactoryUtil.java package com.javaxk.util; import java.io.IOException; import java.io.Input ...
- jre安装配置!
通常安装java开发环境都是jdk ,jre 一起安装,配置变量!分享一下只安装jre的配置! 去官网下载jre, 按提示安装成功! 和jdk配置一样 ,首先配置一下:JRE_HOME=C:\Prog ...
- java遍历ftp文件夹下所有文件(或指定文件下的文件)
import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import org.apach ...
- svn错误 svnserve.conf:12: Option expected解决办法
经常有新手配置基于svnserve的subversion服务器后,在客户端访问subversion版本库时出现这个错误:svnserve.conf:12: Option expected为什么会出现这 ...
- 【POJ】1286.Necklace of Beads
题解 群论,我们只要找出所有的置换群的所有循环节 具体可参照算法艺术与信息学竞赛 旋转的置换有n个,每一个的循环节个数是gcd(N,i),i的范围是0到N - 1 翻转,对于奇数来说固定一个点,然后剩 ...
- Deepin Linux安装MySQL方法
sudo apt-get install mysql-server apt-get install mysql-client sudo apt-get install libmysqlclient-d ...