請教在 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}
這裡有一個十分生動的例子,mohuangrui/ucasthesis · GitHub,題主體會下:-)
推薦閱讀:
※LaTeX 論文中如何畫這種下圖所示4個圖拼接起來的圖?
※如何評價 ShareLaTeX?
※怎樣才能被稱作是美觀的排版?
※為什麼有的出版社使用AI排版,而不是Indesign?
※CSS 的主要缺陷是什麼?