我有一些代码,其中写了这个:$\sim_r$
。我想将此命令用作二元运算符(与$\sim$
通常使用的方式相同,但带有下标)。
我想创建一个自定义命令,以便下标r
立即出现在波浪号下方,而不是右侧。我试过这个:
\newcommand{\stb}[1]{{\genfrac{}{}{-2pt}{}{\sim}{#1}}}
但看起来很糟糕,因为波浪号和 之间的间隙太大r
。有人有简单的解决办法吗?
如果这个问题太简单的话,抱歉!
答案1
以下用途\mathpalette
协商不同的数学字体样式,以及\ooalign
覆盖\sim
并r
进入\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
包装并将间距调整回应有的大小。可能有比只放一个空格更优雅的方法\
。