更改重叠中的垂直空间

更改重叠中的垂直空间

我怎样才能减少重叠空间?我在网上找到了这个解决方案,但它看起来不太像原始的重叠(请注意,我知道很难想出一个优雅地处理所有情况的解决方案,但我列出了 4 个希望看起来不错的常见用例)

\documentclass[11pt]{book}

\usepackage{amsmath,amsfonts,amssymb,amsthm} 

%overset spacing
\makeatletter
\newcommand{\oset}[2]{%
  {\mathop{#2}\limits^{\vbox to -.5\ex@{\kern-\tw@\ex@
   \hbox{\scriptsize #1}\vss}}}}
\makeatother

\usepackage{newpxmath}
\usepackage{microtype} % Slightly tweak font spacing for aesthetics

\usepackage[utf8]{inputenc} % Required for including letters with accents
\usepackage[T1]{fontenc} % Use 8-bit encoding that has 256 glyphs


\begin{document}

我希望它适用于以下示例:

Original 1: $X_n\overset{P}{\to} X$

Original 2: $X_n\overset{D}{\to} X$

Original 3: $X_n\overset{\text{$r$th}}{\to} X$

Original 4: $X_n\overset{\text{i.i.d.}}{\sim} X$


Testing 1: $X_n\oset{P}{\to} X$

Testing 2: $X_n\oset{D}{\to} X$

Testing 3: $X_n\oset{\text{$r$th}{\to} X$

Testing 4: $X_n\oset{\text{i.i.d.}{\sim} X$
\end{document}

在此处输入图片描述

周围的间距\to似乎不对。你们能帮我想出一个更可靠的解决方案吗?

答案1

为了获得更好的宏水平间距\oset- 具体来说,使其间距与“关系运算符”的间距相同(这是的情况\to) - 您可以将宏的定义包裹在\mathrel包装器中。

为了使\oset宏可用于基座和上标位置的不同符号/字母,需要引入第三个可选参数: 的参数\vbox。其默认值0pt适用于上标位置的单个大写字母和基座位置的箭头。对于其他组合,您需要进行一些实验以找到上标项应升高的合适距离;以下示例中给出的值可能适用于所选的数学字体(newpxmath)。如果您使用不同的数学字体,可能需要选择不同的值。

在此处输入图片描述

\documentclass[11pt]{book}
\usepackage[utf8]{inputenc} 
\usepackage[T1]{fontenc} 
\usepackage{booktabs} % for '\midrule' macro
\usepackage{amsmath}  % for '\overset' macro
\usepackage{newpxmath,newpxtext}

% new \oset macro:
\makeatletter
\newcommand{\oset}[3][0ex]{%
  \mathrel{\mathop{#3}\limits^{
    \vbox to#1{\kern-2\ex@
    \hbox{$\scriptstyle#2$}\vss}}}}
\makeatother

\begin{document}
\[
\begin{array}[t]{@{}c@{}}
\text{with \texttt{\string\overset}}\\
\midrule
X_n\overset{P}{\to} X \\
X_n\overset{D}{\to} X \\
X_n\overset{j}{\to} X \\
X_n\overset{\text{rth}}{\to} X \\
X_n\overset{\text{i.i.d.}}{\sim} X
\end{array}
\qquad
\begin{array}[t]{@{}c@{}}
\text{with \texttt{\string\oset}}\\
\midrule
X_n\oset{P}{\to} X \\
X_n\oset{D}{\to} X \\
X_n\oset[.35ex]{j}{\to} X \\
X_n\oset[.45ex]{\text{rth}}{\to} X \\
X_n\oset[.6ex]{\text{i.i.d.}}{\sim} X
\end{array}
\]
\end{document}

附录,2022 年 8 月:我收到一份请求,要求我解释如何修改\oset\uset以便放置补充材料以下而不是多于箭头。我认为应该这样做:

\makeatletter
\newcommand{\uset}[3][0ex]{%
  \mathrel{\mathop{#3}\limits_{
    \vbox to#1{\kern-7\ex@
    \hbox{$\scriptstyle#2$}\vss}}}}
\makeatother

的定义\uset相对于 的定义有2处变化\oset

  • ^被替换为_(“下划线”)

  • \kern-2\ex@被替换为\kern-7\ex@


补充说明:箭头下方的内容是在\scriptstyle数学模式下排版的;对于单个字母或符号来说,这没问题。对于较长的表达式,例如i.i.d.,您可能需要将字体大小再缩小一点。例如,可以通过更改

X_n\uset{\textup{i.i.d.}}{\sim} X

X_n\uset{\textup{\tiny i.i.d.}}{\sim} X

我认为这句话适用于 和\uset\oset例如,人们可能更喜欢 的结果X_n\oset[.3ex]{\text{\tiny i.i.d.}}{\sim} X而不是 的结果X_n\oset[.6ex]{\text{i.i.d.}}{\sim} X

答案2

我来到这里,\lower发现\raiseTeX “原语”https://www.tug.org/utilities/plain/cseq.html. 并且手动降低和升高箱子\overset对我来说很完美。

\overset{\lower.5em\hbox{aaa}}{bbb}

相关内容