LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2651|回复: 8

CJK-LaTeX:用hyperref宏包产生PDF书签

[复制链接]
发表于 2009-10-31 14:48:59 | 显示全部楼层 |阅读模式
问题的提出:
根据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。
  1. $ tar zxvf cjklatex-bookmark.tar.gz
  2. $ cd example
  3. $ su
  4. # installpkg cjkbookmark-0.90-i486-1lch.tgz
  5. # exit
  6. $ latex gbkbkmark
  7. $ gbkbm gbkbkmark
  8. $ latex gbkbkmark
  9. $ dvipdfm gbkbkmark
复制代码
如果使用pdflatex直接产生PDF文档,那么需要将gbkbkmark.tex中hyperref的PDF驱动程序由dvipdfm 改为pdftex,编译过程如下
  1. $ pdflatex gbkbkmark
  2. $ gbkbm gbkbkmark
  3. $ pdflatex gbkbkmark
复制代码
上面运行过程中的gbkbm gbkbkmark命令的作用是转换书签的编码,其他过程与LaTeX编译过程的标准步骤相同。

utf8bm的作用是将UTF8编码的书签转换成UTF-16BE编码,用法与gbkbm相同。

注意: xpdf不支持UTF格式的书签,因而不能正确显示。需要使用acroread或者LANG=zh_CN.utf8 kpdf阅读。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2009-10-31 15:43:19 | 显示全部楼层
我在13都是用的TEXLIVE,感觉生成CJK字体太麻烦
回复 支持 反对

使用道具 举报

发表于 2009-10-31 16:53:37 | 显示全部楼层
精品贴丫!!!!!
回复 支持 反对

使用道具 举报

发表于 2009-11-6 23:07:31 | 显示全部楼层
这种做法在 texlive-2009 里还适用么?这里有 slackbuild:

http://rlworkman.net/texlive-2009/

(不过这个是“内测版”,并不完全保证质量,而且链接可能过一段时间就失效了…… 对这个 slackbuild 有什么问题可以给作者或者我发邮件 ;) )
回复 支持 反对

使用道具 举报

发表于 2009-11-6 23:09:37 | 显示全部楼层
希望SLK快点把Xetex加进来
回复 支持 反对

使用道具 举报

发表于 2009-11-7 01:52:11 | 显示全部楼层
texlive-2009 大概还要5天就会发布正式版了。大概是11月10号左右。
回复 支持 反对

使用道具 举报

发表于 2009-11-7 08:32:02 | 显示全部楼层
单独的 xetex 可能用处不大,毕竟还是用 xelatex 方便些…… TeXLive 不大可能进入官方的 slackware 了(因为它实在是太大了……),不过还是会进入 SBo 的~

没想到 linuxsir 上还有这么多用 tex 的 slakcer ;)
回复 支持 反对

使用道具 举报

发表于 2009-11-7 11:59:45 | 显示全部楼层
Texlive确实大,但面广
要是在秀teTex之上加上XeTeX,可以解决中文字体的问题,再加上一些中文宏包,处理文档应该不成问题了,其实Tetex的宏包也蛮多的,但不及Texlive的多。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-11 18:49:07 | 显示全部楼层
Post by grissiom;2043283
这种做法在 texlive-2009 里还适用么?


对这个提问不理解,因为这是采用Hyperref宏包产生书签带来的问题,与采用何种版本的Latex无关,除非Hyperref改进了PDF生成机制。
回复 支持 反对

使用道具 举报

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

本版积分规则

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