liam0205.github.io
liam0205.github.io copied to clipboard
在 LaTeX 中使用含有中文的 PDF 书签避免乱码的正确姿势 | 始终
https://liam.page/2014/11/22/latex-pdf-cjk-bookmarks/
LaTeX 的 hyperref 宏包能够在 PDF 文件里生成 PDF 书签,然而「书签乱码」是困扰很多 LaTeX 使用者的麻烦问题。 早年李树钧和张林波老师共同开发了名为 gbk2uni 的小工具,用以将 filename.out 中的 GBK 编码的字符转换成八进制数据;刘海洋和李清在 ctex 宏包/文档类对此做了处理,使得 ctex 宏包/文档类能够正确处理大部分的情况;后来李清编写了
老师,现在ctex停止维护了,我把winedt7升级到了winedt10 ,无论怎么搞目录都乱码了。
@dielianjunmobei 老师,现在ctex停止维护了,我把winedt7升级到了winedt10 ,无论怎么搞目录都乱码了。
我不是老师。
CTeX 套装里的 WinEdt 被吴凌云改过,默认编码是 GBK。官方的 WinEdt,默认编码是 UTF-8。你注意这一点,再按文章所说去操作就好了。
@Liam0205
@dielianjunmobei 老师,现在ctex停止维护了,我把winedt7升级到了winedt10 ,无论怎么搞目录都乱码了。
我不是老师。
CTeX 套装里的 WinEdt 被吴凌云改过,默认编码是 GBK。官方的 WinEdt,默认编码是 UTF-8。你注意这一点,再按文章所说去操作就好了。
您给提供方法了,就是老师,哈哈。我用的是西交的模板写的毕业论文,文章中的方式似乎不太好用呢。我看了一下,我们学校这个模板的编码是ANSI呢。
似乎古老的GBK+CJK+latex+dvipdfmx的方式被改动过了,下面的代码
\documentclass{article}
\usepackage{CJK}
\usepackage[dvipdfmx]{hyperref}
\hypersetup{CJKbookmarks}
%\AtBeginShipoutFirst{\input{zhwinfonts.tex}}
\AtBeginDvi{\special{pdf:tounicode GBK-EUC-UCS2}}
\begin{document}
\begin{CJK*}{GBK}{song}
\section{中文书签不会乱码}
GBK~编码,\LaTeX{} - DVIPDFMx~编译。
\clearpage
\end{CJK*}
\end{document}
报如下错误
dvipdfmx:warning: Unbalanced parens/truncated PDF literal string.
dvipdfmx:warning: Could not find a value in dictionary object.
dvipdfmx:warning: Ignoring invalid dictionary.
dvipdfmx:warning: Interpreting special command outline (pdf:) failed.
dvipdfmx:warning: >> at page="1" position="(133.768, 667.198)" (in PDF)
dvipdfmx:warning: >> xxx "pdf:outline 1<</Title(\376\377\000\xd6\80\xd0\000\xce\80\xc4..."
dvipdfmx:warning: >> Reading special command stopped around >><</Title(\376\377\000\xd6\80\xd0\000\xce\80\xc4\000\xca\80\x...<<
]
似乎古老的GBK+CJK+latex+dvipdfmx的方式被改动过了,下面的代码
\documentclass{article} \usepackage{CJK} \usepackage[dvipdfmx]{hyperref} \hypersetup{CJKbookmarks} %\AtBeginShipoutFirst{\input{zhwinfonts.tex}} \AtBeginDvi{\special{pdf:tounicode GBK-EUC-UCS2}} \begin{document} \begin{CJK*}{GBK}{song} \section{中文书签不会乱码} GBK~编码,\LaTeX{} - DVIPDFMx~编译。 \clearpage \end{CJK*} \end{document}报如下错误
dvipdfmx:warning: Unbalanced parens/truncated PDF literal string. dvipdfmx:warning: Could not find a value in dictionary object. dvipdfmx:warning: Ignoring invalid dictionary. dvipdfmx:warning: Interpreting special command outline (pdf:) failed. dvipdfmx:warning: >> at page="1" position="(133.768, 667.198)" (in PDF) dvipdfmx:warning: >> xxx "pdf:outline 1<</Title(\376\377\000\xd6\80\xd0\000\xce\80\xc4..." dvipdfmx:warning: >> Reading special command stopped around >><</Title(\376\377\000\xd6\80\xd0\000\xce\80\xc4\000\xca\80\x...<< ]
又尝试了一次,发现 CJK+DVIPDFMx 的中文书签故事也被改动了
\documentclass{article}
\usepackage{CJK}
\usepackage{xCJK2uni}
\usepackage[dvipdfmx]{hyperref}
\begin{document}
\begin{CJK*}{GBK}{song}
\section{中文书签不会乱码}
GBK~编码,\LaTeX{} - DVIPDFMx~编译。
\clearpage
\end{CJK*}
\end{document}
这样就正常了