使用注冊表優化終端、編輯器的中英字體混合顯示,如「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_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink

     

  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沒事;我估計現在還是這樣)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM