三自造字运动

释题略。

缘起

前一篇题图做出来之后,包括但不限于九省通衢的活跃设计工作者纷纷表示情绪稳定,并一言以蔽之:醜。

那是当然的,咱以曾经的不入流码农身份在远超34岁的老迈年高的现在客串图农,能熟练运用十个手指头敲击键盘输入纯文本并正常显示……就应该喜出望外了吖。

顺便,因为是新机,只有操作系统(Microsoft™©® Windows™©® 7)自带字体,而安装「Microsoft™©® Office™©® 2010」时又装上了一些,可供选择有限。

昨晚凑趣一时兴起手打图片(参考『这里』最下方追加评论内容部分),从硬盘犄角旮旯处翻出五个「篆体字」装上。然后审视硬盘,发现曾经搜集的字体也算充沛,不过都是上世纪末的产品,码位贫乏,在当代计算机系统上未必能正常使用。

就说《囧斋随笔》的这「囧」字吧,如果不用「命名简单难以追根溯源于是没有版权纠纷」(参考之前使用微软雅黑做海报的淘宝商家遭遇方正索赔之新闻)的「幼圆」「隶书」之类字体,就显示不出来,包括但不限于目前系统上既存的方正、华文等「大厂」。

所以,先简单的把作者名称的字体换成(查询且实践一圈)勉强能凑活用的并且不算太「醜」的形象再说。然后数学渣职业习惯发作,开始刨根问底「三省吾身」了也。

十几年来,在新时代中国特色社会主义大好形势下,繁荣的中文互联网上,我这精神病仆街写手不入流码农数学渣也曾经注册了充沛的帐号,各个头像不同。

其中「范」字头的帐号通用一张蓝板,渊源来自铁■无敌范中出当中的马赛克。而被封之后其它备用马甲基本上都是挑一种字体把首字母绘制成蓝底白字,老读者或熟悉的帐号都知道。

空口无凭,贴图为证:

网络帐号所用头像
网络帐号所用头像

其中「alphabet.gif」是在龙空与网友扯淡的时候提到了换头像事宜,顺手做出来一份并按照「用户需求」选了绿色背景:

字母表
字母表

至于为什么明明不是动图也选「GIF」格式,那是为了缩小图片尺寸。因为JPEG默认32位色,而GIF只有8位调色板,对于配色和图案都很简单的情况下还是GIF更小。并且,那时候PNG还没有被「主流浏览器」普遍支持,工具也并不充沛,到现在当然可以指定四位色以更高压缩率做到更小尺寸。

也曾经有人问我,那些字体都是啥。我说,基本上都是「商业字体」并且「装潢专用」,还是「真の正版」的哟。然后就有活跃色目帐号质疑了,说我这被贫穷限制了想象力的缩卵怂货窝囊废怎么可能买正版。

我说「士别三日当刮目相待」,童年才俊不要用与时俱进的眼光看待我等老一辈无产阶级贱种屁民。不用正版是因为买不到,还不仅仅是买不起或「有便宜不占王八蛋(或曰『兲子』)」。

然后吵起来了呗。于是我就用这帮娱乐至死の逗哔所擅长的话语体系,以「电子游戏」举例。

众所周知,曾经风靡一时的《星际争霸》和《魔兽争霸三》在兲朝境内都是九省通衢の「武汉奥美」代理并负责「汉化」工作。据称该企业管理混乱,内部充沛着闲杂人等,闹得动静太大以至于我等无产阶级非玩家也略有耳闻的大概有两件事。

一个是《星际争霸》序列号重复发放,市面上正版光盘也难以登录战网,玩家怨声载道。还有一个是《魔兽争霸三》粗制滥造,如把伊利丹翻译成「尤迪安」,并且《冰封王座》最后附加的类RPG地图兽人战役一共三章,只做了一章就刻成光盘上市贩卖了。所以「玩家」想要完成整个游戏就必须自行寻找盗版,别无选择。

还有一个例子是《英雄无敌》,我是因为(十几年前就开始)构思架空设定的缘故,对这个系列比较感兴趣。在我上班有了收入并在预算内可供支配的时候,3DO已经倒闭,这时出到四代。那时候兲朝境内市面上更是没有「真の正版」。

后来魔法门系列被育碧收购,英雄无敌五代和资料片以及六代都是买的正版。五代是找的罗刹开发商,3D效果和视角随意切换做得很好;六代剧本出众,但(为了节约成本)找的匈牙利开发商,又回归了2D固定视角贴图,并且八阿哥极大充沛。再往后就没再注意(当然也没继续购买)。

