您的位置:首页 > 其它

ubuntu下的latex用beamer制作演示文稿时中文书签乱码解决方法

2012-07-30 15:54 459 查看
用beamer制作演示文稿时, 加上CJK选项后正文显示中文正常, 但书签是乱码.

此问题一直困扰我很久, 以前临时的解决方法是用utf8编码编写文档, 但在

CJK参数中用GB编码方式. 编译tex文档是把tex文档用iconv转换成GBK编码的

文档, 然后用pdflatex编译, 再用gbk2uni程序转换书签, 最后再用pdflatex

编译. 虽然达到了效果, 但很繁琐. 最近又碰到新的麻烦, 新加入的utf8编码

的字体无法使用. 所以想解决此问题.

网上搜索了一下, 大部分都是用gbk2uni转换的方法. 也看到在写article类型

文章时用hyperref包加unicode参数的方法. 在beamer上实验了一下, 出错!

感觉beamer可能也用hyperref来做书签. 就搜索latex-beamer的deb包(ubuntu)

看看hyperref在哪里被beamer使用了.

在文件/usr/share/texmf/tex/latex/beamer/base/beamer.cls中找到:

\PassOptionsToPackage{bookmarks=true,%

bookmarksopen=true,%

pdfborder={0 0 0},%

pdfhighlight={/N},%

unicode=true,% <-------------- 加入此行

linkbordercolor={.5 .5 .5}}{hyperref}

把unicode参数加入后, 用下面的tex测试, 书签正常了.

最近开始学用beamer做幻灯片,然而beamer不能使用dvipdfmx来生成pdf所以对中文标签的支持不能通过dvipdfmx来完成。我用的是utf8环境,CJKutf8可以很好的完成中文标签tounicode的转换,但是beamer.cls中的定义存在问题。batman在bbs.ctex.org上提出了对其的修改,使之能支持CJKutf8宏包的这一功能。具体如下:

打开/usr/share/texmf/tex/latex/beamer/beamer.cls,或/usr/share/texmf/tex/latex/beamer/base/beamer.cls 找到

\DeclareOptionBeamer{CJK}{\ExecuteOptionsBeamer{cjk}}

\DeclareOptionBeamer{cjk}{

\def\beamer@hypercjk{\hypersetup{CJKbookmarks=true}}

\def\beamer@activecjk{

% Activate all >128 characters.

\count@=127

\@whilenum\count@<255 \do{%

\advance\count@ by 1

\lccode`\~=\count@

\catcode\count@=\active

\lowercase{\def~{\kern1ex}}

}

}

}

在beamer3.06中是在178行,把% Activate all >128 characters.改成% Activate all >=0x80 characters. 然后在上文的第三个} 后加上下面几句:

\DeclareOptionBeamer{CJKutf8}{\ExecuteOptionsBeamer{cjkutf8}}

\DeclareOptionBeamer{cjkutf8}{%

\PassOptionsToPackage{unicode}{hyperref}

\def\beamer@activecjk{

% Activate all characters >= 0x80.

\count@=127

\@whilenum\count@<254 \do{%

\advance\count@ by 1

\lccode`\~=\count@

\catcode\count@=\active

\lowercase{\def~{\kern1ex}}

}

}

}

之后用\documentclass[CJKutf8]{beamer}调用beamer类,并用\usepackage{CJKutf8}来使用CJKutf8宏包,之后按常规使用中文环境,最后用pdflatex编译 .tex文档两次即可。

\documentclass{beamer}

\usepackage{CJKutf8}

\mode<presentation>

{

\usetheme[headheight=0.2in]{boxes}

\setbeamercovered{transparent}

\usecolortheme{dolphin}

}

%\usepackage[latin1]{inputenc}

\usepackage{times}

\usepackage{tikz}

\usepackage{multimedia}

\usepackage{amsmath}

%\usecolortheme{sidebartab}

\pgfdeclareimage[height=1.5cm,width=1.5cm]{logoUni}{logo2}

\logo{\pgfuseimage{logoUni}}

\AtBeginSection[]

{

\begin{frame}<beamer>

\frametitle{}

\tableofcontents[currentsection]

\end{frame}

}

\AtBeginSubsection[]

{

\begin{frame}<beamer>

\frametitle{}

\tableofcontents[currentsubsection]

\end{frame}

}

\begin{document}

\begin{CJK}{UTF8}{song}

\title{程序结构}

\author{微机原理}

\begin{frame}

\titlepage

\end{frame}

\section*{摘要}

\frame{\tableofcontents}

\section{汇编源程序的编程格式}

\begin{frame}

\frametitle{分类}

\begin{itemize}

\item<1-> EXE文件的编程格式

\item<2-> COM文件的编程格式

\item<3-> COM文件的执行级别最高,EXE文件次之,同名BAT文件级别最低

\end{itemize}

\end{frame}

\section{文本方式BIOS屏幕功能调用}

\begin{frame}

\frametitle{显示存储器}

\begin{itemize}

\item<1-> 启动DOS,适配器自动工作在80X25文本方式下

\item<2-> 待显示字符ASCII码存放在显示存储器偶地址单元

\end{itemize}

\end{frame}

\end{CJK}

\end{document}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: