Megatops ProCoder设计的目的是发展一款能够支持粗体混显,并且宽度精准为高度的1/2以便配合Windows系统内置的点阵中文字体显示的等宽英文字体。其包括8×16点阵(对应宋体12pt)和7×14点阵(对应宋体11pt)两种字号,并且每种字号各有宽度一致的粗体版本。原则上本字体不会发展其他更大或者更小的字号。因为中文宋体的点阵显示范围最大只能到16点阵,所以再大的字号没有相应的中文点阵字库的支持也没有了意义。而6×12点阵的字号因为字体过小在当前主流的中高分辨率显示器上难以长时间阅读,并且因为点阵太少的缘故根本无法很好地支持同宽度的粗体显示,因此被放弃支持。
这套字体在和中文混显的效果以及对类C语言的显示效果上做了考虑和优化,并在字符区分度上做了很多努力。如常见的易混字符0Oo、1lI等都进行了不同程度的区分。这样即使使用不能进行语法高亮的编辑器也能将混淆字符的可能性降至最低。另外本字体的逗点、分号等符号较粗,显示C/C++代码的时候能更容易地分辨这些关键符号。
字体风格基本属于Sans Serif,笔画设计上力求能够满足长时间阅读的需要。可以说,这套字体设计上的最大特色就是每个字符都没有特色,每个字符都尽量设计得看上去令人感觉熟悉平常而不会有什么突兀的感觉。通常平凡的字型最易于为不同人所接受,也最适合长时间观看。为了达到这个目标,在整个制作过程中针对每个字符都进行过耐心地调整以达到整体风格协调统一的效果。
Megatops ProCoder最初于2007年7月初开始动手制作,最初完成的是7×14字号并仅能支持0x20-0x7F范围的字符显示。其后在使用中慢慢改进,到了7月底又完成了8×16字号,整套字体开始有了雏形。此时我也将所用编辑器的字体转为这个新完成的字体,开始了不断的微调过程。
同年8月底,我利用了一个周末时间补充完成了0x0-0xFF整个范围的字符绘制,可以支持法文和德文等西欧字符的显示。此时单个字符的设计和绘制工作基本结束。
一直到2008年1月中旬,经过了长达半年的使用和调整以后,Megatops ProCoder Font的第一个版本才正式发布。
至今,Megatops ProCoder还在微调当中,正式发布后的更新记录为:
2008-1-16
7×14:“Vv”增加和“Uu”的区分度,6、9、@、j修正,正常体Q、&修正
8×16:粗体“Vv”增加和“Uu”的区分度,J、6、9、$、@修正,粗体“?”加宽1px
2008-1-30
德语元音改成2px长点,增加区分度
德语“ß”字形修正
2008-3-1
2008-8-3
Full版新增7×13字号用于特殊场合显示,但中文混显效果不好
Megatops ProCoder Font是一套Windows fon格式的光栅点阵字体(Raster Font)。适用于绝大部分Windows下的编辑器,包括UltraEdit、EditPlus、EmEditor、Notepad++、 SlickEdit、SourceInsight、Eclipse等等。可以说能使用Fixedsys字体的编辑器就能够使用这套字体。然而对于不支持点阵字体的软件(如MS Word、jEdit)则无法使用。因为本字体是特别针对SlickEdit编辑器进行调试的,所以能够保证对这款编辑器的最佳支持。
Megatops ProCoder Font有两个支持字符范围不同的版本,两个版本的字型是一样的:
Full Edition(支持0x0-0xFF全范围)
GB2312 Edition(请导入附件中注册表,重启后方可完美显示中文)
两者最主要的区别是GB2312 Edition适用于使用GB2312/18030内码的中文用户使用,因为其没有0x7F以上部分不会与双字节编码产生冲突。但是也因为字符不全的缘故无法完全发挥本字体特有的非可见字符显示为HEX编码的特色功能。如果你是Fixedsys/Terminal的粉丝,特别喜欢黑压压的字体观感。GB2312版本内还有一个特别定制的粗黑版可选。这样即使在终端程序里也能找到熟悉的感觉。
Full Edition则因为和双字节编码重叠的关系,有部分符号(如全角引号等)在UltraEdit或EditPlus等无法正确处理字符宽度的编辑器上显示为半角符号的宽度(但在SlickEdit中则无此问题能够正确显示)。然而这个版本才能显示德文或法文,以及非可见字符的HEX编码。
以上两个版本能够共存于系统中,如果你也是使用 SlickEdit的话直接选用Full版本即可。如果使用其他编辑器的话一般的建议是普通正文字体使用GB2312版本;HEX编辑器字体或者德法文字体选用Full版本。在日常更新时,我主要保证Full Edition的及时更新,因为GB2312版本是由Full版本裁剪得来的缘故,所以GB2312版本通常只有在Full版本更新较为稳定后才会裁剪更新一次。
★ SourceInsight编辑器的设置
我本人从来不使用功能简陋的SourceInsight作为编辑器和源码查看器。但是在不断被死守在这套N年不长进的落后产品的用户的骚扰下,不得不特别说明一下在SI中正确的配置方式:
请特别注意将注释字体也使用Megatops ProCoder,这样中文注释的字间距将有很好的改善。
Megatops ProCoder Font的使用限制很少,任何个人或团体都可以免费使用它来作为显示字体用于日常文本编辑或者代码编辑。但是有以下要求必须满足:
不能修改字体的名称和作者以及版权信息
不允许用于印刷等目的
在设计制作这套字体的时候,其工作量和难度都是超出我原先的估计。如果你也打算设计一套自己的编程字体的话,不妨看一看我的体会。
工作量
点阵字体中制作一个字号的工作量是相当大的,尤其是在我决定实现完整的ASCII字符支持(0x0-0xFF)以后,工作量变得较为可观:每个字号由粗体和正常体共计512个字符构成。因此这套字体的两个字号我手工逐个绘制了整整1024个字符,共计57,856个像素点。在绘制的时候尤其是绘制同一个字符的不同字号、不同粗细的时候感觉是相当的枯燥。所以我感觉我不太可能再有时间和精力为这套字体添加更多的字号支持了。
小字号的设计
设计这套字体的时候,最难的部分在于7×14字号的粗体。这个字号如果扣除1个像素的字间距的话能够绘制的像素面积仅有6×14。在绘制诸如M、m、W、w这类横向笔画较多的字符时实在是很大的设计挑战,我只能尽量让这些字符的粗体在整体显示的时候看上去不至于太怪——但是单个字符的外形我至今还不够满意。不过能做到让这些字母隐藏在代码中不显得太扎眼已经是我努力调整多次的结果了。
除了笔画太多的字符不好处理以外,字符风格的保持也是一个很大的挑战。因为对于一套字体来说,单个字符的美观并不是全部,所有字符的风格一致才是最重要的。在7×14这个字号的风格一致性上我这个业余字体制作者实在是绞尽脑汁了,令人欣慰的是目前每个字符的风格还是基本一致了,至少在显示的时候感觉还是一套字体显示出来的样子 :)
字体微调
设计和绘制1024个字符57,856个像素点实际上只耗费我 30小时左右的时间,但是调整这些字符则耗费了多得多的时间和精力。当你把精心绘制好的单个字符凑在一块显示时,通常发现这些原本很好的个体排列在一起后却并不整齐好看。这时你就得耗费极大的耐心进行细致的微调工作。
调整的内容刚开始主要是风格上的调整,先是要将其中看起来扎眼的字符的个性去掉,调整成和其他字符风格统一的观感。通常仅仅是改动一两个像素就能彻底改变字符的风格,这需要不断的对比和尝试才能完成。
另外一个需要耗时调整的是字符的高度:对于代码显示来说,较小的字符高度能够留出较大的行间距,便于让代码显示得结构清晰;但是太小的字符高度又会让字符看起来似乎小了一个字号,在阅读舒适性上面打了折扣。因此决定字符高度实在是一个艰难的折衷取舍的问题,并且修改量非常大——我的8×16号字体曾经因为决定要减少一个像素的高度,导致我除了要削去512个字符高出的部分以外还要重新设计大约30个左右的字符。
最后需要调整的是较窄字体的横向位置。比如“i”、“l”、“1”这些窄字符,绘制的时候是偏左一像素还是偏右一像素对最终的视觉效果都有很大影响。仅仅是把所有字符调整到显示时看上去字间距较为均匀就花了我不少时间。
总之,制作一套字体几乎90%的时间会耗费在调整上。这也实在是个痛苦漫长但是又充满乐趣的过程:好字体总是在不断尝试和耐心打磨中磨练出来的。
针对程序代码优化
经过前面的微调以后,通常是数字和字母能调整得比较美观。但是因为代码显示的特殊性,对于符号的组合还需要进行一番考虑和调整。比如C/C++语言常常使用“->”、“::”这样的组合符号,让这些符号凑在一块显示得也好看也成了一个重要问题。另外在绘制ASCII框图的时候,常用的组成线条的符号比如“+”和“-”的笔画位置也要进行调整,才能让它们组合显示出来的框图线条不至于太零散……总之,这些要考虑的细节实在是很多,可能要比你之前想像的要多得多。
好的编辑器和好的字体是程序员最重要的工具之一。我希望有人看到这套字体以后能觉得:“这就是我需要的字体!”,并把这个字体和他最爱的代码编辑器一块收藏在个人工具箱中。
(c)2007-2009 丁兆杰 版权所有,最后更新于2009年8月3日星期一