標籤:

請教在 LaTeX 中使用帶有中文的 PDF 書籤的正確姿勢?

網上找了各種方法都無效,中文環境是用到ctex宏包


documentclass[hyperref]{ctexart}

刪掉後面的

usepackage{ctex}

如果有需要可以在後面自己以特定選項或在特定位置引入 hyperref,直接用 hypersetup 也行,但不需要再自己加 unicode、CJKbookmarks 選項。

目前版本的 ctex 文檔類的 hyperref 選項已經儘力對中文書籤問題做了處理,能正確處理的包括 latex + dvipdfmx 方式編譯 GBK/UTF-8 編碼,pdflatex 或 xelatex 方式編譯 UTF-8 編碼;如果你用 CTeX 套裝的 pdflatex 或 latex + dvips 方式編譯 GBK 編碼的文檔,可以運行 gbk2uni(WinEdt 的 latex 與 pdflatex 按鈕會自動調用)處理,也應該沒有問題。當然,根據你編譯方式和編碼,可能需要給 ctexart 加 GBK 或 UTF8 選項,否則可能全文無法編譯。

如往常一樣,我們推薦使用 UTF-8 編碼,xelatex 方式編譯,這樣問題少一些,不加額外的 hyperref 選項也可以。


劉海洋 前輩的回答已經很好了,這裡畫蛇添足,做個總結。

最推薦的方式

最好的辦法是將中文支持和版式處理都交給 ctex 宏包/文檔類,只需要開啟 hyperref 選項即可。

適用情況:

  • UTF-8 + XeLaTeX(目前最最最最最最最最推薦的方式,看到它請星星眼
  • UTF-8 + pdfLaTeX
  • UTF-8 + LaTeX - DVIPDFMx

documentclass[hyperref, UTF8]{ctexart}
egin{document}
section{中文書籤不會亂碼}
UTF-8 編碼,XeLaTeX{}/pdfLaTeX{}/LaTeX{} - DVIPDFMx 編譯。
end{document}

documentclass{article}
usepackage[hyperref, UTF8]{ctex}
egin{document}
section{中文書籤不會亂碼}
UTF-8 編碼,XeLaTeX{}/pdfLaTeX{}/LaTeX{} - DVIPDFMx 編譯。
end{document}

適用情況(除非必要,不要使用 GBK 編碼):

  • GBK + LaTeX - DVIPDFMx
  • GBK + pdfLaTeX (ctex 宏包 2.x 版本支持,當前的 1.x 版本暫不支持)

documentclass[hyperref, GBK]{ctexart}
egin{document}
section{中文書籤不會亂碼}
GBK 編碼,pdfLaTeX{}/LaTeX{} - DVIPDFMx 編譯。
end{document}

documentclass{article}
usepackage[hyperref, GBK]{ctex}
egin{document}
section{中文書籤不會亂碼}
GBK 編碼,pdfLaTeX{}/LaTeX{} - DVIPDFMx 編譯。
end{document}

折騰星人的辦法

適用情況:

  • UTF-8 + XeLaTeX

documentclass{article}
usepackage{xeCJK}
usepackage{hyperref}
setCJKmainfont{SimSun}
egin{document}
section{中文書籤不會亂碼}
UTF-8 編碼,XeLaTeX{} 編譯。
end{document}

適用情況:

  • UTF-8 + pdfLaTeX

documentclass{article}
usepackage{CJKutf8}
usepackage{hyperref}
hypersetup{unicode}
AtBeginShipoutFirst{input{zhwinfonts.tex}}
egin{document}
egin{CJK*}{UTF8}{song}
section{中文書籤不會亂碼}
UTF-8~編碼,pdfLaTeX{}~編譯。
clearpage
end{CJK*}
end{document}

適用情況:

  • UTF-8 + LaTeX - DVIPDFMx

documentclass{article}
usepackage{CJKutf8}
usepackage[dvipdfmx]{hyperref}
hypersetup{unicode}
AtBeginShipoutFirst{input{zhwinfonts.tex}}
egin{document}
egin{CJK*}{UTF8}{song}
section{中文書籤不會亂碼}
UTF-8~編碼,LaTeX{} - DVIPDFMx~編譯。
clearpage
end{CJK*}
end{document}

適用情況:

  • GBK + pdfLaTeX (誰特么還在用 GBK 啊!!)

請大家將感謝信發送至 @李清 的郵箱~ : )

documentclass{article}
usepackage{CJK}
usepackage{xCJK2uni} % 請大家將感謝信發送至 @李清 的郵箱~ : )
usepackage{hyperref}
AtBeginShipoutFirst{input{zhwinfonts.tex}}
egin{document}
egin{CJK*}{GBK}{song}
section{中文書籤不會亂碼}
GBK~編碼,pdfLaTeX{}~編譯。
clearpage
end{CJK*}
end{document}

適用情況:

  • GBK + LaTeX - DVIPDFMx(誰特么還在用 GBK 啊!!)

documentclass{article}
usepackage{CJK}
usepackage[dvipdfmx]{hyperref}
hypersetup{CJKbookmarks}
AtBeginShipoutFirst{input{zhwinfonts.tex}}
AtBeginShipoutFirst{special{pdf:tounicode GBK-EUC-UCS2}}
egin{document}
egin{CJK*}{GBK}{song}
section{中文書籤不會亂碼}
GBK~編碼,LaTeX{} - DVIPDFMx~編譯。
clearpage
end{CJK*}
end{document}

文章以存檔至「在 LaTeX 中使用含有中文的 PDF 書籤的正確姿勢」。


這裡有一個十分生動的例子,mohuangrui/ucasthesis · GitHub,題主體會下:-)


推薦閱讀:

LaTeX 論文中如何畫這種下圖所示4個圖拼接起來的圖?
如何評價 ShareLaTeX?
怎樣才能被稱作是美觀的排版?
為什麼有的出版社使用AI排版,而不是Indesign?
CSS 的主要缺陷是什麼?

TAG:排版 | LaTeX |