更改重叠垂直空间的新命令不起作用

更改重叠垂直空间的新命令不起作用

我想减少符号和字母之间的垂直间距。我有以下代码,使用新命令 $\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}

答案3

为什么不使用\accentset命令?

\documentclass{article}
\usepackage{amsmath, amssymb}
\usepackage{accents}

\begin{document}

$\accentset{\sim}{t}$ compared to $ \tilde{t} $ and to $\widetilde{t}$

\end{document} 

在此处输入图片描述

相关内容