博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Latex中使用dvipdfm转换方式hyperref包生成PDF中文书签乱码的解决方案
阅读量:4049 次
发布时间:2019-05-25

本文共 8442 字,大约阅读时间需要 28 分钟。

中使用 dvipdfm 转换方式 hyperref 包生成 PDF 中文书签乱码的解决方案

gbk2uni

TeX 生成 pdf 文件时中文书签经常出现乱码 , 网上讨论颇多 , 解决方法之一是用 .out 文件中的 GBK 编码转化为 Unicode 编码后再编译一遍。这个 gbk2uni cxterm 、张林波和 HookLee 共同开发的 , 点击 下载 , 解压后可以把 gbk2uni.exe 拷入 path 所在路径 , 比如 MiKTeX 的安装目录 texmf/miktex/bin 下。

 

使用方法如下:

 

Linux 命令行编译顺序如下:

$ latex main.tex

$ bibtex main.tex

$ latex main.tex

$ gbk2uni main.out

$ latex main.tex

$ dvipdfm main.dvi

DOS 用批处理编译的话与些相似 ( 省略了扩展名 )

latex main

bibtex main

latex main

gbk2uni main

latex main

dvipdfmx main

 

参考链接 :

1. http://www.hooklee.com/tex.html

2. http://www.ctex.org

 

gbk2uni 的问题

关键的问题就是如果文档不是 GBK 编码的,比如用的最多的 UTF-8 或其他编码,这种方式就会失效,因为 gbk2uni 依然按照 GBK 字符去转换,为了和国际接轨( ^^ ),建议统一使用 UTF-8 进行 latex 文档的编写,为了正常生成 PDF 标签,我使用 java 做了一个工具可以辅助生成。此工具支持所有编码类型的转换。

 

解决方案 LatexHyperrefCharsetTool

实例文档

% @charset: UTF-8

% 可用字体 song fs hei kai li you

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 导言区

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

/documentclass[9pt,b5paper]{article}

/usepackage{CJKutf8}

 

% 导言区使用中文,必须引入一个 CJK 环境

/begin{CJK*}{UTF8}{song}

/end{CJK*}

 

/usepackage{indentfirst}

/setlength{/parindent}{2em}% 中文缩进两个汉字位

/renewcommand{/baselinestretch}{1.2}% 行距

 

/usepackage[dvipdfm,% 需要使用 dvipdfm dvipdfmx 进行 pdf 生成

            pdfstartview=FitH,

            CJKbookmarks=true,

                 %unicode=true,% 不要让 latex 自动转换 unicode 字符会出现各种问题

            bookmarksnumbered=true,

            bookmarksopen=true,

            colorlinks=true, % 注释掉此项则交叉引用为彩色边框 ( colorlinks pdfborder 同时注释掉 )

            %pdfborder=001,   % 注释掉此项则交叉引用为彩色边框

            citecolor=magenta,% magenta , cyan

            linkcolor=blue,

            linktocpage=true,

            ]{hyperref}       % hyperref 宏包通常要求放在导言区的最后 !!!

 

 

/renewcommand/contentsname{/hfil{} ~~~~~ }% 目录文字

 

 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 正文

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

/begin{document}

/begin{CJK*}{UTF8}{song}

 

/tableofcontents% 目录

 

/section{

中华人民共和国 }

 

这是中文。 `` 哈哈 '' 。这是中文。 `` 哈哈 '' 。这是中文。 `` 哈哈 '' 。这是中文。 `` 哈哈 '' 。这是中文。 `` 哈哈 '' 。这是中文。

 

/subsection{

モバイル }

 

`` 哈哈 '' 。这是中文。 `` 哈哈 '' 。这是中文。 `` 哈哈 '' 。这是中文。 `` 哈哈 '' 。这是中文。 `` 哈哈 '' 。这是中文。 `` 哈哈 ''

 

这是中文。 `` 哈哈 ''

 

TeXworks 是在 TUG TeX Users Group )的支持下正在开发的一个全新的

TeX/LaTeX 编辑器。它的首要特点如下:自带了一个 pdf 浏览器,编辑

latex 文件时可以迅速预览排版后的 pdf 文件;默认情况下 latex

编辑窗口在左边, pdf

浏览窗口在右边,各占一半桌面,在大屏幕宽屏显示器显示的效果最好不过了。还有就是它的设计目标是简单易用,所以只支持直接生成并预览

pdf ,避免 dvi, ps, pdf 各种文件格式对初学者的干扰。

 

All packages using GNU Automake to produce distribution tarballs

with make dist should update to the 1.11.1 or 1.10.3 release, or

otherwise work around the problem.

 

 

 

/section{

日本語のページを検索 }

/subsection{

亴壪惸蠪衋 }

/subsection{Цкюёя}

