forum
forum copied to clipboard
关于数学环境下中文前后空格问题
\documentclass{ctexart}
\usepackage{mathtools}
\begin{document}
\[x=1\text{或}x=2.\]
\end{document}
用xelatex编译,xecjk宏包能够在中文与西文、数字前后自动加空格,但数学环境下就不行了,好像只能手动加
~
来实现,有智能的解决方案吗?
参考问题 https://tex.stackexchange.com/questions/8047/spacing-around-text-in-mathmode
和中文没什么关系:
\documentclass{article}
\usepackage{amsmath}
\begin{document}
$ abc \text{abc} abc$
\end{document}
我猜 OP 问的是,为什么在这里 xeCJK 不会自动加空格,更接近这个问题 Spacing issue in math environment with xeCJK package
是的,”为什么在这里 xeCJK 不会自动加空格“
我曾经在工作室问过一个相关的问题,https://ask.latexstudio.net/ask/question/281.html。WME 如下:
% compile with xelatex
\documentclass{article}
\usepackage{amsmath}
\usepackage{xeCJK}
\setCJKmainfont{FandolSong}
\begin{document}
\[A\cap B=\{x\mid x\in A\text{ and }x\in B\}\]
\[A\cap B=\{x\mid x\in A\text{ 且 }x\in B\}\]
\end{document}
编译结果如下:
所以需要在
且
后面手动加强制空格来修复。
我想搞明白的是为什么且
字前后的空格情况会不一样?
我想搞明白的是为什么
且
字前后的空格情况会不一样?
%!TEX program=xelatex
\documentclass{article}
\usepackage{xeCJK}
\begin{document}
\fbox{ 且 }
\end{document}
即使直接放盒子,右边都没有间距。
xeCJK 的处理过程大致是:
$A\hbox{ 且 }B$
-
\hbox{
进入受限水平模式制作盒子 -
-
且
,空格和“且”之间插入 token 列:检查上一个粘连的宽度发现跟空格一样、取消粘连、检查最后一个kern结点发现没有、重新插入空格粘连。 - “且”跟空格之间插入token列:切换英文字体、通过插入一个特殊的kern结点标记状态为“后面是CJK字符”、吞掉空格
-
}
,关闭盒子,将盒子包装成一个 ord 数学项放进数学列。
数学模式內,\text{...}
是将其内容放入水平盒子(hbox)的。空格留在里面的话其宽度会被定死,而留在外面则仍然能变化(或伸展或压缩)。而且,从语义上来看,我更倾向于「空格应该加到\text{...}
外面」,即
\[A\cap B=\{x\mid x\in A\ \text{and}\ x\in B\}\]
和
\[A\cap B=\{x\mid x\in A\ \text{且}\ x\in B\}\]