LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 4671|回复: 15

动手改造你的monospace字体

[复制链接]
发表于 2008-12-17 19:14:18 | 显示全部楼层 |阅读模式
monospace字体,即所谓的固定宽度(fixed-width)字体,是我们用在虚拟终端(如gnome-terminal)中以及文本编译器中用来编程的字体。这些字体的每个字符的宽度都是一致的。为了能方便我们的编程的时候区分字母和数字,monospace的字体有一些特性上的要求,比如,1和l要容易区分,0、o、O要容易区分,{}[]()<>也要容易区分,但各种monospace的字体中往往都有这一点或那一点没有达到,怎么办?我们可以自己动手改造一下自己喜欢却有不足的字体。

比如我非常喜欢Lucida Sans Typewriter的字形,它的l和1非常明显,各种括号也一目了然,但不爽的是它的0没有加斜线和O非常接近。所以我的目标就是给它的0加上斜线。

我们需要的工具有两个,一个是fontforge,一个是inkscape。

首先,我们用fontforge打开LucidaSansTypewriter.otf,找到0的字符,双击它,这样就会打开glyph的编辑窗口,此时在glyph窗口的File菜单中有export选项,点击它,选择导出的格式为svg,再点击保存就把0的字形导出为svg了。

为了保持字体原有的风格,我们最好从字体中找到我们需要的斜线的样式,4的斜线是最好的选择,所以把4的字形也导出为svg。

接下来用inkscape打开 导出的0,在我的机子上,导出的svg文件是zero_LucidaSansTypewriterStd.svg。然后在inkscape中按ctrl+i 打开导入的窗口,选择导出的4的svg文件,在我的机子上是four_LucidaSansTypewriterStd.svg,之后确定就把4的字形导入好了。

此时,我们先要把4的斜线给旋转到水平位置以方便我们画出和它粗细一样的长方形。这个可以通过变换得到。先选中4,然后按ctrl+shift+m就可以打开变换的窗口,选旋转(rotate)的标签,在角度中填上一个负值,比如我填上的是-56,然后应用,看看有没有正好把4的斜线转到水平位置上,没有的话ctrl+z恢复,再相应的更改数值,试试。看不清的话,可以用ctrl+鼠标滚轮把图像放大一些。当你试了几次后把4的斜线转到水平位置后,记下你用的数值备用,比如-56。

这时,你就可以轻松地用inkscape左边工具栏上的长方形工具画出和4的斜线粗细一致的长方形了,为了方便对比,你可以把画出来的长方形设为半透明。先选中长方形,按ctrl+shift+f,激活颜色窗口,在色盘中选一个颜色,再从色盘下面的透明度条中间点一个值就OK了。然后把长方形移到水平后的4的斜线上,把长方形的粗细调成和4的斜线一样之后,把长方形的长度拉好,移开。这时4已经完成了它的历史使命了,直接把它delete掉。

需要的斜线已经基本ok了。选中我们画出来的长方形,按 ctrl+shilf+m,在旋转的角度上填上我们之前记下的角度的相反数,应用一下,斜线就OK了。把斜线移到0上看看长度是否合适,不行的话,按几次ctrl+z退回到旋转前,调整一下长度再旋转好。

斜线OK之后,我们就可以把它和0对齐好。首先,选中斜线,再按住shift选中0。然后按ctrl+shift+a,激活对齐窗口,在相对于的选项中选 选择(selection),然后点击第一行的第三个按钮把斜线对齐到0的水平方向的中间,再点击第二行的第三个按钮把斜线对齐到0的竖直方向的中间。

最后,我们就要把斜线和0融为一体了。首先,选中0,按ctrl+shift+g,取消0的编组(因为fontforge导出的时候把整个字形group起来了)。然后把斜线和0一起选中,按 ctrl+shift+=,就把斜线和0一起并起来了。

OK,现在ctrl+s保存svg文件,完成0的改造。

做好了加了斜线的0后,我们需要把它导入到原先的字体中。用fontforge打开原先的字体,选择字符0,再从File菜单中选择import,从窗口中选择我们做好的svg文件,点击导入。导入好0后,我们进行最后一步,生成字体。