世纪之初的情况,不仅仅是这些名闻遐迩的游戏,基本上所有兲朝玩家听说过的游戏,市面上都充沛着「简装正版」。比方说北京海淀图书城昊海楼一层电子科技书店,十元一张的只有硬纸壳套着的光盘堂而皇之摆在货架上卖,包装简略但版权信息醒目,包括但不限于电子游戏、软件、设计素材等。

在兲朝那自有国情在此的万恶的旧社会当中搜集的「正版」就是这样。而后来终于能见到「真の正版」了,当然会在预算许可前提下购买。

以前提到了,在日本工作的时候,买了ATOK2006以及一大堆配套「辞書」钻研输入法,后来20082009出差的时候又继续购买新版。除此之外,还买了些「和风素材」,包括但不限于「纹样」「字体」。

或问了,在日本为啥不买「汉风」素材。我反问,兲朝根红苗正且武德充沛的内亚外宾党国栋梁青年美食家不远万里蹄疾步稳的跑去青岛参加上合组织峰会作高举紧跟状,不吃当地特产海鲜难道专吃馕包肉大盘鸡不成?

或又问了,说看头像所用字体,均为「西洋风」素材,没听说你这精神病仆街写手不入流码农数学渣被贫穷限制了想象力的缩卵怂货窝囊废去过西洋国家。

我说,这是在亚马逊上直接购买的海外原版书籍资料。这套素材唤作«Dover Electronic Clip Arts»,一共买了二十本,附带光盘,内容已经在盘阵上备份。

原版素材
原版素材

其中头像主要使用的「古色古香西洋风」字体,来自其中«24 Celtic and Medieval Display Fonts»这本,现在的「亚马逊中国」上还在销售,定价178元人民币。而我则是2012526日(距离34岁大限将至仅剩174天)下的订单:

24 Celtic and Medieval Display Fonts
二十四种凯尔特和中古字体

这一套素材收集得不完整,我把在「亚马逊中国」上能买到的都买了,带光盘的一共二十本,另外还有几本不带光盘的,共花了三千多块钱。除此之外还买了其它一大堆原版书籍资料,我为了这「真の正版」所付出的合法成本,还有谁有什么意见么?

果然「或」又有意见了,说兲朝崛起不可阻挡,「新四大发明」连洋鬼子都赞不绝口,境外媒体动辄惊呼兲朝不可战胜,你这反汉贱种中国通明明是个历史唯物主义の尘埃,却看不清时代大势还无惧历史の五对负重轮,偏偏选择了逆潮流而动自绝于人民的一条死路,竟敢在亡我之心不死的美帝企业亚马逊上面进行电子商务活动,居然不肯「不惜一切代价」支持淘宝京东等「民族企业」?!

我说,我开始在「这个站点」上进行「网购」的时候,它还叫「卓越(www.joyo.com)」呢,所积累的用户等级和折扣都超过其它站点。至于后来怎么变成「亚马逊中国」的,是不是按照活跃色目帐号爆料开展「大数据杀熟」业务专挑我等老客户「痛宰」,那想必是国家机密兼宇宙奥秘。

再然后「或」就开始到处举报我「不友善」了,我的发言也因为「政治敏感」而被「亦当删去」了也。这个话题暂且告一段落。

我还有很多话想说呢。比方说世纪之初刚上班那时候,也在初步繁荣的中文互联网上购买过「正版」软件吖。

印象里当时有个「共享软件平台」供个人开发者上传作品,我在那里买了个「鹦鹉螺网络助手」(好像是这个名字),注册码通过邮件形式发到。后来没有继续更新,因为随着(现在看来已经过时的)技术之提高,邮件查询等简单功能可以手写脚本实现,并且后来也发现了免费的各种工具,比方说「nPOP」之类。

还有,早期使用「Microsoft™©® Visual C++™©®」的时候,为了工作效率,曾经通过「宇宙第一银行」中国工商银行转账给网上销售「Visual Assist」的兲朝境内「代理」,也收到了注册码。

后来随着经验增长,发现存在「注册机」这种东西,所生成的「正版序列号」与「真の正版」没有区别,市面上「代理商」所销售的「正版」软件无论是实体光盘还是下载版所附加的版权信息,对用户来说「无法验证」,因为连「售后服务」都是境内代理负责的。

正因为对于兲朝普通人民群众来说,跨境支付十分困难,所以「有中国特色の代理商」(或曰「钦定买办」)才极大充沛。在日本的时候虽然有境外银行账户但没有开通信用卡之类业务,有些业务还是找「中华街」专为兲朝同胞开设的「代理店」负责。

