每当我在数学模式下输入“,”(逗号后有一个空格)时,我真的想要一个空间。通常,这要么是
点 $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}