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

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
V
V2EX
博客园 - 【当耐特】
WordPress大学
WordPress大学
爱范儿
爱范儿
美团技术团队
宝玉的分享
宝玉的分享
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
小众软件
小众软件
量子位
Hugging Face - Blog
Hugging Face - Blog
B
Blog RSS Feed
Recorded Future
Recorded Future
Engineering at Meta
Engineering at Meta
雷峰网
雷峰网
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
M
MIT News - Artificial intelligence
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 聂微东
H
Hackread – Cybersecurity News, Data Breaches, AI and More
腾讯CDC
大猫的无限游戏
大猫的无限游戏
Jina AI
Jina AI
博客园 - 叶小钗
GbyAI
GbyAI
Y
Y Combinator Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
F
Full Disclosure
G
Google Developers Blog
D
Docker
T
Tailwind CSS Blog
C
Check Point Blog
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
T
The Blog of Author Tim Ferriss
B
Blog
博客园 - 三生石上(FineUI控件)
博客园 - Franky
H
Help Net Security
MyScale Blog
MyScale Blog
U
Unit 42
D
DataBreaches.Net
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
I
InfoQ
阮一峰的网络日志
阮一峰的网络日志
The GitHub Blog
The GitHub Blog
L
LangChain Blog
有赞技术团队
有赞技术团队
Martin Fowler
Martin Fowler
Microsoft Security Blog
Microsoft Security Blog

如鱼饮水

本地部署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 关于联想拯救者R9000P的若干问题的解决方法 尝试使用DeepSeek-OCR 使用text-autospace为中英文混排自动添加空格 优化深色模式下的评论系统 让过长的 KaTeX 公式支持横向滚动 在深色模式下自动切换 SVG 的颜色 2025 年高联二试(B 卷)几何题的解答 2025 年高联二试(A 卷)几何题的解答 2025 年 CGMO 的几何题的解答(二)
在使用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 ↩︎