由线段与短箭头组成的长箭头

由线段与短箭头组成的长箭头

考虑以下来自 egreg 的代码

\documentclass{article}

\newcommand{\strutarrow}[2]{%
  \vrule width 0pt height 2\fontdimen22
  \ifx#1\displaystyle\textfont\else
    \ifx#1\textstyle\textfont\else
      \ifx#1\scriptstyle\scriptfont\else
  \scriptscriptfont\fi\fi\fi 2
  {#2}%
}
\newcommand{\srightarrow}{%
  \mathrel{\mathpalette\strutarrow\longrightarrow}%
}

\begin{document}

\fbox{$\srightarrow$}

\end{document}

箭

可以看出,长箭头由线段和短箭头组成。

我该如何“修复”这个问题,让箭头不留凹痕?

答案1

定义\longrightarrow

\def\longrightarrow{\relbar\joinrel\rightarrow}

您可以通过以下方式纠正上面提到的缺陷:

\def\longrightarrow{\relbar\joinrel\mkern-1mu\rightarrow}

请注意,这个问题与问题中提到的代码没有任何共同之处。代码仅添加了不可见的支柱(取决于数学样式)。

答案2

您可以使用宏添加一个小的负空间\!。将其插入之前#2似乎可以解决问题:

\documentclass{article}

\newcommand{\strutarrow}[2]{%
  \vrule width 0pt height 2\fontdimen22
  \ifx#1\displaystyle\textfont\else
    \ifx#1\textstyle\textfont\else
      \ifx#1\scriptstyle\scriptfont\else
  \scriptscriptfont\fi\fi\fi 2
  \!{#2}%
}
\newcommand{\srightarrow}{%
  \mathrel{\mathpalette\strutarrow\longrightarrow}%
}

\begin{document}
\fbox{$\srightarrow$}
\end{document}

相关内容