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

Posted atthefirst

tags:

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

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

1、中文支持设置

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

2、一个简单的代码示例

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

完整代码如下:

%博客园 陆巍的博客:https://www.cnblogs.com/atthefirst/
documentclass{book}%
usepackage{geometry}%
usepackage[UTF8]{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}% 方正书宋简体

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中定义过,所以这里重定义
%
setlength{parindent}{0pt}% 缩进为0
%
egin{document}%
  egin{minipage}{0.4	extwidth}%
    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}%
  egin{minipage}{0.4	extwidth}%
    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]%
  egin{minipage}{0.4	extwidth}%
    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}%
  egin{minipage}{0.4	extwidth}%
    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}%

效果如下:
技术分享图片

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







以上是关于LuaLaTeX的中文支持设置与简单示例的主要内容,如果未能解决你的问题,请参考以下文章

LuaLaTeX 使用笔记

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

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

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

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

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