LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: debianl

tetex中文环境完美解决UTF-8编码,现放出ebuild

[复制链接]
 楼主| 发表于 2006-9-10 14:09:58 | 显示全部楼层
Post by Lolita
编译失败了。。。


从你的错误提示来看你是缺少了字体,应该是bitstream字体,这个你可以用以下步骤来给添加字体:

cd ~/texmf
ln -s <你的字体目录>/xxx.ttf fonts/truetype/
cvtfont.sh fonts/truetype/xxx.ttf 字体名 字体名

不过我昨晚又修改了不少东西,现在重新放出了tarball和ebuild,0.2版本。。哈哈

你重新做一下emerge吧,另外instfonts会删除掉你的~/texmf和~/.texmf*。
在使用instfonts.sh之前请注意配置好/etc/font_maps.dat,第一列只需要填写字体文件名即可不要带路径,instfonts.sh需要带一个字体目录路径的参数,这个字体目录应存有/etc/font_maps.dat中第一列中所列出的字体。

好运哦!
回复 支持 反对

使用道具 举报

 楼主| 发表于 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
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-10 14:15:58 | 显示全部楼层
请大家重新下载上面的ebuild,重新emerge,对于已经配置过的兄弟如果不想重新漫长地配置,可参考我上面的帖子自己手动修改cid-x.map,当然重新instfonts.sh配置更好啦!^_^
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-10 14:22:26 | 显示全部楼层
Post by Lolita
怎么用instfonts.sh生成的~/texmf只有140K大小


看错误提示似乎你的主目录空间不够了?一般来说如果你产生的字体较多的话~/texmf会很大哦,我机器上的~/texmf大概有五六百M。。。

我一般是将我tetex要用的字体专门放我一个数据分区的某目录中如/data/fonts,然后instfonts.sh /data/fonts时它只是在我的~/texmf/fonts/truetype目录中建立这些文件的symlink,你可以看一下我写的instfonts.sh,很简单的shell:cool:
回复 支持 反对

使用道具 举报

发表于 2006-9-10 16:55:13 | 显示全部楼层
无限辛苦了! 我再试试!
再次感谢无限的努力!
回复 支持 反对

使用道具 举报

发表于 2006-9-10 17:25:31 | 显示全部楼层
~/texmf $ cvtfont.sh fonts/truetype/FZGBK_zhongqian.ttf zhongqian zhongqian
/usr/bin/ttf2pt1
/usr/bin/t1asm
/usr/bin/extconv
***************************************************************************
* Please confirm that current working directory is EMPTY except scripts   *
* and HAS ENOUGH SPACE to contain so many intermediate files.             *
* If it is not empty, this script may DAMAGE INNOCENT FILES!!!            *
***************************************************************************
Go ahead?[n]


我单独用cvtfont.sh时会问我是否 go ahead。 而用instfonts.sh时则没有提示,直接刷刷刷过去了,导致根本没有生成字体文件。  不是磁盘空间问题,还有好几G空闲,字体才几个。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-10 17:46:59 | 显示全部楼层
Post by Lolita
我单独用cvtfont.sh时会问我是否 go ahead。 而用instfonts.sh时则没有提示,直接刷刷刷过去了,导致根本没有生成字体文件。  不是磁盘空间问题,还有好几G空闲,字体才几个。


哦,看来你的cvtfont.sh还是没修改之前的,你用最新的ebuild重新emerge一下,再确认一下最开始看我日志中是不是还放了一个老版本的cvtfont.sh在你的/usr/local/bin下,新版本的cvtfont.sh是不会提示的。。。
回复 支持 反对

使用道具 举报

发表于 2006-9-10 17:50:11 | 显示全部楼层
哈哈,我也是刚才发现是老的 cvtfont.sh 搞鬼。 bash的history使得新的cvtfont.sh没被使用。
现在可以安装字体了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-10 17:56:08 | 显示全部楼层
Post by Lolita
哈哈,我也是刚才发现是老的 cvtfont.sh 搞鬼。 bash的history使得新的cvtfont.sh没被使用。
现在可以安装字体了

如果你单独用cvtfont.sh安装字体的话,完了之后记得mktexlsr && updmap --syncwithtrees,并且如果你现在的~/texmf是用原来的0.1版本配置的话还要记得手动修改一下cid-x.map文件,否则无法做到内嵌TrueType字体。

不过实话说pdf中要想中文字体显示的效果最佳,最好的办法就是采用Adobe的官方OpenType字体(Adobe 公司负责 CIDFont 的 Ken Lunde 先生提到:The hinting in AdobeSongStd-Light is very high quality, which would explain why the results are better.),Adobe 提供的 AdobeSongStd-Light 就是一种 OpenType 格式的 CIDFont,生成的 pdf 字体显示效果目前应该是最好的。不过问题是dvipdfmx 生成pdf时要求有 subfont 的 tex font metrics 信息,但 OpenType 哪来的 tfm?最近忙于项目再没时间研究了,以后有时间了再研究如何采用Adobe官方OpenType字体。

话说回来现在内嵌TrueType字体感觉很不错了,嘿嘿!
回复 支持 反对

使用道具 举报

发表于 2006-9-10 18:08:56 | 显示全部楼层
Post by debianl
如果你单独用cvtfont.sh安装字体的话,完了之后记得mktexlsr && updmap --syncwithtrees,并且如果你现在的~/texmf是用原来的0.1版本配置的话还要记得手动修改一下cid-x.map文件,否则无法做到内嵌TrueType字体。

不过实话说pdf中要想中文字体显示的效果最佳,最好的办法就是采用Adobe的官方OpenType字体(Adobe 公司负责 CIDFont 的 Ken Lunde 先生提到:The hinting in AdobeSongStd-Light is very high quality, which would explain why the results are better.),Adobe 提供的 AdobeSongStd-Light 就是一种 OpenType 格式的 CIDFont,生成的 pdf 字体显示效果目前应该是最好的。不过问题是dvipdfmx 生成pdf时要求有 subfont 的 tex font metrics 信息,但 OpenType 哪来的 tfm?最近忙于项目再没时间研究了,以后有时间了再研究如何采用Adobe官方OpenType字体。

话说回来现在内嵌TrueType字体感觉很不错了,嘿嘿!


我的问题就是那个老cvtfont.sh害了一下:(

无限的脚本完全没有问题,现在生成的pdf堪称完美典范了:显示非常pp, 内嵌字体复制也没问题。 ~~:% :%

现在做文档又更省心了。。。 赞超越无限!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表