我怎样才能减少重叠空间?我在网上找到了这个解决方案,但它看起来不太像原始的重叠(请注意,我知道很难想出一个优雅地处理所有情况的解决方案,但我列出了 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
发现\raise
TeX “原语”https://www.tug.org/utilities/plain/cseq.html. 并且手动降低和升高箱子\overset
对我来说很完美。
\overset{\lower.5em\hbox{aaa}}{bbb}