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

用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
{
    \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}
        \frametitle{}
        \tableofcontents[currentsection]
    \end{frame}
}
\AtBeginSubsection[]
{
    \begin{frame}
        \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}

你可能感兴趣的:(Ubuntu)