考虑以下来自 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}