去年十月份改论文时,用matplotlib做图,生成pdf,插入到word文档中。但是需要把整个字体都嵌入到pdf里,生成的文件很大。当时就想通过修改字体,删除不用的字来解决,这是当时看的一篇教程,讲的很详细。
一、基础知识介绍
注意:770适应的TTF,必须为2左右的,不能超过2.5M的TTF,所以大家找模板的时候的注意。
首先说一点题外话,这份字体教程说了许久,一直没有拿出来,实在不好意思,在此向各位道歉。因为还没有写完,就已连载的形式慢慢发出来,前几部分为了照顾新手写得比较啰嗦,后面我会写的简洁一些。下面进入正文。
要学会修改字体,我们必须要对字体有一定的了解,我希望首先在这里很快把一些字体结构的基础知识都在这里解释一下,为了方便新手理解,我认为使用比较形象的比喻结合相关术语来说明比较好,由于我们主要使用FontCreator来修改字体,下文中的术语将以FontCreator为准。
首先,让我们把每个字体想象成一座大厦,这座大厦有他的名字等信息,我们可以通过这些信息来找到这个字体。而我们所需要显示在屏幕上的每个字符相当于就是住在这座大厦每个房间的人,这就是我们修改的主要目标了。这时你也许会想到:一个字体拥有几万个房间,我们怎么知道要找的人在哪个房间呢?
就我们接触最多的TrueType(.ttf)字体来说,它使用的的是Unicode编码,它为每种语言中的每个字符设定了统一而且唯一的二进制编码,也就是说我们大厦中的每一个房间都有一个统一而且唯一的二进制的房间号码,另外,我们还要同时保证,该房间号码所对应的人必须是正确的,否则我们找到的人就不是我们想要找的人,显示出来的字符也就不是我们想要显示的字符。“统一而且唯一”的意思就是无论哪个系统都是按照这个编码去寻找字符,并且每一个编码只可能出现一次。
这下大家应该比较清楚了吧,我们要让一个字体正常并且正确的显示,首先要保证字体结构是完整正确的,其次我们还有每个字符以及同他相对应的编码是正确的。当然这只是最基本的条件,实际上具体的情况可能复杂很多。
下图是一个完整的Unicode编码表,我们所能用到的99.9%的字符都属于其中的BMP(基本多文种平面 Basic Multilingual Plane),也就是0000-FFFF之中。
进入 Wikibooks的这个页面 ,你可以查看到每个编码所对应的字符。
二、常用软件介绍
High-Logic FontCreator Professional Edition:这应该是用的比较多的一款字体创建、修改软件,虽说不够专业,但是足够我们日常使用了。目前最新版本5.6,有汉化版,不过推荐使用英文版。
High-Logic MainType:与FontCreator是同一家公司的产品,很好用的字体管理软件,而且可以辅助我们更方便地修改字体,用到时我再详细介绍。目前最新版本2.1.1。
FontForge :Linux上的一款开源字体编辑软件,据说功能和专业的FontLab相媲美,虽然在Windows也可以运行,但是操作习惯有些不同,也不太稳定。但是在某些功能上比FontCreator方便很多,所以我将它配合FontCreator一起使用。
Unicode编码转换工具:可以将您输入的字符转换为Unicode编码,这样你就可以快速定位该字符进行修改。有两款,其中一款支持双向转换。
字体组件:这是我从各个字体中搜刮出来的,按照相应的顺序及语种或类别放在了单独的字体文件中,包含了BMP范围内我所能找到的所以字形。
11月26日更新了一下,因为查了些资料,发现有几个地方是不应存在任何符号的,另外对中文部分对照GB18030做了一些修改。如果你是用了该文件修改字体并公开发布的话,希望能署上本人名字或留下我的博客地址,谢谢。
字体编辑FontCreator5.6XX版本(以前我上传的,定位到这个帖子里)
2篇修改字体教程!喜欢DIY的看看:
http://www.motoedy.cn/viewthread.php?tid=164
http://www.motoedy.cn/viewthread...p;extra=&page=1
三、替换字体的英文字母及数字
接下来我们就正式开始字体的修改,我将采用实例的形式编写本教程,首先我们从最简单的替换数字及字母开始,我们以制作准圆NeoSans为例。其实这部分很简单,就是复制粘贴而已,只需要注意一点,就是每个字形要复制到对应的编码下,要不然就会出现显示错误。通俗的说,就是要把新的字形放对房间。
技巧
我建议每次修改字体之前,都确保字体中的字符是按Unicode编码(也就是文章开头所说的房间号)的顺序排列,这样一方面方便修改,另一方面可以大大减少修改中出现错误。在本例中,如果原字体与替换所用的字体排列顺序不一致的话,直接复制粘贴就会出现错误。具体操作方法为选择菜单栏Font - Sort Glyphs,然后选择第一项,点击OK,这个过程需要比较长的时间。
首先用FontCreator打开两个字体,在任意位置点击右键,选择Caption - Microsoft Mappings,这样在每个字符上面就会显示它对应的Unicode编码,方便以后的修改过程。如果你的电脑配置比较低,使用Visible,可以大幅提高软件速度。
四、少量连续符号或文字的添加
今天将介绍少量连续符号或文字的添加,该操作使用FontCreator比较方便,下面我以给方正准圆添加Nokia特殊符号为例,说明操作方法。
实际上,你可以利用以下方法,将教程(2)提供的Components.zip中的任意一个字体组件添加到您的字体中。我修改的字体基本上都是不带韩文的,如果你需要显示韩文的话,通过以下方法就可以实现了。
首先打开Nokia符号组件及准圆字体,全选所有字符(Ctrl+A),可以看到状态栏上显示总共有19个字符,同时记住这19个字符的编码是从F800至F812。然后使用Ctrl+C复制这些字符(也可以使用右键菜单或工具栏按钮)。
五、大量非连续符号或文字的添加
在本教程第二部分提供的字体组件中,有一个Components.ttf,这个字体文件包含了除中文和韩文以外其余的所有一万一千余个符号及文字,方便大家进行一次性添加,由于原字体与Components.ttf必定会有一部分重叠,我们所需要补充的字形肯定不是连在一起的。
另外,如果你要修改的字体中文部分不完整的话,为了能显示所有中文,你有可能需要使用相似的字体将中文部分补充完整,这时你需要补充的中文字符肯定也不是连续在一起的。
在以上两种情况中,我们就不能按照教程第四部分简单的进行添加了,这一部分我们就以利用Components.ttf补充准圆的符号文字为例,分别说明使用FontCreator及FontForge的操作方法。
1. 使用FontCreator进行添加
首先我们打开两个字体,将Components.ttf中的字形全选,复制。
接着,我们在准圆字体末尾添加11411个空字形,注意下面选择第二项“After last glyph”(没有选中字形的话默认为该项)。
由于我们复制的字形中与准圆有重复的,也就是存在相同的映射关系,所以这里注意一下对话框下面的Mappings部分,三个选项都会粘贴所有的字形,但是第一项Keep same mappings表示只建立原字体字体中不存在的映射,已存在的映射则保持不变,而第二项Overrule same mapping及第三项Add mappings表示已存在的映射也会被替换为所粘贴的映射。
注:官方的帮助文件中对第二项及第三项的说明是不同的,但我在实际使用时感觉两项所达到的效果完全一样,如果有误请指正,下面是帮助文件中的说明:
Keep same mappings adds new mappings to the glyphs. Mappings that already exist will be reassigned to the pasted glyph(s) when the Overrule same mapping option is selected. You can also choose to add mappings. Add mappings adds all mappings. When mappings are already available, they will be reassigned to the pasted glyph(s)。
稍等片刻后,我们就可以看到,对于原字体已存在的字形就没有建立映射关系,也就是没为他添加相应的编码(右键菜单的Caption需要选择为Microsoft Mappings才能看到)。
完成以后我们将排在字体末尾没有映射关系的字形全部删除,最后保存字体即可。
2. 使用FontForge进行添加
首先,同样打开两个字体,路径为“cygdrive\盘符\目录\文件”。
接着分别在两个字体的窗口中选择菜单Element – Font Info,弹出窗口的左边选择General,将Components.ttf的Em Size(主要是这项)、Ascent、Descent改为与准圆相同的数值,点击OK,稍等片刻等待该操作完成。
六、删除不需要的字形
说完了怎么添加字形,现在该说说说说怎么删除字形了,在这里我们利用MainType,可以很方便的删除不需要的字形,对字体进行精简。
首先打开MainType,界面中间的左部是字体列表区域,第一个选项卡Actives代表已安装的字体,每次启动时都会加载该列表下的字体,稍等一会加载完以后,点击Browse选项卡,浏览到你要修改的字体目录,选择你要修改的字体,这时你在右边就可以看到该字体所包含的所有字形,并且是按照不同的区块排列的。通过 这个文本文件 ,你可以查看到区块对应的用途或语言。
最后提醒一点,删除之前应该确认字体是经过了排序的,这样能尽可能减少误删的情况,排序的操作方法请见教程(3)。
七、字形轮廓的调整
今天继续为大家带来我的字体修改教程,这次我们讲的是比较重要的一部分,修改字体的过程中也会经常用到的–对字形轮廓的具体调整,同时也包含对单个字形宽度等参数的调整。
我们打开一个字形,这里一英文大写字母“K”为例。中间黑色实心的部分就是屏幕上显示出来的字形,它的附近有几根红色的虚线来定义它的位置。水平的几根同一个字体内的每个字形都是一样的,而垂直的两根定义了该字形的宽度,同一个字体里的不同字形不一定相同。关于这些虚线的意思和作用大家可以看看下图中标注的中文。
单个字形的调整
首先,最简单的方法就是用鼠标直接拖动了,点击一下黑色部分,他的周围会出来一个方框,大家可以直接用鼠标拖动来调整,拖动四个角上的点时,调整按住Shift键还能保持宽高比不变。对于有些有包围结构或比较复杂的字形(如0等),你需要选中字形的全部轮廓(Ctrl+A或用鼠标拖出一个包括整个字形的选择框)后再进行调整,大家可以自己去体会,我就不详细说明了。
另外,如果你想对单个字形进行详细准确的调整,可以在打开该字形时,使用Transform面板(按F6打开或关闭该面板)进行。选择相应功能的标签页,设置好参数,点击“Apply”就可以马上看到效果了。有几个标签页会有如下图所示的9个单选框,这是定义进行操作的基点,意思就是保持该点不动进行调整。大家实际操作一下就知道了,不满意的话可以通过撤销重新来过。
多个字形的批量调整
进行批量调整需要用到Transformer工具,通过Tools - Glyph Transformer进入。
实例
怎么使用好这个工具还需要你自己不断地摸索,我觉得很难用语言表达清楚,最后我举一个小例子,希望能起到抛砖引玉的作用,下面我说一下怎样对桌面播放时间不能完整显示的字体进行调整。
桌面播放时间用到的是数字及英文冒号,经过多次的测试得到,在数字宽度为字体Em Size的一半,冒号宽度为Em Size的四分之一时,能保证桌面播放时间的完整显示。字体的Em Size可以通过Format - Setting,在Units per em后面看到;单个字形的宽度可以右键单击该字形,选择Properties,在Advance Width后看到。
转自 http://www.yeolar.com/note/2011/01/15/font-edit/