\xrightarrow 的最小长度

\xrightarrow 的最小长度

我想在箭头上放置文本。显然,使用 amsmath 命令是最佳选择。\xrightarrow{#1}然而,有时上面的文本可能是一位数字:

%Example 1
\xrightarrow{1}

其他时候,文本会稍微长一些:

%Example 2
\xrightarrow{1000}

我遇到的问题是箭头的长度与文本的长度成比例。因此示例 1 中的箭头比示例 2 中的箭头短得多。

有没有办法让箭头的长度相同?我应该使用完全不同的命令吗?

答案1

在这种情况下,命令\makebox很方便。它将参数文本放入可自定义宽度的框中。在数学模式下,更有用的\mathmakeboxmathtools包,因为它在数学模式下运行得更好并且尊重当前的数学风格。

因此,我们可以从 开始\xrightarrow{\mathmakebox[3em]{1}}。但我们可以做得更好 - 让我们为此编写一个宏,它会产生与我们指定的文本相同宽度的箭头。这是一个完整的示例:

\documentclass{article}
\usepackage{amsmath}
\usepackage{mathtools}
\newlength{\arrow}
\settowidth{\arrow}{\scriptsize$1000$}
\newcommand*{\myrightarrow}[1]{\xrightarrow{\mathmakebox[\arrow]{#1}}}
\begin{document}
$\myrightarrow{1}$

$\myrightarrow{1000}$
\end{document}

替代文本

答案2

通过使用包,可以进一步改进可接受的答案xparse。我们可以为所有 s 定义一个全局最小宽度,xrightarrow同时仍允许在必要时拉伸箭头:

\documentclass{article}

\usepackage{mathtools}
\usepackage{xparse}

\newlength{\minarrow}
\settowidth{\minarrow}{\scriptsize$1000$}

\NewDocumentCommand{\myarrow}{sm}{
  \IfBooleanTF{#1}{
    \xrightarrow{#2}
  }{
    \xrightarrow{\mathmakebox[\minarrow]{#2}}
  }
}

\begin{document}
  \(\myarrow{1}\)
  \(\myarrow*{This is a sentence longer than the minimum length.}\)
\end{document}

我们使用带星号的命令版本来表示允许此箭头伸展。有些人可能会认为这不是一种改进,因为现在我们可能拥有不同长度的重叠箭头,但在战争和爱情中一切都是允许的。

相关内容