惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
博客园 - 司徒正美
V
Visual Studio Blog
博客园 - 【当耐特】
T
Tailwind CSS Blog
美团技术团队
博客园 - 叶小钗
Jina AI
Jina AI
宝玉的分享
宝玉的分享
IT之家
IT之家
Hugging Face - Blog
Hugging Face - Blog
雷峰网
雷峰网
Stack Overflow Blog
Stack Overflow Blog
博客园_首页
人人都是产品经理
人人都是产品经理
T
The Blog of Author Tim Ferriss
P
Proofpoint News Feed
Microsoft Security Blog
Microsoft Security Blog
Y
Y Combinator Blog
GbyAI
GbyAI
大猫的无限游戏
大猫的无限游戏
Martin Fowler
Martin Fowler
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
腾讯CDC

如鱼饮水

2026年高联二试(A卷)几何题的解答 2026年CNMO的几何题的解答(一) 2026年CSMO的几何题的解答(二) 2026年CSMO的几何题的解答(一) 关于新课标初中数学教材的评价 2026年CWMI的几何题的解答(二) 2026年CWMI的几何题的解答(一) 2026年CGMO的几何题的解答 2026 年 IMO 的几何题的解答 本地部署Gemma4-26B-A4B模型 不间断空格的处理方法 一个VSCode插件:支持TikZ预览 在Neovim中支持LuaLaTeX高亮 2026年全国I卷压轴题的解答 2026年北京高联预赛的几何题的解答 垂足三角形、等角共轭点与「六点圆」 本地部署 Hy-MT2 翻译模型 Vibe Coding一个Python版本的pdf2svg 2026 年 USAMO 的几何题的解答(一) 使用天地图API进行坐标反查 使用 Vibe Coding 编写一个属于自己的 VSCode 插件 尝试使用 DeepSeek-OCR 2 尝试使用MinerU 使用VSCode编辑Markdown的几个常用设置 在WSL上挂载U盘 使用vLLM框架加速PaddleOCR-VL 关于PaddleOCR-VL和PaddleOCR对数学类书籍识别的对比 尝试使用PaddleOCR-VL 关于DeepSeek-OCR和PaddleOCR对数学类书籍识别的对比 白嫖Kaggle平台部署DeepSeek-OCR
在使用LuaLaTeX时控制中英文字符的间距
西风冷香 · 2025-11-05 · via 如鱼饮水

1. 问题描述

之前在从XeLaTeX切换到LuaLaTex的时候,发现二者对中文字符和英文字符(包括数学公式)之间的间距处理不一样。在源代码中是否添加空格会对最终的间距有影响。

以下面的示例文档为例:

1
2
3
4
5
6
7
8
9
10
\documentclass{ctexart}
\begin{document}
中English文

中 English 文

$\sin(x)$

$\sin(x)$
\end{document}

这是XeLaTeX编译的结果,可以看到,不管加不加空格,得到的PDF间距都是一样的。

XeLaTeX编译的结果

下面是LuaLaTeX编译的结果:

LuaLaTeX编译的结果

这时不加空格时的间距要小于加空格时的间距。

因此,如果使用LuaLaTeX进行编译,整个文档的风格必须统一,要么都加空格,要么都不加,否则就会很难看。

2. 解决方法

根据LdBeth[1]给出的提示,找到了一个解决方法,可以通过设置 xkanjiskip 来解决这个问题。

在导言区加入:

1
2
3
4
5
6
7
8
\usepackage{iftex}
\ifluatex
\usepackage{luatexja}
\ltjsetparameter{
xkanjiskip={\fontdimen2\font plus \fontdimen3\font minus \fontdimen4\font},
alxspmode={`\%,3}
}
\fi

这样使用LuaLaTeX编译出来的文档无论加空格与否,间距都是一致的。

另外,默认的设置在百分号「%」和中文之间没有空格,上面同时修复了这个问题。

命令解释:

LuaTex-ja把一部分Unicode区段(U+0080~U+10FFFF)分为 JAChar(包含CJK字符等)和 ALchar(包含西文字母等),然后使用 kanjiskip 控制 JAChar 之间的间距,使用 xkanjiskip 控制 JACharALchar 之间的间距。

上面通过修改 xkanjiskip 使得中英文字符间距表现和XeLaTeX一致。

但是,并不是所有的 JACharALchar 之间都需要增加间距。LuaTex-ja使用 jaxspmode 控制是否需要在 JAChar 前后增加间距,使用 alxspmode 控制是否需要在 ALchar 前后增加间距。

上面通过将 % 对应的模式设为 3(或 allowed),使得在对应字符前/后都允许增加间距。(默认设置是「%」前面有空格,但后面没有。)


  1. https://www.zhihu.com/question/1904935413283522195/answer/1968692664439407558 ↩︎