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

  LuaLaTeX编译方式,为我们在LaTeX编辑排版中提供了运行Lua代码的功能,这样一来,对于程序员而言就有了更多的发挥空间,LaTeX也变得更有意思。我原来一直在用xeLaTeX编译方式,这段时间写UML图形绘制宏包时,总有束手束脚的感觉,于是开始转用LuaLaTeX编译方式。现在把使用过程中的一些东西记录于博客中。

1、中文支持设置

  我使用的是宏包ctex,xecjk宏包不能在LuaLaTeX编译方式下使用。

2、一个简单的代码示例

  操作系统:Ubuntu 16.04 64位桌面版
  LaTeX工具:TeXstudio 2.10.8
  编译方式:LuaLaTeX

完整代码如下:

\documentclass{book}%
\usepackage{geometry}%
\usepackage{ctex}% 中文支持
\usepackage{luacode}% Lua代码支持
\usepackage[dvipsnames, svgnames, x11names]{xcolor}%
%
% 设置为A4纸,并设置四周边距
\geometry{a4paper, left = 3.17cm, right = 3.17cm, top = 2.54cm, bottom = 2.54cm}%
% 设置字体。注意顺序,第一个定义的就是默认字体
\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中定义过,所以这里重定义
%
\setlength{\parindent}{0pt}% 缩进为0
%
\begin{document}%
  \begin{minipage}{0.4\textwidth}%
    \song%
    \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 * 3 .. "pt}{" .. i * 3 .. "}\\selectfont 海上升明月\\par")
      end
    }%
  \end{minipage}%
  \begin{minipage}{0.4\textwidth}%
    \kaiti%
    \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 * 3 .. "pt}{" .. i * 3 .. "}\\selectfont 海上升明月\\par")
      end
    }%
  \end{minipage}%
  \quad\\[1cm]%
  \begin{minipage}{0.4\textwidth}%
    \heiti%
    \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 * 3 .. "pt}{" .. i * 3 .. "}\\selectfont 海上升明月\\par")
      end
    }%
  \end{minipage}%
  \begin{minipage}{0.4\textwidth}%
    \fangsong%
    \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 * 3 .. "pt}{" .. i * 3 .. "}\\selectfont 海上升明月\\par")
      end
    }%
  \end{minipage}%
%
\end{document}%

效果如下:
LuaLaTeX的中文支持设置与简单示例_第1张图片

说明:
   1) 在宏包ctex中默认定义了一些字体调用的命令,在Ubuntu下默认是使用文鼎系列的,但我习惯使用方正字体,所以对其重新定义。注意这里的字体文件名并不是我们在其他文字编辑软件中看到的字体名称,应该是先找到字体文件,然后用字体查看器观察,用上面“信息”中显示的名字。有些字体不能编译成功,具体原因现在还不清楚。
  2)  ctex宏包的编译速度有些慢,特别是第一次编译时要多等一下。
  3) 注意代码中的语句tex.sprint里面的内容,对于反斜杠要使用转义字符来表示,是不是有点C的味道!在LaTeX排版中,看到熟悉的编程,是不是感到很亲切!

你可能感兴趣的:(LaTeX)