I want to place text over arrows. The obvious choice is to use the amsmath command \xrightarrow{#1} However, sometimes the text above may be a single digit:

%Example 1

other times the text is slightly longer:

%Example 2

The problem I have is that the length of the arrow is scaled to the length of the text. So the arrow in example 1 is much shorter than the arrow in example 2.

Is there a way of making the arrows the same length? Should I use a different command altogether?


In such cases, the command \makebox comes handy. It puts the argument text into a box of customizable width. Even more useful in math mode is \mathmakebox provided by the mathtools package, because it's working better in math mode and respects the current math style.

So, we could start with \xrightarrow{\mathmakebox[3em]{1}}. But we can do better - let's write a macro for that, which produces an arrow of the same width like a text we specify. Here's such a complete example:



alt text

| improve this answer | |

The accepted answer could be improved further with the use of the xparse package. We could define a global minimum width for all xrightarrows while still allowing for the stretching of the arrow when necessary:





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

We use the starred version of the command to indicate that this arrow is is allowed to stretch. Some might argue this is not an improvement, as now we might have overset arrows of different lengths, but in war and love everything is permitted.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.