本文转自B站,要查看更完整的文章内容,请前往原文查看,传送门:
https://www.bilibili.com/read/cv17495737
此文章为针对哔哩哔哩用户「綿雲飴里」 于2022年7月10日所发布的文章 《猫啃网补字教程的问题・百度百科勘误(暂)》而做出的回应,纯粹是个人观点与技术的探讨,如果错误之处敬请原谅!
相对应的教程文章请见 《设计师如何制作一套属于自己字库 手把手教你生成字库教程》]
昨天心血来潮搜了下我的字体,发现猫啃网收录了我源意明体那个缺字很多的旧版(我在元宵节已更新解决,现在支持的汉字字符甚至超过思源宋了)没有更新,这么看应该是网站编辑手动录入?看着例图缺字感觉挺不好意思。而且我这源意体是有意不支持竖排的[https://www.github.com/MY1L/HanItalic/issues/2]所以竖排例图很糟,不如删去……要是编辑者能看到这行就好了。
猫啃君:其实之前放竖版的图例,主要是为了方便用户可以知道竖版的排版效果会是怎么样的,无论有没有处理好,只是让用户知道一下而已。至于用不用竖版的排版模式,让用户自己决定则可。
顺带一提,我未来还会制作开源款Garamond风格的西文搭配源意明的字体「加拉蒙宋 (暂名)」,排版样例如图,支持不倾斜的Upright式意大利体西文:
然后顺手点进“手把手教你生成字库教程”(https://www.zishuai.com/viewpoint/16091.html)
看了开头,心里一凉:这个教程可能导致补字者功夫白费。
猫啃君:很高兴綿雲飴里能对猫啃网发表的这篇文章认真地阅读并提出宝贵的观点,所以猫啃君把綿雲飴里的这篇文章转载到猫啃网上,并针对綿雲飴里提出的问题作出回应与探讨。
2次还是3次曲线?
标题是“生成字库”,不过正文是拿给 Dela Gothic One.ttf 补简体字来举例。可是,给现有字体补字和原创字体是不一样的。
猫啃君:猫啃网写《手把手教你生成字库教程》这篇文章的初衷是让不懂得使用字库制作软件的设计师更方便制作字体文件(即字库)而撰写的,所以无论是补字还是新造字体该教程都适用。
互联网上已经有许多绘制字形的教程,但是多为偏向设计标准字,极少有教程谈及如何将字形封装制作成可以使用的字体文件(字库),另外就是撰写文章时,猫啃网的聊天群正在组织Dela Gothic One补字,所以为了方便编写教程就直接使用猫啃补字的AI文件作为示例,也顺便宣传接下来的补字计划。
另外,也会遇到有网友提问“我已经画好我的字了,但是我该怎样把他弄成字体(文件)呢?”,写该教程就是回答这个问题的。
不知为什么猫啃网要音译成德拉黑体。我在猫啃网自带的搜索框输入“Dela”,提示404。如果网站运营方看到这行,请修一下。
猫啃君:音译成德拉黑体,是因为原字体名称Dela Gothic中的Gothic在日语的语境中是黑体的意思,Dela则是音译,所以中文字体名取为德拉黑体。在搜索框中输入Dela提示404是因为这个搜索功能仅搜索文章的标题,标题中没有Dela这个关键字的话会提示404的,由于猫啃君只是美工一枚,对于程序的东西不是太熟悉,后续想办法修复这个问题。
第一个问题在.ttf,这字体只发布了2次曲线的版本。
虽然字体后缀名和它包含字形实际是几次曲线无关,不过一般.ttf是2次曲线,.otf是3次曲线。下文为了方便就这么称呼了。
原创字体用Ai是可以的,不过我用的是开源的Inkscape,源文件直接就是.svg呢。
但补字……不应该从字体源文件着手吗?
猫啃君:补字理论上从源文件着手是最好的,但是并不是每个开源字体都会有笔划分离的源文件,有些开源的字体只释出ttf文件。
而另一个问题就是,有些设计师并不懂得使用字体制作软件(比如猫啃君也不会用FontForge、FontCreator之类的软件,只会用Illustrator),该教程只是给像猫啃君这类只会使用AI的人制作字库提供一个解决方案而已。
DelaGothic是开源字体,作者放出了源文件,就在 Sources/DelaGothic.glyphs。其实我早就看见DelaGothic啦,但一直没动手补字,就因为我没买Glyphs这软件打不开.glyphs,因此宁愿憋着也不动手。
其实.glyphs是可以转换成.ufo文件的:github.com/googlefonts/glyphsLib,需Python。
.ufo是很多造字软件都支持的源文件,但我完全不懂大蟒所以转不了。
但猫啃网应该有懂Python的人,或者买了Glyphs的人——应该罢?
猫啃君:DelaGothic的glyphs文件是@夜煞之乐让朋友帮忙打开并导出的,而且@夜煞之乐也懂Python,所以如果綿雲飴里有兴趣的话可以与@夜煞之乐交流交流。
如今字体设计师基本上只会用更好的3次曲线全程画字体(Ai、Inks…),2次曲线可能只会出现在导出流程后。3次转2次是有损步骤。
2次曲线与3次曲线差别有多大呢?以我开了源的字体「曺全碑隸」为例。
因此不能拿源文件3次导出ttf转2次在Ai中打开转3次这种经历两遍有损步骤的字形修改(然后再导出ttf转2次曲线,经历三遍有损?)如果原作者导出时还顺带合并了曲线,那就更万劫不复了。
夜煞之乐:我并不清楚此处的重点是什么。如果按上下文理解为补字使用的源文件曲线格式,那么我觉得这个也还不是需要特别注意的问题。虽然三次转二次再转三次确实有会出现计算差异,但是在曲线算法足够精准的情况下,这个问题并不会造成太大影响,最多就是曲线会产生多余描点造成文件大小增加和改变曲线的曲率(如果您特别注意曲率的精准度,您应该直接使用字体设计软件)。
对于新手而言,我觉得是在可以接受的范围内(毕竟如果补字的原字体只给二次曲线版本的话我们也没办法要求作者公开三次曲线,而且也可以暗示作者本身不一定追求完美曲线)。
我不确定猫啃君是否用了 DelaGothic.glyphs 生成了拆分笔画的 .otf 再在Ai里打开,但这一步在补字教程里必须先说清。
夜煞之乐:如猫啃君所说,此教程为制作/生成字体文件(字库),因此并不需要特别说明。但是既然已经提出了问题,就解答一下疑问。我们群里面并未有人购买 Glyphs,但是我在其他字体群里面询问有 Mac/Glyphs的用户,让他们帮我把Dela Gothic One的 .glyphs 文件导出笔画分离、三次曲线的 .otf 文件后分发给制作群人员。然而,并非每个开源字体都有笔画分离版本或者使用三次曲线绘画,所以在这里也不多做解释。
至于为什么是请人导出而不是用其他方式是因为源 .glyphs 文件使用了智能部件(Smart Components),虽然使用 FontLab 7 或者 Python 的 glyphs2ufo 库都可以打开文件并导出笔画分离、三次曲线的 .otf 文件,但是智能部件的变形转换并无法保留,导致导出的字形部件比例不对,无法使用。
UPM?
Units Per eM,单位每eM。这个eM原意是一个大约有“M”那么大的空间,放中文字体里差不多相当于全角空格大小。UPM意思就是每个eM的长度里能放多少个坐标,字体里所有的尺寸皆以此为准:基线、上下行、边界框、Caps高,x高,斜体角度……我曾经通过仅修改upm无损放大了字形↘
见猫啃君说:“因为字体是矢量的,所以在设计时的宽高并不会影响后续的导入。”
这句话乍看和“GIF是无损压缩图像格式,所以其它图片转GIF并不会影响画面”一样能成立,但都少条件:GIF的无损是256色以内;字体虽然一般是矢量的,但曲线上锚点只能放在整数坐标(Unit,单位)上。
被导入矢量图里的每个锚点,凡没有刚好在单位上的,都会被造字软件在生成字体时挪动,也就是字形走样了。相关案例可见2014年的知乎 zhihu.com/question/24635072
我去年在Q群里与Fitzgerald等人聊遍黑体进度,谈到“我不太同意名称用‘gothic’,因为统一码里Gothic「如????」是个区段,如‘Noto Sans Gothic’这个字体……”,他传来了最新版,当我打开字体发现upm是256时也是心里一凉,担忧地说:你们可能白做了。因为遍黑体补字用的思源黑upm是1000。
大多数otf字体都是1000 upm。
顺带一提,以前微软出于性能考虑,建议ttf字体的upm是2的幂,这可能是遍黑体用256 upm的原因。当然现在的字体设计师包括我都不理会微软这建议。
可想而知,1000约舍到256意味着锚点全部重算了,而且挪移很严重,一些笔画多的字形看得我直摇头。我建议他从Adobe当时放的可变思源黑源文件改起,“现在从零重做还来得及(指效率更高)”
因此,原创字体无所谓,哪怕upm设成10,只要矢量源文件还在就有救。但补字的入(粘贴参考字形)、出(导出自改字形)都必须按原字体的upm来。比如原字体upm是1000,就最好开个1000×1000单位的画布——如果补的是汉字,且汉字呈正方形的话。其它情况酌情考虑,比如半角字形当然可以1000×500,画布也可以是upm值的整数倍,西文的话甚至还可以笔画出头呢。
夜煞之乐:教程已经提及宽度高度可以按制作者需求设置。另外有两点:
一、曲线描点在Adobe Illustrator内并不一定需要放在整数坐标(以pixel为单位下可以调整两位小数);
二、OTF 字体文件可以接受到二位小数的单位坐标(FontForge 允许 Round to hundredths)。在这两个情况下,UPM的设定并不是非常重要的问题。
展开来说,从 Adobe Illustrator 导出字体成 SVG 时,SVG 会保留原本有的小数数值,而 FontForge在导入时(教程提供的Python代码里面使用glyph.importOutlines())会根据 SVG viewbox调整大小,让 viewbox 上下触碰字体的 ascender/descender后放入字形(glyph)里面。代码所保存的 .sfd(FontForge工程文件)也会保留两位小数(写的代码并没有四舍五入成整数)。整套流程下来,曲线坐标从 Adobe Illustrator 到 FontForge 都没有出现偏差(除了导入SVG时自动调整大小,但还是按小数计算)。这样的情况下,我觉得UPM的参数设置完全并不会影响(虽然代码默认是按 1000 计算)。
而且,换算造成的“挪移严重”只会发生在UPM特别大差异的情况(如回应提及的 1000 → 256),在大于UPM 500 的情况下因为四舍五入而造成的偏差并不会特别明显。如果制造者特别注意描点的精准度,我们会建议直接使用字体设计软件更好
需要特别注意多数软件在导出最终的字体文件时,还是会自动把二次曲线的描点四舍五入,但是三次曲线的描点则不会四舍五入。下面链接示例的字体文件,OTF(三次曲线)的描点都有保留小数位,而TTF(二次曲线)的描点虽然多数已经转整,但是还是可见“O”里面的一个描点保留小数位。
点击下载:https://maoken.com/other/DecimalO-Regular.zip
到此,我想不必解释为何这2个问题都是地基级、一旦出问题补的字形要重做的地步。希望猫啃相关人员补 DelaGothic 时别出地基问题?
夜煞之乐:如上所述,回应文章所提及的两个问题皆不是重大问题,我们现在的 Dela Gothic One补字计划现在更注意的是新手设计师补字的品质亟需后续调整。至于提及的生成字库(封装字体文件)的教程,我和猫啃会在必要部分(如画板大小)进行修改。
当然,我现在还是不同意中文黑体名称用“Gothic”。
夜煞之乐:抱歉让您失望了,我们内部团队目前已经决定将 Dela Gothic One 补字的字体命名为 Unbounded Gothic (无界黑),其中 Gothic 保留原本的日文名称意思(注意:Gothic 不一定是文章所代表的“哥特语”(日耳曼语族语言),也可以是欧洲使用的“哥特体”(另称 blackletter 或 fraktur)或此处保留日文原意的“黑体”(另称 sans-serif——中文字体叫 sans-serif其实也不是很正确))。