使用 xeCJK 包的数学环境中的间距问题

使用 xeCJK 包的数学环境中的间距问题

直到今天我才注意到使用\(...\)and$...$xeCJK(或ctex)会产生不同的结果,看代码:

\documentclass{article}
\usepackage{xeCJK}
\setCJKmainfont{SimSun}

\begin{document}

甲\(e^{i\pi}+1=0\)甲

乙$e^{i\pi}+1=0$乙

\end{document}

给出

在此处输入图片描述

注意第一个等式前面缺少空格。虽然可以手动修复,但我尝试添加

\renewcommand{\CJKecglue}{\ }

但这个命令似乎只影响$...$环境。我想知道这是不是故意的;如果不是,如何修复它?更根本的是,为什么被\(...\)区别对待$...$

答案1

\(和之间的唯一区别$(当前者没有引发任何错误时)是\(问题\relax

%% latex.ltx, line 4226
\def\({\relax\ifmmode\@badmath\else$\fi}

如果我尝试\relax在之前手动添加$,我会得到与相同的结果\(

\documentclass{article}
\usepackage{xeCJK}
\setCJKmainfont{STFangsong}
%\setCJKmainfont{SimSun}

\begin{document}

乙\(e^{i\pi}+1=0\)乙

乙\relax$e^{i\pi}+1=0$乙

乙$e^{i\pi}+1=0$乙

\end{document}

在此处输入图片描述

我真的不知道是什么导致了这种行为,但罪魁祸首肯定是\relax不应该从中移除的\(。一种解决方法似乎是

\makeatletter
\protected\def\({\ifmmode\@badmath\else$\fi}
\makeatother

不需要,\relax因为它不会在表格单元格中不合时宜地展开。在添加序言中的三行后,上述文档的输出为

在此处输入图片描述

这似乎就是您要寻找的:只有明确的\relax给出了错误的间距。

为了完整性,还添加

\protected\def\){\ifmmode\ifinner$\else\@badmath\fi\else\@badmath\fi}

\makeatother

相关内容