![更改重叠垂直空间的新命令不起作用](https://linux22.com/image/403745/%E6%9B%B4%E6%94%B9%E9%87%8D%E5%8F%A0%E5%9E%82%E7%9B%B4%E7%A9%BA%E9%97%B4%E7%9A%84%E6%96%B0%E5%91%BD%E4%BB%A4%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我想减少符号和字母之间的垂直间距。我有以下代码,使用新命令 $\oset$ 可以给出我需要的输出。但不幸的是,我得到了一个编译错误,即:缺少 $ 插入。当我使用 $\overset$ 时,输出是错误的,但编译器可以工作。
\documentclass{article}
\usepackage{amsmath}
\makeatletter
\newcommand{\oset}[2]{%
{\mathop{#2}\limits^{\vbox to -.5\ex@{\kern-\tw@\ex@
\hbox{\scriptsize #1}\vss}}}}
\makeatother
\begin{document}
$\oset{\sim}{t}$ gives a compiling error.
$\overset{\sim}{t}$ works, but the $\sim$ too high.
\end{document}
答案1
应该是\hbox{$\scriptstyle#1$}
。然而,有一个更好的方法:
\documentclass{article}
\usepackage{amsmath}
\makeatletter
\newcommand{\oset}[2]{{\mathpalette\o@set{{#1}{#2}}}}
\newcommand{\o@set}[2]{\o@@set{#1}#2}
\newcommand{\o@@set}[3]{%
\vbox{\offinterlineskip
\ialign{\hfil##\hfil\cr
$\m@th\o@set@demote{#1}#2$\cr
\noalign{\vskip0.2pt}
$\m@th#1#3$\cr
}%
}%
}
\newcommand{\o@set@demote}[1]{%
\ifx#1\displaystyle\scriptstyle\else
\ifx#1\textstyle\scriptstyle\else
\scriptscriptstyle\fi\fi
}
\makeatother
\begin{document}
$\oset{\sim}{t}$ versus $\tilde{t}$
\end{document}
另一方面,\tilde{t}
看起来好多了。
为了完整性,这里介绍如何定义\uset
和\ouset
。
\documentclass{article}
\usepackage{amsmath}
\usepackage{accents} % for comparison
\makeatletter
\newcommand{\oset}[2]{{\mathpalette\o@set{{#1}{#2}}}}
\newcommand{\uset}[2]{{\mathpalette\u@set{{#1}{#2}}}}
\newcommand{\ouset}[3]{\oset{#1}{\uset{#2}{#3}}}
\newcommand{\o@set}[2]{\o@@set{#1}#2}
\newcommand{\o@@set}[3]{%
\vbox{\offinterlineskip
\ialign{\hfil##\hfil\cr
$\m@th\ou@set@demote{#1}#2$\cr
\noalign{\vskip0.2pt}
$\m@th#1#3$\cr
}%
}%
}
\newcommand{\u@set}[2]{\u@@set{#1}#2}
\newcommand{\u@@set}[3]{%
\vtop{\offinterlineskip
\ialign{\hfil##\hfil\cr
$\m@th#1#3$\cr
\noalign{\vskip0.6pt}
$\m@th\ou@set@demote{#1}#2$\cr
}%
}%
}
\newcommand{\ou@set@demote}[1]{%
\ifx#1\displaystyle\scriptstyle\else
\ifx#1\textstyle\scriptstyle\else
\scriptscriptstyle\fi\fi
}
\makeatother
\begin{document}
$\oset{\sim}{t}$ versus $\tilde{t}$
$\uset{x}{t}$ versus $\underaccent{x}{t}$
$\ouset{\sim}{x}{t}$ versus $\underaccent{x}{\tilde{t}}$
\end{document}
答案2
请记住:也可以使用mtpro2
(我很喜欢这个包),精简版。这里有几个示例,与您对波浪符号长度的喜好有关。垂直间距是自动的。
\documentclass{article}
\usepackage[lite]{mtpro2}
\begin{document}
\[
\tilde t+\wtilde t +\wwtilde t+\widetilde t
\]
\end{document}