LuaLaTeX编译方式,为我们在LaTeX编辑排版中提供了执行Lua代码的功能,这样一来,对于程序员而言就有了更多的发挥空间,LaTeX也变得更有意思。我原来一直在用xeLaTeX编译方式,这段时间
          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开发的。
