解决方案
通过 fontforge 命令,能够进行字体合并。
第一步、安装工具
BLFS / FontForge-20160404: http://www.linuxfromscratch.org/blfs/view/7.10/xsoft/fontforge.html
Homepage: http://fontforge.sourceforge.net/
FontForge 与字体设计: http://designwithfontforge.com/zh-CN/index.html
Documentation: http://fontforge.github.io/en-US/documentation/
FontForge,包含一个轮廓字体编辑器,可以创建自己的postscript,truetype,opentype,cid-keyed,multi-master,cff,svg,bitmap(bdf,FON,NFNT)字体,或者编辑现有的字体。
从发行版的源中安装
apt-get install fontforge
使用源码编译安装
参考BLFS/FontForge-20160404: http://www.linuxfromscratch.org/blfs/view/7.10/xsoft/fontforge.html
或者 Installing FontForge from Git Source Code: https://github.com/fontforge/fontforge/blob/master/INSTALL-git.md
安装的可执行程序
fontforge,is a program that allows you to create and modify font files.
fontimage,is a program that produces an image showing representative glyphs of the font.
fontlint,is a program that checks the font for certain common errors.
sfddiff,is a program that compares two font files.
第二步、合并字体
准备要合并的两种字体
这里以Courier10 BT和Microsoft YaHei为例。
请自行下载两种字体。其中Courier10 BT提供英文字符显示,而Microsoft YaHei提供中文显示。
创建字体合并脚本
# 一下为脚本内容,脚本名为: # Courier字体 # 其中courier.ttf,为字体文件名。 Open("courier.ttf") SelectAll() ScaleToEm(1024) Generate("Temporary-A.ttf", "", 0x14) Close() # Microsoft YaHei字体 # 其中yahei.ttf,为字体文件名。 Open("yahei.ttf") SelectAll() ScaleToEm(1024) Generate("Temporary-B.otf", "", 0x14) Close() # 合并两种字体 # Monaco_Linux.ttf 为 A 字体 # PowerlineSymbols.otf 为 B 字体 # Monaco for Powerline.otf 为合成字体 # SetFontNames("Monaco_for_Powerline", "Monaco for Powerline", "Monaco", "Regolare", "") # Monaco_for_Powerline 为 PostScript 名称 # Monaco for Powerline 为全名 # Monaco 为家族名 # Regolare 为样式 Open("Temporary-A.ttf") MergeFonts("Temporary-B.otf") SetFontNames("Courier_And_Yahei", "Courier And Yahei") Generate("courier-yahei.otf", "", 0x14) Close()
使用脚本进行合成
执行命令生成字体:
# fontforge -script courier-yahei.pe
上述命令会生成courier-yahei.otf字体文件。
参考文献
Merging two fonts: https://superuser.com/questions/490922/merging-two-fonts
在 Linux 下字体合成: https://dctm.github.io/blog/skill/linux-font-matge.html