在File菜单中有一个生成字体,比如我原先的字体是otf,那就选择OpenType(CFF),如果是ttf的话就选TrueType。输入一下要生成的字体名称,再点击保存就OK了。

还没完,我们还得处理斜体(Oblique)的0。

这个其实非常简单,先导出斜体的0为svg,用inkscape打开斜体的0,再导入我们做好正常的0。其实,斜体只是把相应的正常字形倾斜11.3度而已,所以我们可以直接用正常的0变换。选中正常的0,按ctrl+shift+m,在第四个标签中的水平中填上-11.3,单位是度,应用即可。

接下来,先记下原先斜体的0的坐标,然后把原先斜体的0删掉,选中我们做好的斜体0,输入记下的坐标,回车后就可以把0移到正确的位置,保存svg文件后,导入到相应的斜体字体中就OK了。

上面提供的是处理0的slash问题,希望对有同样想法的兄弟姐妹们有所帮助。
附件中有我处理过的LucidaSansTypewriter和LucidaTypewriter字体,传上来方便大家了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2008-12-17 20:15:52 | 显示全部楼层
acevery 又发好文了
字体这玩意对我来说总是折腾不好,就只好将就了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-17 20:57:45 | 显示全部楼层
Post by axlrose;1925391
acevery 又发好文了
字体这玩意对我来说总是折腾不好,就只好将就了


嘻嘻,谢谢支持。

把处理好的字体一并发上来,其实LucidaSansTypewriter和Lucida Console的字型是几乎是完全一样的,只是前者的大写字母比后者高一些。

以前我也是随便用字体,后来想知道monospace的字体到底是什么才知道编程用的字体有那些个要求的。另外推荐media-fonts/dejavu中的DejaVu Sans Mono,也相当不错。window下有编程经验的人一般会用喜欢Consola,这个是VC中的默认等宽字体
回复 支持 反对

使用道具 举报

发表于 2008-12-17 21:46:08 | 显示全部楼层
厉害,收藏先。有时间再好好拜读一下。
回复 支持 反对

使用道具 举报

发表于 2008-12-17 22:20:40 | 显示全部楼层
用dejavu就足够了,呵呵
回复 支持 反对

使用道具 举报

发表于 2008-12-17 23:43:30 | 显示全部楼层
支持原创,支持DIY精神。

一直用着Monaco。

ps: 雅黑更新了,新版不能用hintfull,只能hintslight。很像黑体。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2008-12-18 00:38:53 | 显示全部楼层
我也觉得monaco好看,不过没有粗体。

如何做带中文的等宽字体,中文整好是英文部分的两倍呢,因为现在只有terminal里面可以自动实现,别的编辑器里面无法实现这样的效果。

如zenhei等宽,中文宽度为英文的2倍。不过还是喜欢更方正的黑体
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-18 01:17:25 | 显示全部楼层
中文字体都是等宽的了,只是宽度是英文等宽的两倍。
编辑器一般都是处理为2倍的宽度,比如vim,emacs等。
如果是gvim中的话,只需set gf=英文的等宽字体,  set gfw=中文字体,就OK了。

看了Monaco,确实不错,是属于活力型的字体
回复 支持 反对

使用道具 举报

发表于 2008-12-18 07:30:02 | 显示全部楼层
Post by jarryson;1925570
我也觉得monaco好看,不过没有粗体。

如何做带中文的等宽字体,中文整好是英文部分的两倍呢,因为现在只有terminal里面可以自动实现,别的编辑器里面无法实现这样的效果。

如zenhei等宽,中文宽度为英文的2倍。不过还是喜欢更方正的黑体


Monaco有粗体啊。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2008-12-18 10:56:53 | 显示全部楼层
我一直在用 Envy Code R
因为设计给编程用的
0 和 O 还有各括号分得很清楚
本身支持 Bold 和 italic
最好的是字体比较窄
并排比较时能看多点东西

Envy Code R


在 GVim 里的效果
点击图放大


在 GEdit 里的效果
点击图放大
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表