移动二元运算符的下标

移动二元运算符的下标

我有一些代码,其中写了这个:$\sim_r$。我想将此命令用作二元运算符(与$\sim$通常使用的方式相同,但带有下标)。

我想创建一个自定义命令,以便下标r立即出现在波浪号下方,而不是右侧。我试过这个:

\newcommand{\stb}[1]{{\genfrac{}{}{-2pt}{}{\sim}{#1}}}

但看起来很糟糕,因为波浪号和 之间的间隙太大r。有人有简单的解决办法吗?

如果这个问题太简单的话,抱歉!

答案1

以下用途\mathpalette协商不同的数学字体样式,以及\ooalign覆盖\simr进入\simr

在此处输入图片描述

\documentclass{article}

\usepackage{amsmath,graphicx}

% \reducesize{<math style>}}{<object>}
\newcommand{\reducesize}[2]{%
  \mathbin{% This will be a binary math symbol (in terms of spacing around it)
    \ooalign{% Overlay a number of symbols
      $#1\sim$% First symbol (\sim in correct math style)
      \cr % Move to next symbol
      \hidewidth% Move symbol to right (~\hfill)
      \raisebox% Adjust vertical positioning of <object>
        {-.25ex}% Move it down relative to current font
        {\scalebox% Change the "font size"
          {.5}% to 50% of current font size
          {$#1#2$}% <object> in current math style
        }% \raisebox
      \hidewidth% Move symbol to left (~\hfill)
    }% \ooalign
  }% \mathbin
}% \reducesize
\newcommand{\simr}{\mathpalette\reducesize{r}}

\begin{document}

$a \simr b_{a \simr b_{a \simr b}}$

\end{document}

答案2

欢迎来到 TeX.SX!这里有一个可以让你开始的地方,以及已经给出的评论中的答案的比较。我借用了另一个答案关于如何显示基线。让我们比较一下几种方法:

在此处输入图片描述

这是代码:

\documentclass[margin=5mm]{standalone}

\usepackage{amsmath,stackengine,calc}

\newsavebox\textbox
\newcommand\showbaseline[1]{%
  \leavevmode
  \sbox\textbox{#1}%
  \rlap{\rule{\wd\textbox}{.1pt}}%
  \usebox\textbox
}

\def\stackalignment{c}
\stackMath

\begin{document}

\showbaseline{
$a \sim b$
\hspace{5pt} $a \sim_r b$
\hspace{5pt} $a \genfrac{}{}{-2pt}{}{\sim}{r} b$
\hspace{5pt} $a \underset{r}{\sim} b$
\hspace{5pt} $a \sim_{\hspace{-7pt}r\hspace{3pt}} b$
\hspace{5pt} $a \stackengine{0pt}{\sim}{\scriptstyle{r}}{U}{\stackalignment}{\quietstack}{\useanchorwidth}{\stacktype} b$
\hspace{5pt} $a\ \stackengine{0pt}{\sim}{\scriptstyle{r}}{U}{\stackalignment}{\quietstack}{\useanchorwidth}{\stacktype}\ b$}

\end{document}

从你的问题来看,你似乎想要第 5 种方法 - 只需将下标\sim_r向后移动 - 但这是 hacky,因为你需要知道精确的符号宽度才能做到这一点(因此不具有普遍性)。我认为你实际上想要第 7 种方法 - 使用stackengine包装并将间距调整回应有的大小。可能有比只放一个空格更优雅的方法\

相关内容