|
|

楼主 |
发表于 2006-9-10 14:12:42
|
显示全部楼层
昨晚放出的ebuild和包已经完美解决了嵌入TrueType字体的问题,但昨晚回去又试了一下发现缺乏对斜体的支持,下面贴出对支持斜体的研究结果:http://lidaibin.livejournal.com/7980.html
关于cid-x.map文件
在配置tetex中文环境的过程中,经历了无数次痛苦和失败,终于有了成果,解决了网上搜索了N久也没搜索到的关于UTF-8编码文件通过dvipdfmx生成的pdf中文复制问题,并且同时做到了内嵌TrueType字体,不再采用由ttf2pt1转换成的Type1字体,杜绝了pdf中中文看起来效果欠佳的情况。
似乎一切都很好,迫不及待地做好了脚本,并制作了一个方便gentooer使用的ebuild文件扔到了linuxsir.cn上,着实兴奋了很久。晚上回家尝试了一下中文粗斜体之后傻眼了,原来内嵌Type1时粗斜体没什么问题,根本不需要什么刻意地配置和处理,可在我觉得大功告成的时候内嵌TrueType后斜体问题又出现了。。。
不得不再次研究dvipdfmx生成pdf文件的过程,终于还是找到了问题的关键,cid-x.map的配置至关重要。
cid-x.map文件的格式如下:
TFMNAME[@SFDNAME@] ENCNAME [:INDEX:][!]FONTNAME[/CSI][,VARIANT] [OPTIONS]
1) TFMNAME[@SFDNAME@]:TFMNAME指的是去掉.tfm文件扩展名的字串,可以看一下~/texmf的目录结构,~/texmf/fonts/tfm/local/就是我们生成的tfm文件,该目录下的子目录是字体名称,字体目录下(如~/texmf/fonts/tfm/local/song就是我机器tetex的宋体--由SimSun字体生成)的文件即tfm文件,可以看到其中有songXX.tfm和songslXX.tfm两类文件,其中songslXX.tfm是支持斜体的文件;SFDNAME其实就是subfont喽,使用UTF-8编码当然就是Unicode了,sfd文件即latex-unicode-font-utils中的Unicode.sfd,采用GBK编码的话可使用UGBK.sfd。
2) ENCNAME:也就是CMap资源名字,如果采用GBK编码就要用到UniGB-UCS2-H、UniGB-UCS2-V、UniGB-UTF16-H、UniGB-UTF16-V、Adobe-GB1-UCS2这几个CMap资源文件,它们用于进行编码转换,这些文件可从acroread的资源目录里找到。当我们采用unicode编码的时候也就不需要进行编码转换了,该字段即为unicode。
3) [:INDEX:][!]FONTNAME[/CSI][,VARIANT]:字体名称不用说了,就是ttf文件去掉扩展名的字串如simsun。INDEX主要用于不止一种字体的TrueType(如simsun.ttf就包括宋体和新宋体),用于指定字体序号。!指定了要不要内嵌字体,如果你想减小pdf文档的大小可以不嵌入字体,不过我相信你不能保证使用你pdf机器的用户机器上有你指定的字体。如果在ENCNAME中指定了CMap资源需要进行编码转换的时候TrueType字体就需要/CSI选项了。VARIANT指的是格式变量(Bold, Italic, BoldItalic)。
4) [OPTIONS]:对于内嵌TrueType字体我们可使用-s .167来达到斜体效果。
下面是我机器上的cid-x.map部分配置:
song@Unicode@ unicode simsun
songsl@Unicode@ unicode simsun -s .167
hei@Unicode@ unicode simhei
heisl@Unicode@ unicode simhei -s .167 |
|