LuaLaTeX的中文支持设置与简单示例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LuaLaTeX的中文支持设置与简单示例相关的知识,希望对你有一定的参考价值。

LuaLaTeX编译方式,为我们在LaTeX编辑排版中提供了执行Lua代码的功能,这样一来,对于程序员而言就有了更多的发挥空间,LaTeX也变得更有意思。我原来一直在用xeLaTeX编译方式,这段时间写UML图形绘制宏包时,总有束手束脚的感觉,于是开始转用LuaLaTeX编译方式。现在把使用过程中的一些东西记录于51CTO博客中。
  
1、中文支持设置
  我使用的是宏包ctex,以前用的xecjk不能在LuaLaTeX编译方式下使用。这个宏包的说明文档下载地址,我已经放在另一篇博客中。
  
2、listings宏包报错的解决方法
  在Ubuntu 16.04中(据说在早期版本中不会报错),LuaLaTeX编译方式下使用listings宏包会报错。错误原因我现在还不清楚,只是在网上找到一个很简单的处理办法,就是在导言区加入以下两句命令:


ewdimencht

ewdimencdp

  
3、一个简单的代码示例

documentclass{article}
usepackage[UTF8]{ctex}% 提供汉字支持
usepackage{geometry}% 页面布局支持
usepackage{xcolor}
usepackage{luacode}
%
% 设置字体。注意顺序,第一个定义的就是默认字体
setCJKfamilyfont{song}{FZShuSong-Z01S}% 方正书宋简体

ewcommand{song}{CJKfamily{song}}%
setCJKfamilyfont{kaiti}{FZKai-Z03S}% 方正楷体简体

ewcommand{kaiti}{CJKfamily{kaiti}}%
setCJKfamilyfont{heiti}{FZHei-B01S}% 方正黑体简体

enewcommand{heiti}{CJKfamily{heiti}}% 因为原命令已被ctex中定义过,所以这里重定义
setCJKfamilyfont{fangsong}{FZFangSong-Z02S}% 方正仿宋简体

enewcommand{fangsong}{CJKfamily{fangsong}}% 因为原命令已被ctex中定义过,所以这里重定义
%

egin{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的中文支持设置与简单示例的主要内容,如果未能解决你的问题,请参考以下文章

LuaLaTeX 使用笔记

如何使列表视图出现在片段中?

Fragment 和 FragmentStatePagerAdapter 中带有 ViewPager 的片段导致异常(带有完整示例)

处理屏幕旋转上的片段重复(带有示例代码)

Emacs org-mode latex - 只需在pdflatex,xelatex和lualatex之间切换

为啥这段代码会泄露? (简单的代码片段)