这些「钦定买办」办理宽带之类当地「实体」业务都没什么,手续完备且没有(或没碰到)法律纠纷。但是「虚拟」业务就不好说了,比方说「代购」商业软件,如前面提到的「EditPlus」「HyperSnap」之类,虽然「注册码」确实是授权给「我」可以正常使用,但是实在不好说开发商知道不知道我买了「正版」。

总之,后来换了好几台电脑,台式机和笔记本都有,切换过程中还有忘记备份等事情发生。所以,多年之后且经历了钦定红客动辄钦定死机多次之后再来回顾,各种注册码邮件早不知道跑哪儿去了,那时候也没用「KeePass」之类开源免费的密码软件管理各种「口令」。

目前手头还在的,还就是在实体店铺买盒装软件当中附加的印刷品,比方说包括ATOK在内的JustSystems的一堆产品的注册码还在,而素材之类则没有注册码只有版权声明。

也就是说,用自己光明正大「购买」的正版软件,还会面临「不得不」找个注册机生成自己曾经付费获得的授权给自己的注册码并且还不知道是否「合法」的黑色幽默。

言归正传

开场白又写太多了,唉,上了年纪就容易唠叨,超过34岁之后手速下降但打字数量却在提升吖。

先说「环境」吧,昨天深夜到今天早上出现了「突发情况」,那绿色的「Visual Studio Code Insiders 1.25.0-insider」在每日更新之后,「SVG Viewer」插件无法正常使用了,好在蓝色的「Visual Studio Code 1.24.0」仍然可以正常使用,这其中一定蕴涵着充沛的政治和意识形态内容,并体现了政治和意识形态斗争新动向。

前面提到的「手写SVG图形」的初步工作不再重复,很多进阶内容还没来得及展开,而「SVG 2.0」尚在讨论中,即便是当代「SVG 1.1第二版」也不见得被各大主流浏览器普遍完全实现。

这里特意提醒,能在代码中直接使用的「字体」,必须已经「安装」到操作系统当中。我这里的环境是「Win7」,按照浏览器(Chrome/FireFox等)和编辑器(VS Code)声明的「跨平台」特性,在macOSLinux之上也应该有大同小异的表现。

顺便,按照被钦定红客远程折腾到鞠躬尽瘁的旧台式机的寿命估计,这台新机好歹也能撑个「七八年就来一回」。而Win10不支持旧硬件,且微软声明Win7扩展支持于2020114日到期,往短了算也有将近两年时间。所以近期不准备购买整机。

而对于「跨平台」特性的试验,Linux等环境可以自行安装,于是只有在形势所迫实在必须的情况下,可能会咬紧牙关勒紧裤腰带购买「乞丐版」或「面向丐帮采购定制特供版」苹果机,因为macOS没有零售版。

扯远了,回到字体话题。

众所周知系统中安装了太多字体会导致各种占用资源问题,即便硬件足够强大,在那浩如烟海的字体列表当中寻找需要的那一个,也会消耗很长时间。所以,对于当前所面对的简单需求来说,最好还是按需安装,先挑好了再装,不用了就卸载。

于是,寻找一款不需安装即可预览字体的软件工具,又提上了议事日程。

字体文件本身的格式是公开的,哪怕从不入流码农角度出发,通过编程实现也不困难(但是麻烦),市面上各种工具也都是这么实现的。我在这方面的经验是通过「刷题」获得的,也是之前提到的《Windows图形编程》(«Windows Graphics Programming»),其中有分析和操作「.ttf」文件的章节。

但是对广大未必有过码农经历的普通用户来说,没必要重新发明轮子,最好先看看地球村码农们都发明了什么轮子。

艰苦卓绝的搜索过程略。找到了若干候补,通常都起了「Font Viewer」「Font Explorer」之类大同小异的名字。其中有的只能预览已经安装的字体也就是通过调用系统功能渲染,忽略;有的则可以直接使用字体文件进行渲染实现预览,这些是当前需要的功能。

而可用的工具当中,有些只能查看「有美国特色」的基于「ISO-8859-1」或「Windows-1252代码页」甚至ASCII编码的字体文件,其它字体一律显示乱码,也需要忽略。

同时还得严密的考虑问题,手头很多字体,尤其是中文字体,本来就是在那上世纪末出现的,本身就局限于简体中文代码页,并不是遵守Unicode规范。这种时候很难指责遵守规范的软件工具。

总之,比较了若干工具之后,选择了「dp4 Font Viewer」这一款,德意志民族神圣罗马帝国码农开发的。通常来说,同样是字母佬,西欧代码页环境下处理多语种面向多国客户的开发成果,也应该比习惯了美帝灯塔国「默认」环境的码农更符合「全球化」「多元文化」标准。

