|
问题的提出:
根据PDF文档参考手册,PDF的书签只能用PDFDocEncoding或者UTF-16BE来进行编码。在用LaTeX的hyperref宏包生成PDF文档的过程中,hyperref使用源文档的编码生成书签,结果导致在PDF阅读器中书签不能正确显示。
解决方法:
有两个解决办法,一个是采用\texorpdfstring{}{}命令进行两种不同的编码,一个针对书签,一个针对文本,这种方法使用起来比较繁琐。另一种是让hyperref按照文档编码产生书签,然后将书签编码转换成UTF-16BE编码。用LaTeX生成的书签文件以.out做为扩展名,因此只需转换.out文件即可。在网上找到一个用perl写成的编码转换程序,然后我又写了一个脚本以简化生成书签的过程。
两个脚本:
上传的软件包中包含两个脚本,一个是gbkbm,另一个是utf8bm,分别用来将GBK和UTF8编码的书签转换成UTD-16BE,用法如下:下载上传文件,解压缩到某个目录中,内含两个测试文件gbkbkmark.tex 和utf8bkmark.tex,以及Slackware安装包cjkbookmark-0.90-i486-1lch.tgz。- $ tar zxvf cjklatex-bookmark.tar.gz
- $ cd example
- $ su
- # installpkg cjkbookmark-0.90-i486-1lch.tgz
- # exit
- $ latex gbkbkmark
- $ gbkbm gbkbkmark
- $ latex gbkbkmark
- $ dvipdfm gbkbkmark
复制代码 如果使用pdflatex直接产生PDF文档,那么需要将gbkbkmark.tex中hyperref的PDF驱动程序由dvipdfm 改为pdftex,编译过程如下- $ pdflatex gbkbkmark
- $ gbkbm gbkbkmark
- $ pdflatex gbkbkmark
复制代码 上面运行过程中的gbkbm gbkbkmark命令的作用是转换书签的编码,其他过程与LaTeX编译过程的标准步骤相同。
utf8bm的作用是将UTF8编码的书签转换成UTF-16BE编码,用法与gbkbm相同。
注意: xpdf不支持UTF格式的书签,因而不能正确显示。需要使用acroread或者LANG=zh_CN.utf8 kpdf阅读。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|