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<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}
發佈了15 篇原創文章 · 獲贊 30 · 訪問量 44萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章