[size=13.1428575515747px]LaTeX 的 hyperref 宏包能够在 PDF 文件里生成 PDF 书签,然而「书签乱码」是困扰很多 LaTeX 使用者的麻烦问题。
[size=13.1428575515747px]早年李树钧和张林波老师共同开发了名为 gbk2uni 的小工具,用以将 filename.out 中的 GBK 编码的字符转换成八进制数据;刘海洋和李清在 ctex 宏包 / 文档类对此做了处理,使得 ctex宏包 / 文档类能够正确处理大部分的情况;后来李清编写了 xCJK2uni 宏包,使得在 pdfLaTeX 编译方式下用 CJK 的 GBK 编码模式也能正确输出 PDF 书签,而不必借用额外的工具。
[size=13.1428575515747px]这里对全部正确的方式做一个总结。
推荐的方式[size=13.1428575515747px]最好的办法是将中文支持和版式处理都交给 ctex 宏包 / 文档类,只需要开启 hyperref 选项即可。
[size=13.1428575515747px]适用情况
- UTF-8 + XeLaTeX(目前[size=13.1428575515747px]最最最最最最最最推荐的方式,看到它请星星眼)
- UTF-8 + pdfLaTeX
- UTF-8 + LaTeX - DVIPDFMx
[color=rgb(170, 170, 170) !important]1 [color=rgb(170, 170, 170) !important]2 [color=rgb(170, 170, 170) !important]3 [color=rgb(170, 170, 170) !important]4 [color=rgb(170, 170, 170) !important]5 | \documentclass[color=rgb(51, 51, 51) !important][hyperref[color=rgb(51, 51, 51) !important],[color=rgb(0, 111, 224) !important] UTF8[color=rgb(51, 51, 51) !important][color=rgb(51, 51, 51) !important]{ctexart[color=rgb(51, 51, 51) !important]} \begin[color=rgb(51, 51, 51) !important]{document[color=rgb(51, 51, 51) !important]} \section[color=rgb(51, 51, 51) !important]{中文书签不会乱码[color=rgb(51, 51, 51) !important]} UTF-8[color=rgb(0, 111, 224) !important] 编码,Xe\LaTeX[color=rgb(51, 51, 51) !important]{[color=rgb(51, 51, 51) !important]}/pdf\LaTeX[color=rgb(51, 51, 51) !important]{[color=rgb(51, 51, 51) !important]}/\LaTeX[color=rgb(51, 51, 51) !important]{[color=rgb(51, 51, 51) !important]}[color=rgb(0, 111, 224) !important] -[color=rgb(0, 111, 224) !important] DVIPDFMx[color=rgb(0, 111, 224) !important] 编译。 \end[color=rgb(51, 51, 51) !important]{document[color=rgb(51, 51, 51) !important]} |
[color=rgb(170, 170, 170) !important]1 [color=rgb(170, 170, 170) !important]2 [color=rgb(170, 170, 170) !important]3 [color=rgb(170, 170, 170) !important]4 [color=rgb(170, 170, 170) !important]5 | \documentclass[color=rgb(51, 51, 51) !important][hyperref[color=rgb(51, 51, 51) !important],[color=rgb(0, 111, 224) !important] UTF8[color=rgb(51, 51, 51) !important][color=rgb(51, 51, 51) !important]{ctexart[color=rgb(51, 51, 51) !important]} \begin[color=rgb(51, 51, 51) !important]{document[color=rgb(51, 51, 51) !important]} \section[color=rgb(51, 51, 51) !important]{中文书签不会乱码[color=rgb(51, 51, 51) !important]} UTF-8[color=rgb(0, 111, 224) !important] 编码,Xe\LaTeX[color=rgb(51, 51, 51) !important]{[color=rgb(51, 51, 51) !important]}/pdf\LaTeX[color=rgb(51, 51, 51) !important]{[color=rgb(51, 51, 51) !important]}/\LaTeX[color=rgb(51, 51, 51) !important]{[color=rgb(51, 51, 51) !important]}[color=rgb(0, 111, 224) !important] -[color=rgb(0, 111, 224) !important] DVIPDFMx[color=rgb(0, 111, 224) !important] 编译。 \end[color=rgb(51, 51, 51) !important]{document[color=rgb(51, 51, 51) !important]} |
[size=13.1428575515747px]适用情况(除非必要,不要使用 GBK 编码)
- GBK + LaTeX - DVIPDFMx
- GBK + pdfLaTeX (ctex 宏包 2.x 版本支持,当前的 1.x 版本暂不支持)
[color=rgb(170, 170, 170) !important]1 [color=rgb(170, 170, 170) !important]2 [color=rgb(170, 170, 170) !important]3 [color=rgb(170, 170, 170) !important]4 [color=rgb(170, 170, 170) !important]5 | \documentclass[color=rgb(51, 51, 51) !important][hyperref[color=rgb(51, 51, 51) !important],[color=rgb(0, 111, 224) !important] GBK[color=rgb(51, 51, 51) !important][color=rgb(51, 51, 51) !important]{ctexart[color=rgb(51, 51, 51) !important]} \begin[color=rgb(51, 51, 51) !important]{document[color=rgb(51, 51, 51) !important]} \section[color=rgb(51, 51, 51) !important]{中文书签不会乱码[color=rgb(51, 51, 51) !important]} GBK[color=rgb(0, 111, 224) !important] 编码,pdf\LaTeX[color=rgb(51, 51, 51) !important]{[color=rgb(51, 51, 51) !important]}/\LaTeX[color=rgb(51, 51, 51) !important]{[color=rgb(51, 51, 51) !important]}[color=rgb(0, 111, 224) !important] -[color=rgb(0, 111, 224) !important] DVIPDFMx[color=rgb(0, 111, 224) !important] 编译。 \end[color=rgb(51, 51, 51) !important]{document[color=rgb(51, 51, 51) !important]} |
[color=rgb(170, 170, 170) !important]1 [color=rgb(170, 170, 170) !important]2 [color=rgb(170, 170, 170) !important]3 [color=rgb(170, 170, 170) !important]4 [color=rgb(170, 170, 170) !important]5 | \documentclass[color=rgb(51, 51, 51) !important][hyperref[color=rgb(51, 51, 51) !important],[color=rgb(0, 111, 224) !important] GBK[color=rgb(51, 51, 51) !important][color=rgb(51, 51, 51) !important]{ctexart[color=rgb(51, 51, 51) !important]} \begin[color=rgb(51, 51, 51) !important]{document[color=rgb(51, 51, 51) !important]} \section[color=rgb(51, 51, 51) !important]{中文书签不会乱码[color=rgb(51, 51, 51) !important]} GBK[color=rgb(0, 111, 224) !important] 编码,pdf\LaTeX[color=rgb(51, 51, 51) !important]{[color=rgb(51, 51, 51) !important]}/\LaTeX[color=rgb(51, 51, 51) !important]{[color=rgb(51, 51, 51) !important]}[color=rgb(0, 111, 224) !important] -[color=rgb(0, 111, 224) !important] DVIPDFMx[color=rgb(0, 111, 224) !important] 编译。 \end[color=rgb(51, 51, 51) !important]{document[color=rgb(51, 51, 51) !important]} |
折腾星人的方式
[size=13.1428575515747px]如果不想使用 ctex 宏包 / 文档类,也可以选择自己写代码进行中文支持。这时候需要做额外的代码配置,保证 PDF 书签不会乱码。
[size=13.1428575515747px]适用情况
- UTF-8 + XeLaTeX
[color=rgb(170, 170, 170) !important]1 [color=rgb(170, 170, 170) !important]2 [color=rgb(170, 170, 170) !important]3 [color=rgb(170, 170, 170) !important]4 [color=rgb(170, 170, 170) !important]5 [color=rgb(170, 170, 170) !important]6 [color=rgb(170, 170, 170) !important]7 [color=rgb(170, 170, 170) !important]8 | \documentclass[color=rgb(51, 51, 51) !important]{article[color=rgb(51, 51, 51) !important]} \usepackage[color=rgb(51, 51, 51) !important]{xeCJK[color=rgb(51, 51, 51) !important]} \usepackage[color=rgb(51, 51, 51) !important]{hyperref[color=rgb(51, 51, 51) !important]} \setCJKmainfont[color=rgb(51, 51, 51) !important]{SimSun[color=rgb(51, 51, 51) !important]} \begin[color=rgb(51, 51, 51) !important]{document[color=rgb(51, 51, 51) !important]} \section[color=rgb(51, 51, 51) !important]{中文书签不会乱码[color=rgb(51, 51, 51) !important]} UTF-8[color=rgb(0, 111, 224) !important] 编码,Xe\LaTeX[color=rgb(51, 51, 51) !important]{[color=rgb(51, 51, 51) !important]}[color=rgb(0, 111, 224) !important] 编译。 \end[color=rgb(51, 51, 51) !important]{document[color=rgb(51, 51, 51) !important]} |
[size=13.1428575515747px]适用情况
- UTF-8 + pdfLaTeX
[color=rgb(170, 170, 170) !important]1 [color=rgb(170, 170, 170) !important]2 [color=rgb(170, 170, 170) !important]3 [color=rgb(170, 170, 170) !important]4 [color=rgb(170, 170, 170) !important]5 [color=rgb(170, 170, 170) !important]6 [color=rgb(170, 170, 170) !important]7 [color=rgb(170, 170, 170) !important]8 [color=rgb(170, 170, 170) !important]9 [color=rgb(170, 170, 170) !important]10 [color=rgb(170, 170, 170) !important]11 [color=rgb(170, 170, 170) !important]12 | \documentclass[color=rgb(51, 51, 51) !important]{article[color=rgb(51, 51, 51) !important]} \usepackage[color=rgb(51, 51, 51) !important]{CJKutf8[color=rgb(51, 51, 51) !important]} \usepackage[color=rgb(51, 51, 51) !important]{hyperref[color=rgb(51, 51, 51) !important]} \hypersetup[color=rgb(51, 51, 51) !important]{unicode[color=rgb(51, 51, 51) !important]} \AtBeginShipoutFirst[color=rgb(51, 51, 51) !important]{\input[color=rgb(51, 51, 51) !important]{zhwinfonts[color=rgb(51, 51, 51) !important].tex[color=rgb(51, 51, 51) !important]}[color=rgb(51, 51, 51) !important]} \begin[color=rgb(51, 51, 51) !important]{document[color=rgb(51, 51, 51) !important]} \begin[color=rgb(51, 51, 51) !important]{CJK*[color=rgb(51, 51, 51) !important]}[color=rgb(51, 51, 51) !important]{UTF8[color=rgb(51, 51, 51) !important]}[color=rgb(51, 51, 51) !important]{song[color=rgb(51, 51, 51) !important]} \section[color=rgb(51, 51, 51) !important]{中文书签不会乱码[color=rgb(51, 51, 51) !important]} UTF-8[color=rgb(51, 51, 51) !important]~编码,pdf\LaTeX[color=rgb(51, 51, 51) !important]{[color=rgb(51, 51, 51) !important]}[color=rgb(51, 51, 51) !important]~编译。 \clearpage \end[color=rgb(51, 51, 51) !important]{CJK*[color=rgb(51, 51, 51) !important]} \end[color=rgb(51, 51, 51) !important]{document[color=rgb(51, 51, 51) !important]} |
[size=13.1428575515747px]适用情况
- UTF-8 + LaTeX - DVIPDFMx
[color=rgb(170, 170, 170) !important]1 [color=rgb(170, 170, 170) !important]2 [color=rgb(170, 170, 170) !important]3 [color=rgb(170, 170, 170) !important]4 [color=rgb(170, 170, 170) !important]5 [color=rgb(170, 170, 170) !important]6 [color=rgb(170, 170, 170) !important]7 [color=rgb(170, 170, 170) !important]8 [color=rgb(170, 170, 170) !important]9 [color=rgb(170, 170, 170) !important]10 [color=rgb(170, 170, 170) !important]11 [color=rgb(170, 170, 170) !important]12 | \documentclass[color=rgb(51, 51, 51) !important]{article[color=rgb(51, 51, 51) !important]} \usepackage[color=rgb(51, 51, 51) !important]{CJKutf8[color=rgb(51, 51, 51) !important]} \usepackage[color=rgb(51, 51, 51) !important][dvipdfmx[color=rgb(51, 51, 51) !important][color=rgb(51, 51, 51) !important]{hyperref[color=rgb(51, 51, 51) !important]} \hypersetup[color=rgb(51, 51, 51) !important]{unicode[color=rgb(51, 51, 51) !important]} \AtBeginShipoutFirst[color=rgb(51, 51, 51) !important]{\input[color=rgb(51, 51, 51) !important]{zhwinfonts[color=rgb(51, 51, 51) !important].tex[color=rgb(51, 51, 51) !important]}[color=rgb(51, 51, 51) !important]} \begin[color=rgb(51, 51, 51) !important]{document[color=rgb(51, 51, 51) !important]} \begin[color=rgb(51, 51, 51) !important]{CJK*[color=rgb(51, 51, 51) !important]}[color=rgb(51, 51, 51) !important]{UTF8[color=rgb(51, 51, 51) !important]}[color=rgb(51, 51, 51) !important]{song[color=rgb(51, 51, 51) !important]} \section[color=rgb(51, 51, 51) !important]{中文书签不会乱码[color=rgb(51, 51, 51) !important]} UTF-8[color=rgb(51, 51, 51) !important]~编码,\LaTeX[color=rgb(51, 51, 51) !important]{[color=rgb(51, 51, 51) !important]}[color=rgb(0, 111, 224) !important] -[color=rgb(0, 111, 224) !important] DVIPDFMx[color=rgb(51, 51, 51) !important]~编译。 \clearpage \end[color=rgb(51, 51, 51) !important]{CJK*[color=rgb(51, 51, 51) !important]} \end[color=rgb(51, 51, 51) !important]{document[color=rgb(51, 51, 51) !important]} |
[size=13.1428575515747px]适用情况
- GBK + pdfLaTeX (谁特么还在用 GBK 啊!摔!)
[size=13.1428575515747px]请大家将感谢信发送至 李清 的邮箱~
[color=rgb(170, 170, 170) !important]1 [color=rgb(170, 170, 170) !important]2 [color=rgb(170, 170, 170) !important]3 [color=rgb(170, 170, 170) !important]4 [color=rgb(170, 170, 170) !important]5 [color=rgb(170, 170, 170) !important]6 [color=rgb(170, 170, 170) !important]7 [color=rgb(170, 170, 170) !important]8 [color=rgb(170, 170, 170) !important]9 [color=rgb(170, 170, 170) !important]10 [color=rgb(170, 170, 170) !important]11 [color=rgb(170, 170, 170) !important]12 | \documentclass[color=rgb(51, 51, 51) !important]{article[color=rgb(51, 51, 51) !important]} \usepackage[color=rgb(51, 51, 51) !important]{CJK[color=rgb(51, 51, 51) !important]} \usepackage[color=rgb(51, 51, 51) !important]{xCJK2uni[color=rgb(51, 51, 51) !important]}[color=rgb(0, 111, 224) !important] [color=rgb(153, 153, 153) !important]% 请大家将感谢信发送至 李清 的邮箱~ : ) \usepackage[color=rgb(51, 51, 51) !important]{hyperref[color=rgb(51, 51, 51) !important]} \AtBeginShipoutFirst[color=rgb(51, 51, 51) !important]{\input[color=rgb(51, 51, 51) !important]{zhwinfonts[color=rgb(51, 51, 51) !important].tex[color=rgb(51, 51, 51) !important]}[color=rgb(51, 51, 51) !important]} \begin[color=rgb(51, 51, 51) !important]{document[color=rgb(51, 51, 51) !important]} \begin[color=rgb(51, 51, 51) !important]{CJK*[color=rgb(51, 51, 51) !important]}[color=rgb(51, 51, 51) !important]{GBK[color=rgb(51, 51, 51) !important]}[color=rgb(51, 51, 51) !important]{song[color=rgb(51, 51, 51) !important]} \section[color=rgb(51, 51, 51) !important]{中文书签不会乱码[color=rgb(51, 51, 51) !important]} GBK[color=rgb(51, 51, 51) !important]~编码,pdf\LaTeX[color=rgb(51, 51, 51) !important]{[color=rgb(51, 51, 51) !important]}[color=rgb(51, 51, 51) !important]~编译。 \clearpage \end[color=rgb(51, 51, 51) !important]{CJK*[color=rgb(51, 51, 51) !important]} \end[color=rgb(51, 51, 51) !important]{document[color=rgb(51, 51, 51) !important]} |
[size=13.1428575515747px]适用情况
- GBK + LaTeX - DVIPDFMx(谁特么还在用 GBK 啊!摔!)
[backcolor=rgb(238, 238, 238) !important][color=rgb(102, 102, 102) !important]
[color=rgb(102, 102, 102) !important][size=9.7142858505249px]TeX
[color=rgb(170, 170, 170) !important]1 [color=rgb(170, 170, 170) !important]2 [color=rgb(170, 170, 170) !important]3 [color=rgb(170, 170, 170) !important]4 [color=rgb(170, 170, 170) !important]5 [color=rgb(170, 170, 170) !important]6 [color=rgb(170, 170, 170) !important]7 [color=rgb(170, 170, 170) !important]8 [color=rgb(170, 170, 170) !important]9 [color=rgb(170, 170, 170) !important]10 [color=rgb(170, 170, 170) !important]11 [color=rgb(170, 170, 170) !important]12 [color=rgb(170, 170, 170) !important]13 | \documentclass[color=rgb(51, 51, 51) !important]{article[color=rgb(51, 51, 51) !important]} \usepackage[color=rgb(51, 51, 51) !important]{CJK[color=rgb(51, 51, 51) !important]} \usepackage[color=rgb(51, 51, 51) !important][dvipdfmx[color=rgb(51, 51, 51) !important][color=rgb(51, 51, 51) !important]{hyperref[color=rgb(51, 51, 51) !important]} \hypersetup[color=rgb(51, 51, 51) !important]{CJKbookmarks[color=rgb(51, 51, 51) !important]} \AtBeginShipoutFirst[color=rgb(51, 51, 51) !important]{\input[color=rgb(51, 51, 51) !important]{zhwinfonts[color=rgb(51, 51, 51) !important].tex[color=rgb(51, 51, 51) !important]}[color=rgb(51, 51, 51) !important]} \AtBeginShipoutFirst[color=rgb(51, 51, 51) !important]{\special[color=rgb(51, 51, 51) !important]{pdf[color=rgb(51, 51, 51) !important]:tounicode[color=rgb(0, 111, 224) !important] GBK-EUC-UCS2[color=rgb(51, 51, 51) !important]}[color=rgb(51, 51, 51) !important]} \begin[color=rgb(51, 51, 51) !important]{document[color=rgb(51, 51, 51) !important]} \begin[color=rgb(51, 51, 51) !important]{CJK*[color=rgb(51, 51, 51) !important]}[color=rgb(51, 51, 51) !important]{GBK[color=rgb(51, 51, 51) !important]}[color=rgb(51, 51, 51) !important]{song[color=rgb(51, 51, 51) !important]} \section[color=rgb(51, 51, 51) !important]{中文书签不会乱码[color=rgb(51, 51, 51) !important]} GBK[color=rgb(51, 51, 51) !important]~编码,\LaTeX[color=rgb(51, 51, 51) !important]{[color=rgb(51, 51, 51) !important]}[color=rgb(0, 111, 224) !important] -[color=rgb(0, 111, 224) !important] DVIPDFMx[color=rgb(51, 51, 51) !important]~编译。 \clearpage \end[color=rgb(51, 51, 51) !important]{CJK*[color=rgb(51, 51, 51) !important]} \end[color=rgb(51, 51, 51) !important]{document[color=rgb(51, 51, 51) !important]} |
[size=13.1428575515747px]选自:http://liam0205.me/2014/11/22/latex-pdf-cjk-bookmarks/