所以,定位到字体所在目录(这里就用那二十四种「古色古香西洋风」字体举例),会自动搜索所有「可用」字体(有些字体文件版本古老内容不规范于是无法通过官方钦定接口调用),选中后预览:

dp4FontViewer
dp4FontViewer

其中使用的示例文本是这样的:

Glib jocks quiz nymph to vex dwarf.

Victor jagt zwölf Boxkämpfer quer über den großen Sylter Deich.

Le cœur déçu mais l’âme plutôt naïve, Louÿs rêva de crapaüter en canoë au delà des îles, près du mälström où brûlent les novæ.

分别是英德法的「全字母句」,都是网上搜的,也就是通常在测试字体的时候使用的。其中法语那句太长,预览不是字处理又没有自动换行,于是手动换行。

很多人都知道Windows字体范例用的「quick brown fox jumps over the lazy dog.」这句,所以示例中英语素材换了一句。

中文字体的操作略,这里就贴个预览图,某些字体对「囧」字果然不支持吧。

中文字体预览示例
中文字体预览示例

总之现在可以迅速找到所需字体了,接下来需要分析字体文件内部结构,提取字体轮廓。既然不再是点阵字体了,肯定是「矢量」数据吖,那么前面以贫乏得可怜的基本功硬着头皮恶补的操作SVG相关内容,就有了用武之地。

艰苦卓绝的搜索过程略,最终找到了一款开源免费的跨平台字体设计工具:「FontForge」。

特意提醒,虽然「跨平台」,但是在Windows上的限制还是很明显的,建议用户在安装盘(通常是「C:」)下建立路径中没有空格和特殊字符的工作目录,否则经常会出现各种「失败」,包括但不限于「Save Failed.」。

就用我之前于龙空讨论历史唯物主义の尘埃、历史の五对负重轮相关话题时常用但已经不可用的挪用了「塔西陀陷阱」的冠名者之名讳的帐号Tacitus所用头像使用的字体「Warwick」举例。

购买的素材当中,字体有两套规格,一套是TrueType,另一套是AdobeType1,内容有着微妙的不同。上面提到的「dp4 Font Viewer」只能预览TrueType字体,而「FontForge」则可以同时处理这两种以及更多格式(包括SVG)。

将两套字体三个文件复制到工作目录「C:\MyFonts」下。通常情况下,业内公认Adobe是「专业」的,那么就用这个吧。

FontForge
FontForge

启动「FontForge」打开「WARWRG__.PFB」文件之后,显示「字符列表」:

字符列表
字符列表

双击其中「T」格,显示「字符轮廓」:

大写字母「T」轮廓
大写字母「T」轮廓

图上密密麻麻的节点和参数,以及周边提供的菜单和工具按钮,都是「设计工作者」所擅长处理的内容。看到这个画面,包括但不限于九省通衢在内的当代美术兲才们应该喜出望外口称「碰瓷碰到枪口上了也」。

但是我这不入流码农看着眼晕,也没去报个美术培训班深入学习键鼠配合伎俩直到手速远胜职业电竞选手,所以当前笑不出来吖。于是,通过菜单栏「File→Export」命令,将轮廓数据「导出」为SVG格式,这就把问题化简到已经解决的情形上去了也。

导出SVG
导出SVG

但是显示却是这个样子的(画布尺寸按比例略有调整):

轮廓SVG数据
轮廓SVG数据

因为西文字体有「基线」的概念,还经常可以在上下左右「越轨」,对于一些「屁股不知歪到哪里去」的花体书法字来说,字母间距为负值也很常见。所以,轮廓数据本身是完整的,但是因为视口位置不恰当,所以未必能全部显示出来。

接下来,按照前几篇的步骤,调整视口坐标,补充样式,过程略,结果如下:

{Tacitus}头像
Tacitus头像

喏,头像之一就这么做出来了也。

真の言归正传

上面扯了这么多,还没提到「造字」相关话题呢。

这就要从上面提到的两套不同规格的字体文件之间的区别开始说起了也。在打开「.pfb」的情况下同时打开「.ttf」进行对比,情况是这样的:

Warwick字体pfb与ttf之区别
Warwick字体pfbttf之区别

很明显TrueType格式的字体少了一些字符,这还是仅仅在「西文」内部。当然,具体到开发商,情况各有不同。是专门提供「阉割版」呢,还是遇到了技术上的困难?是先完成一套格式简化成另外一套呢,还是先发布一套之后再于另外一套追加更新?

然后把TrueType版字符列表往下滚动一点就发现,原来是对具体字符的编码不同。

