1. 程式人生 > >LuaLaTeX的中文支持設置與簡單示例

LuaLaTeX的中文支持設置與簡單示例

解決方法 分享 網上 圖形 use select ubuntu 編輯 不清楚

LuaLaTeX編譯方式,為我們在LaTeX編輯排版中提供了執行Lua代碼的功能,這樣一來,對於程序員而言就有了更多的發揮空間,LaTeX也變得更有意思。我原來一直在用xeLaTeX編譯方式,這段時間寫UML圖形繪制宏包時,總有束手束腳的感覺,於是開始轉用LuaLaTeX編譯方式。現在把使用過程中的一些東西記錄於51CTO博客中。
  
1、中文支持設置
  我使用的是宏包ctex,以前用的xecjk不能在LuaLaTeX編譯方式下使用。這個宏包的說明文檔下載地址,我已經放在另一篇博客中。
  
2、listings宏包報錯的解決方法
  在Ubuntu 16.04中(據說在早期版本中不會報錯),LuaLaTeX編譯方式下使用listings宏包會報錯。錯誤原因我現在還不清楚,只是在網上找到一個很簡單的處理辦法,就是在導言區加入以下兩句命令:

\newdimen\cht
\newdimen\cdp

  
3、一個簡單的代碼示例

\documentclass{article}
\usepackage[UTF8]{ctex}% 提供漢字支持
\usepackage{geometry}% 頁面布局支持
\usepackage{xcolor}
\usepackage{luacode}
%
% 設置字體。註意順序,第一個定義的就是默認字體
\setCJKfamilyfont{song}{FZShuSong-Z01S}% 方正書宋簡體
\newcommand{\song}{\CJKfamily{song}}%
\setCJKfamilyfont{kaiti}{FZKai-Z03S}% 方正楷體簡體
\newcommand{\kaiti}{\CJKfamily{kaiti}}%
\setCJKfamilyfont{heiti}{FZHei-B01S}% 方正黑體簡體
\renewcommand{\heiti}{\CJKfamily{heiti}}% 因為原命令已被ctex中定義過,所以這裏重定義
\setCJKfamilyfont{fangsong}{FZFangSong-Z02S}% 方正仿宋簡體
\renewcommand{\fangsong}{\CJKfamily{fangsong}}% 因為原命令已被ctex中定義過,所以這裏重定義
%

\begin{document}%
\luaexec{%
  math.randomseed(os.time())
  for i = 1, 8 do
    r1 = i * 30 * math.random()
    g1 = i * 30 * math.random()
    b1 = i * 30 * math.random()
    tex.sprint("\\color{rgb:red," .. r1 ..";green, " .. g1 .. ";blue," .. b1 .. "} ")
    tex.sprint("\\fontsize{" .. i * 5 .. "pt}{" .. i * 10 .. "}\\selectfont 海上升明月\\par")
  end
}%

\end{document}%

效果如下:
技術分享圖片
說明:
  1) 在宏包ctex中默認定義了一些字體調用的命令,在Ubuntu下默認是使用文鼎系列的,但我習慣使用方正字體,所以對其重新定義。註意這裏的字體文件名並不是我們在其他文字編輯軟件中看到的字體名稱,應該是先找到字體文件,然後用字體查看器觀察,如下圖。有些字體不能編譯成功,具體原因現在還不清楚。
技術分享圖片
  2) ctex宏包的編譯速度有些慢,特別是第一次編譯時要多等一下。
  3) 註意代碼中的語句tex.sprint中,對於反斜杠要使用轉義字符來表示,是不是有點C的味道。呵呵,Lua本身就是由C開發的。

LuaLaTeX的中文支持設置與簡單示例