forum icon indicating copy to clipboard operation
forum copied to clipboard

关于数学环境下中文前后空格问题

Open chenxiao445566 opened this issue 2 years ago • 5 comments

\documentclass{ctexart}
\usepackage{mathtools}
\begin{document}
\[x=1\text{或}x=2.\]
\end{document}

捕获 用xelatex编译,xecjk宏包能够在中文与西文、数字前后自动加空格,但数学环境下就不行了,好像只能手动加~来实现,有智能的解决方案吗?

chenxiao445566 avatar Jun 26 '22 06:06 chenxiao445566

参考问题 https://tex.stackexchange.com/questions/8047/spacing-around-text-in-mathmode

和中文没什么关系:

\documentclass{article}
\usepackage{amsmath}
\begin{document}
  $ abc \text{abc} abc$
\end{document}

image

syvshc avatar Jun 26 '22 06:06 syvshc

我猜 OP 问的是,为什么在这里 xeCJK 不会自动加空格,更接近这个问题 Spacing issue in math environment with xeCJK package

muzimuzhi avatar Jun 26 '22 11:06 muzimuzhi

是的,”为什么在这里 xeCJK 不会自动加空格“

chenxiao445566 avatar Jun 26 '22 11:06 chenxiao445566

我曾经在工作室问过一个相关的问题,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}

编译结果如下: QQ20220626-231637@2x 所以需要在后面手动加强制空格来修复。

我想搞明白的是为什么字前后的空格情况会不一样?

SwitWu avatar Jun 26 '22 15:06 SwitWu

我想搞明白的是为什么字前后的空格情况会不一样?

%!TEX program=xelatex
\documentclass{article}
\usepackage{xeCJK}

\begin{document}
\fbox{ 且 }
\end{document}

image 即使直接放盒子,右边都没有间距。

xeCJK 的处理过程大致是:

$A\hbox{ 且 }B$
  • \hbox{ 进入受限水平模式制作盒子
  • 空格,生成一个粘连。
  • ,空格和“且”之间插入 token 列:检查上一个粘连的宽度发现跟空格一样、取消粘连、检查最后一个kern结点发现没有、重新插入空格粘连。
  • “且”跟空格之间插入token列:切换英文字体、通过插入一个特殊的kern结点标记状态为“后面是CJK字符”、吞掉空格
  • },关闭盒子,将盒子包装成一个 ord 数学项放进数学列。

SainoNamkho avatar Sep 14 '22 10:09 SainoNamkho

数学模式內,\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\}\]

RuixiZhang42 avatar Jul 05 '23 17:07 RuixiZhang42