避免在数学模式中随处放置 `,\,`

避免在数学模式中随处放置 `,\,`

每当我在数学模式下输入“,”(逗号后有一个空格)时,我真的想要一个空间。通常,这要么是

点 $a$、b$ 和 $c$....

或者以显式向量表示:

令向量 $x=(x_1, x_2, x_3)$ 为...

由于 TeX 删除了这个空格,我的文本中经常充斥着明确的短空格:$x_1,\,x_2,\,x_3)$

有没有办法告诉 TeX 这是不可取的,或者让 TeX 屈服?

答案1

这有点不合适,但这就是我要做的。对于向量,我总是使用

Let the vector $x=(x_1,x_2,x_3)$ be ...

,在数学模式下,TeX 会在(后插入一个细空格\thinmuskip,正如 Lev 在他的回答中指出的那样),我发现这是完全正确的。在你的另一个例子中,我会写

the points $a$, $b$, and~$c$ ...

(带或不带,后面的$b$),这也是 Knuth 在 TeXbook 中推荐的。 (注意 后面的连字符and!)这会产生正确的间距;此外,它允许在 之后换行$a$

答案2

\colon您可以通过更改来更改逗号、分号和s ( \mathpunct)后跳过的大小\thinmuskip,例如\thinmuskip=5mu,但在许多其他地方都使用了细空格,所以这不是一个很好的解决方案。

您可以在数学模式下将逗号变为活动字符(例如,这个答案),但这可能会导致与某些软件包的兼容性问题。

我个人会按照亨德里克说的做,输入你的第一个例子

the points $a$, $b$, and~$c$ ...

并且不要弄乱第二个示例中的 TeX 间距(您的版本中明确的细间距对我来说看起来太大了,尽管我承认,我对这些事情的判断已经通过使用 TeX 进行了大量的校准)。

答案3

在 LuaTeX 中,你可以分别控制每对类的对象之间的间距:

Let the vector $x=(x_1, x_2, x_3)$ be\par
\Umathpunctordspacing\textstyle=20mu
Let the vector $x=(x_1, x_2, x_3)$ be
\bye

答案4

这不是正确的数学排版,但您可以使用以下代码增加逗号后的空格:

\documentclass{article}
\makeatletter
\def\Vec#1{\expandafter\Vec@i#1,,\@nil}
\def\Vec@i#1,#2,#3\@nil{%
  $#1\ifx\relax#2\relax$\else,\mkern\thickmuskip$%
  \Vec@i#2,#3\@nil\fi}
\makeatother

\begin{document}

Let the vector \Vec{x=(x_1,x_2,x_3)} be...

and can simply be reverted 
\let\Vec\ensuremath

Let the vector \Vec{x=(x_1,x_2,x_3)} be...

\end{document}

相关内容