有没有办法“强制” TeX 在下标和上标中包含标准间距?

有没有办法“强制” TeX 在下标和上标中包含标准间距?

据我所知:通常,TeX 在文本模式下的空格不一样,例如与脚本模式。这可以在以下示例中看到。

代码:

$k-1$ versus $2^{k-1}$

输出:

在此处输入图片描述

在示例中,规则集的k-1间距比上标中的间距大。有没有办法强制 TeX 自动为该上标留出间距,即不使用诸如 之类的间距命令\;

答案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

结果是:

相同公式,不同间距

  1. 这是 ConTeXt 中的默认设置,请注意在减号周围以及上标的 x 与 dx 之间插入了一些微小的空格。
  2. 这里我们设置\tinymuskip为0。这可能和你得到的一样。
  3. 为了使差异更加明显,我们展示了一个大版本\tinymuskip
  4. 这里我们定义了一个新的muskip,并在 ord 和 bin 之间使用它(我们把它设置得相当大,以查看效果。看起来很糟糕!但如果你想改变细节,这是可行的方法(但有几个
  5. 如果您想要相同的间距(适应大小),您可以\medskip在 ord 和 bin 之间使用*。然而,这可能会导致下标和上标的间距过大。

*) 事实上,\allscriptstyles可以将其改为,\allmathstyles使所有样式都相同。但同样,这样看起来不太好看。

最后警告,过多地更改默认值会使您的数学看起来很糟糕(我从测试中意识到了这一点)。据我所知,跳过的默认设置最初由 Knuth 定义,已经存在了很长时间,因此它们不会那么糟糕。

相关内容