问题
在Ctex里,使用hyperref
宏包设定输出pdf文件的书签目录时,发现中文产生了乱码。虽然已经启用了CJKbookmarks=true
的选项。
原因
因为在Ctex中,中文环境默认的编码是GBK编码,而我的tex文件是UTF8的编码
\documentclass[UTF8]{ctexrep} %使用了UTF8编码
\usepackage{graphicx,floatrow,picinpar,array,amsmath}
\usepackage[
CJKbookmarks=true,bookmarksnumbered,bookmarksopen,
pdftitle={Normal Distribution},pdfauthor=Azur,
pdfstartview=FitH,colorlinks=true,linkcolor=black,pdftex
]{hyperref}
.....
解决办法
有如下几个解决办法
改编码
一个解决办法是,将文件的编码从UTF-8改为GBK编码。
修改out文件
第一次编译tex文件时,会生成后缀为out
的临时文件。这个文件中包含的就是目录信息。
第一次编译完只是输出并生成了目录信息,尚未完成目录的链接,因此此时打开pdf文件是看不到目录信息的,这就是为什么需要编译第二遍。
因此,我们可以在第一次编译完得到out
文件后,直接修改out
文件中的内容,然后再次编译。
不过涉及到编码的转换,而且out
中的目录部分中对汉字和使用\CJkchar
命令描述的汉字有不同的编码格式。例如,有人推荐使用gbk2uni这个程序对out
文件进行转码,如在命令行中(Windows系统)可以按照如下所示进行编译:
> pdflatex foo.tex
> gbk2uni foo.toc
> pdflatex foo.tex
(不过我试了一下,gbk2uni仍会报告有部分字符无法转换 :-()