原来是编码的区别
原来是编码的区别

众所周知,从WinNT开始的内核,就从底层支持Unicode,规范的称呼是「UCS-16」,固定以两个字节表示一个字符,于是TrueType等字体文件规格的制定,就是最多包括65535个字符。

乍一看能解决绝大部分文字显示的需求,但就是在互联网极大繁荣的当代出现了难以解决的情况。在Unicode规范中,已经收纳的字符远超六万五千多,而其它「扩展位面」的符号,包括但不限于当前所需要的数学符号,都难以获得「Windows内核」级别的支持。

这种情况,在图形界面上通常采用更换字体解决。很多人都知道「Wingdings」「Webdings」这些字体当中只包括符号,还有些码农知道窗口的最大最小化按钮等系统组件的显示都是通过这些「特殊字体」渲染出来的「矢量」而不是贴(位)图。

而在繁荣的互联网上,通用编码标准是「UTF-8」,是一种向后兼容的可变长编码标准。这里的「后」就是通称「美国和西欧」编码的「ISO-8859-1」,实际运用中是其超集「Windows-1252」代码页。

使用「UTF-8」编码可以支持很大数量的字符,比方说2010年开始大量进入Unicode标准的「emoji」,在旧字处理程序(比方说我用的Microsoft™©® Word™©® 2010)当中就很难正确显示。

于是,现在轮到「先行者」微软尴尬了。因为基于BSDmacOSLinux的主流,默认编码都是UTF-8,可以在「内核」级别提供支持,还能满足主要客户也就是「美国和西欧」的向后兼容需求。

这又扯到了另外一个话题,那就是「Unicode纯文本到底需要不需要BOM文件头?」,在一票信息技术站点都曾经吵得很凶。其中「裸文本」的主要支持者居然是GitHub用户群,还呼吁不要用「记事本」而要用「NotePad++」。

至于为什么,用过GIT官方命令行或图形界面的都知道,因为设计中就是按照唯一的编码「UTF-8」处理的,有了BOM文件头反而会显示乱码。而这场争吵的最终结果,是以「微软记事本程序遵守Unicode规范提供BOM文件头」结束,不符合一部分用户的使用便利,但是符合更多更广泛用户的利益。

又扯远了。

总之,「用户自造字」功能很多第三方程序都提供了,这里使用「FontForge」可以轻松的在字体文件之间复制粘贴,并调整轮廓数据,还可以导入外部SVG数据。

所以就不「献醜」了,其实本来还想特意造个「醜」字与新时代中国特色社会主义大好形势下党国栋梁青年才俊使用食指操作鼠标与时俱进童年才俊使用大拇指操作手机在繁荣的中文互联网上反复刷屏的革命口号当中出现的伟大光荣正确字眼混排呢。

后记

一不留神写太多了,这里就简单把与上面提到的部分内容有关的话题略作展开。

曾经的工作用机、旧台式机和现在的新台式机上,安装系统时指定的「管理员帐号」都是「繁体」汉字,比如「範狂夫」这种。于是导致的问题是用户目录也是直接使用帐号的字眼,比如「我的文档」其实位于「C:\Users\範狂夫\Documents\」这里。

由此而来导致了一个问题,就是「我的环境」对那些不遵守推荐规范不支持Unicode的应用程序「不友善」,无论是只支持「美国与西欧」的字母版,还是使用「其它」代码页的语种如日文版。

比方说,由于系统的「临时目录」都放在「C:\Users\範狂夫\AppData\Local\Temp」这种地方,对于一些软件的「正常」功能来说难以访问。

所以,这个环境应该算是对「推广Unicode规范」最迫切的环境吧。同时也算是一个「测试环境」,在我这里由于编码问题跑不起来的应用,通常都会暴露出具体某个模块的开发环境或使用环境或兼而有之。

至于为什么要在用户名中使用繁体汉字,那是上班时候养成的习惯,为了在中文和日文环境下都显示正常而不是出现乱码或问号。

至于有「或」跳出来质问为什么迁就境外和国外,那就需要「曰若稽古」了也。兲朝有个标准唤作「GB-18030」收录了「繁体汉字」,并且还强制推广,微软的「Windows ME」就是因为不符合这个标准,被兲朝官府勒令「强制下架」。

所以,高举紧跟与中央保持一致,用繁体汉字怎么了,「或」有意见就去找主席台前三排去提吧,看看到底是谁「不友善」。要么由于兲朝崛起史无前例,大手一挥打烂一个旧世界,全面废止「GB-18030」规范顺便「大力」全网查删繁体字,再顺便给微软道个歉?

2018-06-13