This is very nitpicky, but in using \xrightleftharpoons in mathtools, the arrows it outputs can look rather uneven or bumpy:

bumpy arrows

This is, of course, particularly visible for long arrows. It happens when I use pdflatex, and it also happens when I use standard latex (and LaTeXit). It also happens when using mhchem and other packages, and appears in the documentation for those packages. It happens on both OS X (Preview, Skim, and Acrobat) and RHEL, but is not visible on a high-DPI OS X screen (I'm guessing it's there, just not enough of an effect to be visible). It looks like the arrow creation code here is combining a number of short segments that are slightly out of alignment, causing the display to display them differently.

Interestingly, these don't appear in the examples in this question, even though the same MWEs do produce them when I run them.

Here's a MWE:

  A \xrightleftharpoons[k_f e^{-2 G_{se}}]{k_f} B

Is there some way I can prevent this from happening?

  • 2
    Extensible symbols are typically exactly what you mention: the concatenation of a number of symbols to form an extension. Zoom in closer and you'll see the problem disappear. It will also not show in as such in the printed version.
    – Werner
    Jun 1, 2016 at 4:11
  • The problem here is that many people aren't going to be printing out the paper, and expecting them to zoom in to an unusable extent to make the equations look decent isn't reasonable. Is there a way around this (other than using tikz/etc)? Jun 1, 2016 at 8:13
  • Not that I can think of. What if "many people" just don't care about this?
    – Werner
    Jun 1, 2016 at 14:42

1 Answer 1


I've ended up using a TikZ-based solution, as it seems that extensible symbols are just not going to give reliably good results. The following makes something quite close to xrightleftharpoons, with a slightly different format:

\setlength{\dimen9}{\maxof{\widthof{$\displaystyle #1$}}{\widthof{$\displaystyle #2$}}}%
\mathrel{\tikz[baseline=-\the\dimexpr\fontdimen22\textfont2\relax ]{%
\draw[-{To[left]},above=0.1em,line width=0.4pt] (0,0) -- node[above=-1pt] {$\scriptstyle #1$} (\the\dimen9+1pt,0);
\draw[-{To[left]},above=-0.1em,line width=0.4pt] (\the\dimen9+1pt,0) -- node[below] {$\scriptstyle #2$} (0,0);

This is not ideal, and not particularly flexible; the extension calculations are a bit hackish, and there is fiddling with the spaces (and of course the coding itself is hackish). However, it does result in arrows that aren't broken:

enter image description here

If I have time, I may consider making a more reliable version and potentially a package.

As an aside, I should note that if this is the normal output for extensible symbols, it's really disappointing and would seem to go against the goals of TeX in general. Yet it seems to show up in some cases and not others: a few people today showed me instances where it did not show up for them, though it may have been because they were using high DPI phone screens.

I understand that all this is absurdly nitpicky and obsessive, and that few people will probably care much.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .