这几日在学习ConTeXt,拜读了 LiYanrui 同学的若干文章之后,开始想着尝试点东西。
因为以前一直用MS Word,所以想尝试把一些文档从Word转到ConTeXt,遇到的第一件事情就是字体。虽然可以直接用LiYanrui的zhfonts模块,但是Word里有一些样式,比如标题设置为黑体初号,宋体加粗什么的,还是需要一个像 \hei \bfsong这样的命令,zhfonts貌似并没有直接提供这样的命令,因为他站在一个更高的层次来看问题^_^。
想到这里我觉得应该有这么一个宏 \ziti[黑体][小初],第一个参数是Word中的字体,第二个参数是Word中的字号,这样可以使人快速从Word转到ConTeXt。为了达到这目的,应编写一个程序自动读Windows中的所有字体,生成一个tex文件,使得\ziti[][]可以用到Word中的所有字体设置。
查了一些资料,就在我准备动手编程时,我发现一个问题,Windows的字体目录中的宋体 C:\Windows\Fonts\simsun.ttc,是Regular的,而且没有发现其他宋体的粗体类型,再看zhfonts中的设置,bold型字体被设置黑体,我也记得LiYanrui在博客上说字体加粗就变另一个字体了,但是Word为什么能做到呢? google之,发现Word的粗宋体是假的(参见http://lists.fedoraproject.org/pipermail/chinese/2011-January/005028.html),是通过软件插值出来的,ctex上的一些帖子也说了这样插值出来的字体可能会有毛刺,不光滑,如果需要真的宋体,可以下载一些收费的字体,如华文粗宋。原来是这样!被Word骗了这么久!
上面的发现,让我放弃了为Word编写那个\ziti宏的想法,还是按照LiYanrui同学的博客自己动手吧~,不过查了一些关键的信息,记在下面,以便其他同志有同样想法,或者我以后又想了~
Windows字体名 -> 字体文件
所有Windows中安装的字体都在C:\Windows\Fonts中,这个安装字体的信息,也被映射到注册表中:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts,程序员可以在这里找到Word中的字体名对应的字体文件名
顺便提一句,在Windows下不需要为ConTeXt设置OSFONTDIR环境变量,参见luatools.lua文件,里面直接给定了C:\Windows\Fonts
字体文件 -> ConTeXt字体名
Word里的字体名是有中文的,但是 mtxrun --script fonts --list pattern=* --all (参见LiYanrui的博客)列表出来的字体名字里是没有中文名的。所有我们还需要从ttf或ttc里读出实际的字体名。ttf/ttc的格式也比较复杂,codeproject上有现成的代码,参见 How to Use a Font Without Installing it ,这位大哥提供了一个TTF和TTC的类,还提供了示例代码,很好使!
另外,猜测了下,ConTeXt最后生成的字体名,是实际字体名中去掉非字母,并全部整成小写的结果。