答案1
在 Luatex 中,你可以将脚本样式中使用的间距设置为与文本样式中使用的相同值 ( 4mu plus 2mu minus 4mu
),但是由于上标实际上位于框中,因此拉伸和收缩组件实际上并未使用,如此处每对中的第二行所示
\documentclass{article}
\begin{document}
$k-1$ versus $2^{k-1}$
$k-1$ versus $2^{k-1}$ A very loose line\linebreak\mbox{}
\typeout{\the\Umathbinordspacing\textstyle}
\typeout{\the\Umathbinordspacing\scriptstyle}
\Umathbinordspacing\scriptstyle=4mu plus 2.0mu minus 4.0mu
\Umathordbinspacing\scriptstyle=4mu plus 2.0mu minus 4.0mu
\typeout{\the\Umathbinordspacing\textstyle}
\typeout{\the\Umathbinordspacing\scriptstyle}
$k-1$ versus $2^{k-1}$
$k-1$ versus $2^{k-1}$ A very loose line\linebreak\mbox{}
\end{document}
答案2
在过去的几个月里,Hans 在 中公开了这一点luametatex
。随着新数学原子类的加入,数学中的间距现在非常可配置。然而,我认为将 scriptstyle 中的所有空格定义为与 textstyle/displaystyle 中使用的空格相似并不是一个好主意。
ConTeXt 使用 luametatex(带有引擎中未定义的一些其他类)。为解决这种间距问题,我们定义了一个新的 muskip \tinymuskip
,默认情况下设置为1mu
,传统上设置为紧密间距。(通常为\thinmuskip
、\medmuskip
和\thickmuskip
)。但原则上可以定义和使用更多。
让我们看一个例子:
% We show glues
\showmakeup[mathglue]
\starttext
\startTEXpage[offset=1dk]
% This is our testbuffer (\dd gives a d in differential class, with automatically "correct" spacing with other classes)
\startbuffer
$ (k - 1) 2^{k - 1} + (1 + x^2)^{ \int \sin x \dd x } $
\stopbuffer
% This is how it comes out by default
\getbuffer
% This is how it comes out by with no spaces (as in your example)
\start
\tinymuskip 0mu
\getbuffer
\stop
% Here we set the \tinymuskip to something large
% Note that it affects spacing at several places
% in the exponents
\start
\tinymuskip 6mu plus 1mu minus 1mu
\getbuffer
\stop
% Here we introduce a new muskip
% that we use between ord and bin in scriptstyle.
\start
\newmuskip\mymuskip \mymuskip 12mu plus 2mu minus 4mu
\setmathspacing \mathordinarycode \mathbinarycode \allscriptstyles \mymuskip
\getbuffer
\stop
% Here we set the ordbin space to \medmuskip,
% the same as it is in textstyle
\start
\setmathspacing \mathordinarycode \mathbinarycode \allscriptstyles \medmuskip
\getbuffer
\stop
\stopTEXpage
\stoptext
结果是:
- 这是 ConTeXt 中的默认设置,请注意在减号周围以及上标的 x 与 dx 之间插入了一些微小的空格。
- 这里我们设置
\tinymuskip
为0。这可能和你得到的一样。 - 为了使差异更加明显,我们展示了一个大版本
\tinymuskip
- 这里我们定义了一个新的
muskip
,并在 ord 和 bin 之间使用它(我们把它设置得相当大,以查看效果。看起来很糟糕!但如果你想改变细节,这是可行的方法(但有几个 - 如果您想要相同的间距(适应大小),您可以
\medskip
在 ord 和 bin 之间使用*。然而,这可能会导致下标和上标的间距过大。
*) 事实上,\allscriptstyles
可以将其改为,\allmathstyles
使所有样式都相同。但同样,这样看起来不太好看。
最后警告,过多地更改默认值会使您的数学看起来很糟糕(我从测试中意识到了这一点)。据我所知,跳过的默认设置最初由 Knuth 定义,已经存在了很长时间,因此它们不会那么糟糕。