准备
工具:fontforge,原名pfaedit,主页:http://fontforge.sourceforge.net/
原料:两款中文字体。一款作为“常规”字体显示,一款作为“粗体”显示。两款字体并不一定是同一种,只要你自己看着舒服就行。但是粗体比常规粗是必须的。当然,如果你不这么做我也没办法。
优点:不用对现有字体引擎打补丁、做修改。
缺点:比较麻烦;有版权问题;比较配套的字体不好找。
附言:经wxz8指点后,添加了斜体的制作方法。
备注:Windows的Arial、Courier、Times、Verdana等都是通过定义4个相关字体实现的粗斜体,而不是用算法.这样的效果应该不错。
我这里以方正圆体为例。
目标:以方正准圆作为“常规”字体显示,方正粗圆作为“粗体”显示,统一改为FZYuanTi。
没用中文名的原因是在不打firefly( http://firefly.idv.tw/setfont-xft/ )补丁的情况下无法显示中文字体名。
制作常规体
1. 安装完成fontforge后,在终端里输入fontforge运行,在弹出的界面里载入方正准圆(fzy3k.ttf)。
2. 点击菜单栏的Element--Font Info;
Fontname改为FZYuanTi_JT(这一步的修改将显示为PostScript名。右键--属性,Meta信息就可看到);
Family Name改为FZYuanTi;
Name For Humans改为FZYuanTi(这一步不改也可以,但为了统一我还是改了);
Weight改为Medium(MS带的字体这里均为Book,你不改也可以);
关键是Family Name应该和你将用的“粗体”统一,名字可以任意。我用FZYuanTi。
3. 切换到TTF Values选项卡
Weight Class改为500 Medium(MS带的字体这里均为400 Book,你不改也可以)。
4. 切换到Panose选项卡
Weight改为Medium。
5. 切换到TTF Names选项卡
在下面第二个选框内选择Chinese(PRC)zh_CN;
改变第一个选框内的内容为Family,此时将下面输入框内的内容改为FZYuanTi;
改变第一个选框内的内容为Fullname,此时将下面输入框内的内容改为FZYuanTi;
改变第一个选框内的内容为UniqueID,此时将下面输入框内的内容改为Founder:FZYuanTi Regular;
然后将下面第二个选框内选择English(US)en_US(这里字体所支持的语言会用不同颜色显示,直观明了、方便选择。如果我不是色盲的话应该是绿色的);
做与Chinese(PRC)zh_CN类似的修改,即修改Family、Fullname、UniqueID三部分。
6. 点击OK关闭对话框后,如果弹出窗口提示不匹配,询问是否改变的话,点击Retain All,不做改变。
7. 选择File--Generate Fonts,选择True Type,点击Save后生成字体,文件名任意,我取为FZYuanTi_regular.ttf。如果弹出窗口提示什么Em Size的话不用理会,点击yes确定。
制作粗体
1. 安装完成fontforge后,在终端里输入fontforge运行,在弹出的界面里载入方正粗圆(fzy4k.ttf)。
2. 点击菜单栏的Element--Font Info;
Fontname改为FZYuanTi-Bold_JT(这一步的修改将显示为PostScript名。右键--属性,Meta信息就可看到);
Family Name改为FZYuanTi;
Name For Humans改为FZYuanTi Bold(这一步不改也可以,但为了统一我还是改了);
Weight改为Bold;
关键是Family Name应该和你将用的“常规”统一,名字可以任意。我用FZYuanTi。
3. 切换到TTF Values选项卡
Weight Class改为700 Bold。
4. 切换到Panose选项卡
Weight改为Bold。
5. 切换到TTF Names选项卡
在下面第二个选框内选择Chinese(PRC)zh_CN;
确认第一个选框内的内容为Styles(SubFamily),此时将下面输入框内的内容改为Bold;
改变第一个选框内的内容为Family,此时将下面输入框内的内容改为FZYuanTi;
改变第一个选框内的内容为Fullname,此时将下面输入框内的内容改为FZYuanTi Bold;
改变第一个选框内的内容为UniqueID,此时将下面输入框内的内容改为Founder:FZYuanTi Bold;
然后将下面第二个选框内选择English(US)en_US(这里字体所支持的语言会用不同颜色显示,直观明了、方便选择);
做与Chinese(PRC)zh_CN类似的修改,即修改Styles(SubFamily)、Family、Fullname、UniqueID四部分。
6. 点击OK关闭对话框后,如果弹出窗口提示不匹配,询问是否改变的话,点击Retain All,不做改变。
7. 选择File--Generate Fonts,选择True Type,点击Save后生成字体,文件名任意,我取为FZYuanTi_bold.ttf。如果弹出窗口提示什么Em Size的话不用理会,点击yes确定。
制作斜体
1. 安装完成fontforge后,在终端里输入fontforge运行,在弹出的界面里载入刚才修改过的常规字体(FZYuanTi_regular.ttf)。
2. 点击菜单栏的Element--Font Info;
Fontname改为FZYuanTi-Italic_JT(这一步的修改将显示为PostScript名。右键--属性,Meta信息就可看到);
Family Name改为FZYuanTi;
Name For Humans改为FZYuanTi Italic(这一步不改也可以,但为了统一我还是改了);
Weight改为Medium(MS带的字体这里均为Book,你不改也可以);
关键是Family Name应该和你将用的“粗体”统一,名字可以任意。我用FZYuanTi。
3. 切换到TTF Values选项卡
Weight Class改为500 Medium(MS带的字体这里均为400 Book,你不改也可以)。
4. 切换到Panose选项卡
Weight改为Medium。
5. 切换到TTF Names选项卡
在下面第二个选框内选择Chinese(PRC)zh_CN;
确认第一个选框内的内容为Styles(SubFamily),此时将下面输入框内的内容改为Italic;
改变第一个选框内的内容为Family,此时将下面输入框内的内容改为FZYuanTi;
改变第一个选框内的内容为Fullname,此时将下面输入框内的内容改为FZYuanTi Italic;
改变第一个选框内的内容为UniqueID,此时将下面输入框内的内容改为Founder:FZYuanTi Regular Italic;
然后将下面第二个选框内选择English(US)en_US(这里字体所支持的语言会用不同颜色显示,直观明了、方便选择);
做与Chinese(PRC)zh_CN类似的修改,即修改Styles(SubFamily)、Family、Fullname、UniqueID四部分。
6. 切换到General选项卡,在“Italic Angle:”后输入12
7. 点击OK关闭对话框后,如果弹出窗口提示不匹配,询问是否改变的话,点击Retain All,不做改变。
8. 选择Edit--Select--Select All,然后执行Element--Transform。
在新弹出的对话框中改变第二个选框内的内容为Skew,在将其后的数值改为12(数值可根据你的视觉需要任意输入,Windows自带的英文字体多为10、12、13、16。你可以先单独选中一个字体Skew一下试试看倾斜程度是否合适)。点击OK确定。
9. 在弹出的警告对话框中点击OK确定,如果弹出什么错误提示的话不用理会,一路回车。完成后会看到字体已变为斜体。接着按照刚才的警告执行Element--Add Extrema。
最后选择File--Generate Fonts,选择True Type,点击Save后生成字体,文件名可任意。我取为FZYuanTi_Italic.ttf。如果弹出窗口提示什么Em Size的话不用理会,点击yes确定。
制作粗斜体
1. 安装完成fontforge后,在终端里输入fontforge运行,在弹出的界面里载入刚才修改过的粗体(FZYuanTi_bold.ttf)。
2. 点击菜单栏的Element--Font Info;
Fontname改为FZYuanTi-BoldItalic_JT(这一步的修改将显示为PostScript名。右键--属性,Meta信息就可看到);
Family Name改为FZYuanTi;
Name For Humans改为FZYuanTi Bold Italic(这一步不改也可以,但为了统一我还是改了);
Weight改为Bold;
关键是Family Name应该和你将用的“粗体”统一,名字可以任意。我用FZYuanTi。
3. 切换到TTF Values选项卡
Weight Class改为700 Bold。
4. 切换到Panose选项卡
Weight改为Bold。
5. 切换到TTF Names选项卡
在下面第二个选框内选择Chinese(PRC)zh_CN;
确认第一个选框内的内容为Styles(SubFamily),此时将下面输入框内的内容改为Bold Italic;
改变第一个选框内的内容为Family,此时将下面输入框内的内容改为FZYuanTi;
改变第一个选框内的内容为Fullname,此时将下面输入框内的内容改为FZYuanTi Bold Italic;
改变第一个选框内的内容为UniqueID,此时将下面输入框内的内容改为Founder:FZYuanTi Bold Italic;
然后将下面第二个选框内选择English(US)en_US(这里字体所支持的语言会用不同颜色显示,直观明了、方便选择);
做与Chinese(PRC)zh_CN类似的修改,即修改Styles(SubFamily)、Family、Fullname、UniqueID四部分。
6. 切换到General选项卡,在“Italic Angle:”后输入12
7. 点击OK关闭对话框后,如果弹出窗口提示不匹配,询问是否改变的话,点击Retain All,不做改变。
8. 选择Edit--Select--Select All,然后执行Element--Transform。
在新弹出的对话框中改变第二个选框内的内容为Skew,在将其后的数值改为12(数值可根据你的视觉需要任意输入,Windows自带的英文字体多为10、12、13、16。你可以先单独选中一个字体Skew一下试试看倾斜程度是否合适)。点击OK确定。
9. 在弹出的警告对话框中点击OK确定,如果弹出什么错误提示的话不用理会,一路回车。完成后会看到字体已变为粗斜体。接着按照刚才的警告执行Element--Add Extrema。
最后选择File--Generate Fonts,选择True Type,点击Save后生成字体,文件名可任意。我取为FZYuanTi_bold_Italic.ttf。如果弹出窗口提示什么Em Size的话不用理会,点击yes确定。
安装字体
1. 在/usr/share/fonts目录下新建local目录,把刚才制作好的四个字体复制到/usr/share/fonts/local下。
2. 执行
# ttmkfdir -d /usr/share/fonts/local/ -o /usr/share/fonts/local/fonts.scale # cp /usr/share/fonts/local/fonts.scale /usr/share/fonts/local/fonts.dir
3. 更改/etc/X11/XF86Config(如果你用的X是xorg的话就应改修改xorg.conf),在字体字段加入一行
FontPath "/usr/share/fonts/local"
类似于
RgbPath "/usr/X11R6/lib/X11/rgb" FontPath "/usr/share/fonts/local" FontPath "unix/:7100"
4. 更改/etc/X11/fs/config,在查找字体字段增加一行
/usr/share/fonts/local,
类似于
catalogue = /usr/share/fonts/zh_CN/TrueType, /usr/share/fonts/local, /usr/X11R6/lib/X11/fonts/korean,
5. 编辑/etc/fonts/fonts.conf,在每个字体字段最前面加入
FZYuanTi
类似于
FZYuanTi Bitstream Vera Serif Times Times New Roman Nimbus Roman No9 L Luxi Serif Kochi Mincho AR PL SungtiL GB AR PL Mingti2L Big5 Baekmuk Batang serif
6. 编辑/etc/gtk-2.0/gtkrc(这一步是为在KDE下GTK2的程序设置字体。如果你用的是gnome就不用修改,否则字体设置会不起作用),加入
style "user-font" { font_name="FZYuanTi 12" } widget_class "*" style "user-font"
7. 注销或者执行init 3退出X。 8. 执行
# fc-cache -fv # /etc/init.d/xfs restart
9. startx或者init 5进入X后,在字体设置里选择FZYuanTi,大小为12即可。
使用替换字体
往往一款中文字体里的英文字符不是很好看,所以为达到更好的显示效果就会使用替换字体(显示中文时使用指定的中文字体,遇到英文时就使用另一款英文字体替换)。这也可以解决中文字体丢字符的问题(有时要显示的字符没有包含在这款中文字体里,此时就可以用包含这些字符的字体来替换)例如常用的Tahoma替换Simsun。
方正圆体的英文部分过于紧凑,不好看。我个人觉得Bitstream Vera Sans与其搭配很好(当然你也可以用Windows自带的Arial)。
1. 编辑/etc/fonts/fonts.conf,把Bitstream Vera Sans (Arial)加在FZYuanTi前,类似
Bitstream Vera Sans FZYuanTi Bitstream Vera Serif Times Times New Roman Nimbus Roman No9 L Luxi Serif Kochi Mincho AR PL SungtiL GB AR PL Mingti2L Big5 Baekmuk Batang serif
2. 编辑/etc/gtk-2.0/gtkrc(这一步是为在KDE下GTK2的程序设置字体。如果你用的是gnome就不用修改,否则字体设置会不起作用)。加入
style "user-font" { font_name="Bitstream Vera Sans,FZYuanTi 12" } widget_class "*" style "user-font"
3. 运行qtconfig,选择Fonts选项卡,在Font Substitution里选择Bitstream Vera SansFamily,然后在下面的Substitution Family里把FZYuanTi加入,保存退出。
4. 在字体设置里选择Bitstream Vera Sans。
进一步美化字体
替换字符
到以上为止,使用了替换字体后,显示效果应该已经可以算不错了。如果你觉得不够满意,不想用那么多字体的话,可以直接修改字体,用一款英文字体替换掉中文字体里的相同部分。
还以上面的方正圆体和Bitstream Vera Sans为例。用Bitstream Vera Sans替换掉与方正圆体里相同的字符,如果圆体里没有某个字符的话就直接用Bitstream Vera Sans补足(如果你觉得Bitstream Vera Sans太粗、字体间距大的话也可以用Windows的Arial甚至是Tahoma)。
注意字体的搭配,斜体配斜体,粗体配粗体。下面以粗斜体为例。
运行fontforge,分别打开/usr/share/fonts/bitstream-vera/VeraBI.ttf(Bitstream Vera Sans的粗斜体)和刚才做好的FZYuanTi_bold_Italic.ttf;
在Bitstream Vera Sans的窗口中,选择View--Compacted View,点击菜单栏的Element--Font Info--Encoding可以看到总共有268个字符,不算多,慢慢来还可以接受。如果太多的话,我劝你还是放弃吧,除非你想锻炼耐心;
点击菜单栏的Element--Font Info--Encoded View,把浏览方式改回去(生成字体以前一定要改回);
切换到方正圆体的Element--Font Info--General选项卡把Em Size改为2048,即与Bitstream Vera Sans一样(两款字体的Em Size一定要一样,否则最后生成的字体会大小不一)。点击OK后,等待转换完成;
然后在方正圆体里用鼠标选中与Bitstream Vera Sans重复的字符(可以拖动,多选),右键,Clear清除,再用复制、粘贴把Bitstream Vera Sans的字符都贴过来即可(这一点说起来最轻松,但是做起来却最浪费时间)。有的字符在方正圆体没有包括,直接贴过来就行了。可以用View--Next Defined Char直接转到下一个字符,否则找起来很麻烦;
可能是改的字体的问题,别人复制都没问题,但是在我改的这两个字体里,直接复制后部分字符会变形,所以使用了合并功能(你做字体的时候如果不能复制粘贴的话,可以试试合并);
把方正圆体里与Bitstream Vera Sans重复的字符都清除后,选择Element--Merge Fonts,在Merge Fonts窗口中选择Bitstream Vera Sans。完成后,File--Generate Fonts生成字体即可;
合并字体时,只会合并原字体(这里是方正圆体)里没有包含的字符,而不会覆盖已有的字符,所以要先清除方正圆体里与Bitstream Vera Sans重复的字符后再合并;
当然你也可以用Bitstream Vera Sans做基础把方正圆体合并进来,但这时你要修改的字体信息就多了,我不建议这样做。
此时就不用修改配置文件替换字体了,都使用FZYuanTi就行了。
导入点阵(位图)字体
有人可能喜欢用Simsun,觉得小字体时中文清晰锐利。那是因为Simsun包含了3个点阵字体。我们把它提取出来。
运行fontforge,在装入位图字体对话框中Select All装入。File--Generate Fonts,在两个下拉列表里分别选择No Outline Font和BDF即可生成bdf格式的位图字体。
得到点阵字体后,就可以把他们加入自己想要的字体里。用fontforge打开任一款矢量字体(ttf),File--Import,格式选BDF。导入后File--Generate Fonts,分别选择True Type和In TTF生成后就是包含点阵字的ttf。当系统显示时,如果大小与内嵌的点阵字相同的话会优先使用点阵字体显示。
另:Windows里除了Simsun以外Mingliu也包含了6个点阵字体,还有gb18030的Simsun。
Starsuite 7.0的soui.ttf里能发现11~21pixel的点阵字。
unisun里包含了6个点阵。其中Simsun的点阵没有latin1部分,所以在显示时会使用ttf中的英文,造成效果不好。
但有些字体包含的点阵信息是fontforge读不出的,各位试试东文宋体就知道了。9~12号格外清晰锐利,无论AA与否。而且fontforge打开后直接生成字体会小好几M。
在某些方正宋体18030和方正黑体18030也含点阵但是一样读不出,用gnome-font-viewer就很明显能看到了,特别是方正黑体。
文笔有限再加上才疏学浅,多有不当之处,还希望大家多多指正。包括错别字。
作者拾遗
方正细圆+方正准圆是一对比较合适的字体。如果你觉得字体有些发虚模糊的话,可以用方正准圆+方正粗圆搭配。有一点要说一下,圆体在大字体时使用AA会很好看,但是在小字体(例如经常使用的9、10号字)时效果就不怎么好了。我觉得准圆(粗圆)比细圆(准圆)粗的不够,显示粗体的时候,只感觉到黑感觉不到粗。
细圆+粗圆、方正黑体+方正大黑、东文黑体+东文粗黑、华文宋体+华文中宋搭配也都不错。
至今没找到能做宋体粗体的字体,希望能有人给出好建议;如有好的字体搭配建议也尽管共享出来。多谢。