顶部带有内容的减号

顶部带有内容的减号

我想创建一个运算符,其作用类似于减号(包括空格),但字符位于res顶部(在\textrm模式下)。减号的长度应调整为看起来像在res字符下划线,并且它需要在下标中工作。目前我正在使用

\newcommand{\residue}[2]{#1\overset{\text{res}}{\relbar\mathrel{\mkern-3mu}\relbar\rule{0pt}{2pt}}#2}

这意味着我使用的运算符是

\relbar\mathrel{\mkern-3mu}\relbar\rule{0pt}{2pt}

但是它在两个破折号之间留了一些空间(尤其是在下标中),并且在内联或显示模式下,字母左侧的线太多res

有什么更好的方法来产生这个符号?

答案1

下面的示例定义了\res一个带有可选参数的宏,其文本不同于res

  • 文字大小为上标(\scriptsize\scriptscriptsize)的大小。不建议使用较小的尺寸,以免需要放大镜。

  • 文本和减号之间的垂直距离大约为文本和下划线之间的距离\underline

  • 通过添加一些重叠的减号可以创建更长的减号。

\documentclass{article}

\usepackage{amsmath}

% test for different fonts
%\usepackage{MnSymbol}
%\usepackage{mathabx}
%\usepackage{txfonts}

\makeatletter
\newcommand*{\res}[1][res]{%
  \mathbin{%
    \mathpalette\@res{\mathrm{#1}}%
  }%
}
\newmuskip\res@sidebearing
\setlength{\res@sidebearing}{1.5mu}% e.g. 1.5mu/CM, 1mu/MnSymbol
\newcommand*{\@res}[2]{%
  % #1: math style
  % #2: text
  \sbox0{$%
    \m@th
    \res@style#1%
    #2%
  $}%
  \sbox2{$\m@th#1\mkern-\res@sidebearing-\mkern-\res@sidebearing$}%
  \setbox4=\copy2 %
  \ifdim\wd4<\wd0 %
    \@whiledim\wd4<\wd0\do{%
      \dimen@=\dimexpr\wd4+.8\wd2\relax
      \ifdim\dimen@<\wd0 %
        \sbox4{\unhcopy4\hss\kern-.2\wd2\unhcopy2}%
      \else
        \setbox4=\hbox to \wd0{%
          \unhcopy4\hss\kern-.2\wd2\unhcopy2%
        }%
      \fi
    }%
  \fi
  \sbox6{$#1\vcenter{}$}%
  % \sbox8{$#1\mathop{}\limits^{}$}% alternative
  \sbox8{$\res@style#1\underline{}$}% ht8 + dp8 = 5 theta; sep = 3 theta
  \mkern1.5mu %
  \rlap{\copy4}%
  \hbox to \wd4{%
    \hfill
    % \raisebox{\dimexpr\dp0+\ht6+.5\ht8\relax}{\copy0}% alternative
    \raisebox{\dimexpr\dp0+\ht6+.7\dimexpr\ht8+\dp8\relax\relax}{\copy0}%
    \hfill
  }%
  \mkern1.5mu %
}
\newcommand*{\res@style}[1]{%
  \ifx#1\displaystyle
    \scriptstyle
  \else
    \ifx#1\textstyle
      \scriptstyle
    \else
      \scriptscriptstyle
    \fi
  \fi
}
\makeatother

\begin{document}
% Test: "res" and long word "garbage" with descender
\begin{gather*}
  \displaystyle      A \res B \res[garbage] C \res[r] D \\
  \textstyle         A \res B \res[garbage] C \res[r] D \\
  \scriptstyle       A \res B \res[garbage] C \res[r] D \\
  \scriptscriptstyle A \res B \res[garbage] C \res[r] D
\end{gather*}
\end{document}

结果

减号的难点和性质:

  • 线条粗细未知。因此\underline或的线条粗细\frac可能不同。

  • \underline在许多字体中,线条末端都是圆的。和的线条\frac不是圆的,因为它们是规则的或矩形。

  • 侧轴承(两端的水平空间)未知。实现定义了一个数学跳过寄存器\res@sidebearing 以进行微调。

  • 至少知道垂直位置,这应该是数学轴。

评论:

  • 框 0 包含上标大小的测试。

  • 盒子 2 包含减号减侧轴承。

  • 框 4 由尽可能多的框 2 构成,以获得足够长的一行来容纳文本。

  • 框 6 的高度是数学轴。

  • 框 8:\underline{...}类似于:

    \vtop{
      \hbox{...}
      \kern 3θ
      \hrule height θ
      \kern θ
    }
    

    框 8 为空\underline{},可用于计算分离空间 3θ 0.6\dimexpr\ht8+\dp8\relax:。

    还需要添加减法规则的一半高度,并用 θ/2(数学轴上方的部分)近似。

  • \m@th\mathsurround=0pt避免额外水平间距的缩写,如果\mathsurround设置了的话。

  • \mathpalette有助于设置当前数学风格的公式。

答案2

也许下面的方法适合你;我把符号从 稍微\residue{A}{B}改为A \residue B

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath,graphicx}
\begin{document}

\noindent
\begin{tabular}{@{}*{3}{p{.3333\linewidth}@{}}}
  \texttt{Original} & \texttt{Choice 1} & \texttt{Choice 2} \\
  \newcommand{\residue}[2]{#1\overset{\text{res}}{\relbar\mathrel{\mkern-3mu}\relbar\rule{0pt}{2pt}}#2}

  $\residue{A}{B}$ \par
  $C^{\residue{A}{B}}$ \par
  $C^{D^{\residue{A}{B}}}$

  &

  \makeatletter
  \newcommand{\residue@}[1]{#1\overset{\text{\raisebox{.15em}{res}}}{\smash{-\mkern-5mu-}}}
  \newcommand{\residue}{\mathbin{\mathpalette\residue@\relax}}
  \makeatother

  $A \residue B$ \par
  $C^{A \residue B}$ \par
  $C^{D^{A \residue B}}$

  &

  \newcommand{\residue}{\mathbin{\mathchoice
    {\overset{\text{\raisebox{.15em}{res}}}{\smash{-\mkern-5mu-}}}% \displaystyle
    {\overset{\text{\raisebox{.15em}{res}}}{\smash{-\mkern-5mu-}}}% \textstyle
    {\overset{\text{\raisebox{.15em}{res}}}{\smash{-\mkern-5mu-}}}% \scriptstyle
    {\overset{\text{\raisebox{.1em}{\scalebox{.8}{res}}}}{\smash{-\mkern-5mu-}}}% \scriptscriptstyle
  }}

  $A \residue B$ \par
  $C^{A \residue B}$ \par
  $C^{D^{A \residue B}}$

\end{tabular}
\end{document}
  • 选择 1用于\mathpalette提供数学样式之间的切换(参见的奥秘\mathpalette)。

  • 选择 2直接使用\mathchoice,以便更好地res\scriptscriptstyle级别上进行扩展,因为没有\scriptscriptscriptstyle(作为\overset参数\scriptscriptstyle- 在超级/子子脚本中从技术上来说需要它)。

相关内容