/subsection{Recherche avancée d'entreprise}

 

/section{België}

/section{Ελλάδα}

 

这是中文。 `` 哈哈 '' 。这是中文。 `` 哈哈 '' 。这是中文。 `` 哈哈 '' 。这是中文。 `` 哈哈 '' 。这是中文。 `` 哈哈 '' 。这是中文。 `` 哈哈 '' 。这是中文。 `` 哈哈 '' 。这是中文。 `` 哈哈 '' 。这是

 

% 解决 bug 创建新页

/newpage{}

/end{CJK*}

/end{document}

注意此文档必须使用 UTF-8 编码

 

1 检查您机器上的 java 环境是否正确 ( 需求 :JRE/JRE   1.5+ )

2 Charset2Unicode.class 文件放入与此文件相同的目录下。

3 执行编译 ( 建议编写批处理文件 )

 

批处理文件实例

latex t_UTF-8

java -classpath . Charset2Unicode UTF-8 t_UTF-8.out

latex t_UTF-8

dvipdfmx t_UTF-8

 

t_UTF-8 是文件名(省略后缀)

编译结果 ( 运行 t_UTF-8.pdf)

 

 

 

可见 PDF 一切正常。

 

1 GBK tex 文件实例及编译脚本

% @charset: GBK

% 可用字体 song fs hei kai li you

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 导言区

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

/documentclass[9pt,b5paper]{article}

/usepackage{CJK}

 

% 导言区使用中文,必须引入一个 CJK 环境

/begin{CJK*}{GBK}{song}

/end{CJK*}

 

/usepackage{indentfirst}

/setlength{/parindent}{2em}% 中文缩进两个汉字位

/renewcommand{/baselinestretch}{1.2}% 行距

 

/usepackage[dvipdfm,% 需要使用 dvipdfm dvipdfmx 进行 pdf 生成

            pdfstartview=FitH,

            CJKbookmarks=true,

                     %unicode=true,% 不要让 latex 自动转换 unicode 会出现各种问题

            bookmarksnumbered=true,

            bookmarksopen=true,

            colorlinks=true, % 注释掉此项则交叉引用为彩色边框 ( colorlinks pdfborder 同时注释掉 )

            %pdfborder=001,   % 注释掉此项则交叉引用为彩色边框

            citecolor=magenta,% magenta , cyan

            linkcolor=blue,

            linktocpage=true,

            ]{hyperref}       % hyperref 宏包通常要求放在导言区的最后 !!!

 

 

/renewcommand/contentsname{/hfil{} ~~~~~ }% 目录文字

 

 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 正文

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

/begin{document}

/begin{CJK*}{GBK}{song}

 

/tableofcontents% 目录

 

/section{

中华 /{
/} 人民共和国 }

/subsection{1}

/section{

}

/subsection{1}

/subsubsection{1}

 

这是中文。 `` 哈哈 '' 。这是中文。 `` 哈哈 '' 。这是中文。 `` 哈哈 ''

 

这是中文。 `` 哈哈 ''

 

TeXworks 是在 TUG TeX Users Group )的支持下正在开发的一个全新的

TeX/LaTeX 编辑器。它的首要特点如下:自带了一个 pdf 浏览器,编辑

latex 文件时可以迅速预览排版后的 pdf 文件;默认情况下 latex

编辑窗口在左边, pdf

浏览窗口在右边,各占一半桌面,在大屏幕宽屏显示器显示的效果最好不过了。还有就是它的设计目标是简单易用,所以只支持直接生成并预览

pdf ,避免 dvi, ps, pdf 各种文件格式对初学者的干扰。

 

All packages using GNU Automake to produce distribution tarballs

with make dist should update to the 1.11.1 or 1.10.3 release, or

otherwise work around the problem.

 

/section{

嘿嘿 }

 

 

这是中文。 `` 哈哈 '' 。这是中文。 `` 哈哈 '' 。这是中文。 `` 哈哈 '' 。这是中文。 `` 哈哈 '' 。这是中文。 `` 哈哈 '' 。这是中文。 `` 哈哈 '' 。这是中文。 `` 哈哈 '' 。这是中文。 `` 哈哈 '' 。这是中文。 `` 哈哈 '' 。这是中文。 `` 哈哈 '' 。这是中文。 `` 哈哈 ''

 

% 解决 bug 创建新页

/newpage{}

/end{CJK*}

/end{document}

脚本

latex gbk_1

java -classpath . Charset2Unicode GBK gbk_1.out

latex gbk_1

dvipdfmx gbk_1

 

 

 

2   Charset2Unicode 源代码

 

 

 

 

祝使用愉快,如果有什么建议,请给我发邮件 yifi(a)tom.com.

 

你可能感兴趣的文章
Ubuntu+win10远程桌面
查看>>
flutter-实现圆角带边框的view(android无效)
查看>>
android 代码实现圆角
查看>>
flutter-解析json
查看>>
android中shader的使用
查看>>
java LinkedList与ArrayList迭代器遍历和for遍历对比
查看>>
drat中构造方法
查看>>
JavaScript的一些基础-数据类型
查看>>
JavaScript基础知识(2)
查看>>
转载一个webview开车指南以及实际项目中的使用
查看>>
android中对于非属性动画的整理
查看>>
一个简单的TabLayout的使用
查看>>
ReactNative使用Redux例子
查看>>
Promise的基本使用
查看>>
coursesa课程 Python 3 programming 统计文件有多少单词
查看>>
coursesa课程 Python 3 programming 输出每一行句子的第三个单词
查看>>
Returning a value from a function
查看>>
coursesa课程 Python 3 programming Functions can call other functions 函数调用另一个函数
查看>>
coursesa课程 Python 3 programming The while Statement
查看>>
course_2_assessment_6
查看>>