在使用LuaLaTeX时控制中英文字符的间距
1. 问题描述
之前在从XeLaTeX切换到LuaLaTex的时候,发现二者对中文字符和英文字符(包括数学公式)之间的间距处理不一样。在源代码中是否添加空格会对最终的间距有影响。
以下面的示例文档为例:
1 | \documentclass{ctexart} |
这是XeLaTeX编译的结果,可以看到,不管加不加空格,得到的PDF间距都是一样的。

下面是LuaLaTeX编译的结果:

这时不加空格时的间距要小于加空格时的间距。
因此,如果使用LuaLaTeX进行编译,整个文档的风格必须统一,要么都加空格,要么都不加,否则就会很难看。
2. 解决方法
根据LdBeth[1]给出的提示,找到了一个解决方法,可以通过设置 xkanjiskip 来解决这个问题。
在导言区加入:
1 | \usepackage{iftex} |
这样使用LuaLaTeX编译出来的文档无论加空格与否,间距都是一致的。
另外,默认的设置在百分号「%」和中文之间没有空格,上面同时修复了这个问题。
命令解释:
LuaTex-ja把一部分Unicode区段(U+0080~U+10FFFF)分为 JAChar(包含CJK字符等)和 ALchar(包含西文字母等),然后使用 kanjiskip 控制 JAChar 之间的间距,使用 xkanjiskip 控制 JAChar 和 ALchar 之间的间距。
上面通过修改 xkanjiskip 使得中英文字符间距表现和XeLaTeX一致。
但是,并不是所有的 JAChar 和 ALchar 之间都需要增加间距。LuaTex-ja使用 jaxspmode 控制是否需要在 JAChar 前后增加间距,使用 alxspmode 控制是否需要在 ALchar 前后增加间距。
上面通过将 % 对应的模式设为 3(或 allowed),使得在对应字符前/后都允许增加间距。(默认设置是「%」前面有空格,但后面没有。)