There's a bump in the implies glyph

The problem is this: \Longrigtharrow (over which \implies is defined) is built with two characters that come from different fonts.

The equals sign for lengthening the arrow is taken from \textfont0 (the normal text font), while the arrow (\Rightarrow) is taken from \textfont2 (the math symbol font).

When a current font size is 10pt, lmodern defines \textfont0 as rm-lmr10 (the prefix rm means OT1 encoding) and \textfont2 as lmsy10 and all is good. If the current font size is 11pt, the fonts are rm-lmr10 at 10.95pt and lmsy10 at 10.95pt, which again agree with each other.

The problem is at 12pt: in this case \textfont0 is rm-lmr12, while \textfont2 is lmsy10 at 12pt. Here is where the problem arises: the thickness of the strokes is scaled for \Rightarrow but not with = and the difference is noticeable, particularly at low resolution.

The following image is taken at 4x magnification (\mag=4000) by compiling with pdftex the input

\mag=4000
\font\xy=lmsy10 at 12pt
\font\xz=rm-lmr12
\textfont2=\xy \textfont0=\xz
$\Longrightarrow$
\bye

enter image description here

and the difference cannot be attributed to pixel adjustments of the onscreen previewer.

A possible workaround is to redefine the font used for \textfont0 to use scaled rm-lmr10 when the current font size is above 10pt and using T1 as the default encoding for text fonts.

\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\makeatletter
% Load the OT1 definitions for lmodern
\input{ot1lmr.fd}
% Change the definition for \OT1/lmr/m/n/<size>
\DeclareFontShape{OT1}{lmr}{m}{n}%
  {<-5.5>    rm-lmr5  <5.5-6.5> rm-lmr6
   <6.5-7.5> rm-lmr7  <7.5-8.5> rm-lmr8
   <8.5-9.5> rm-lmr9  <9.5->    rm-lmr10
  }{}
\makeatother

\begin{document}
\noindent
$\Longrightarrow$\\
The text font\\
is \expandafter\texttt\expandafter{\fontname\font}
\end{document}

enter image description here


Package amsmath uses \Longrightarrow to get the \Implies symbol. \Longrightarrow and \Longleftarrow are composed symbols with the standard fonts (unless a math font is used, which contain ready glyphs for the symbol). The arrow is taken from \Rightarrow and \Leftarrow, the equals sign = is used as prolongation, see macro \Relbar. At larger font sizes, the lines do not match too well, as can be observed in the image of the question.

A minimal example:

\documentclass{article}
\begin{document}
  \Huge$\Longrightarrow$
\end{document}

Problem: \Longrightarrow as composed symbol

The following reimplementation of \Longrightarrow and \Longleftarrow uses a different method to get the prolongation. Instead of using the equals sign, the left part of \Rightarrow is used for the left part of the new macro \NewRelbar and the right part of \Leftarrow is used for the right part of \Leftbar. The width of the equal sign is too large to be able to take the prolongation in one piece. Also the side bearings are preserved and the new symbol can be used both for \Longrightarrow and \Longleftarrow.

Example with implementation and test:

\documentclass{article}

% Save original macros
% --------------------
\usepackage{letltxmacro}

\LetLtxMacro\OriginalLongrightarrow\Longrightarrow
\LetLtxMacro\OriginalLongleftarrow\Longleftarrow

% Implement new macros
% --------------------
\usepackage{trimclip}
\DeclareRobustCommand\Longrightarrow{\NewRelbar\joinrel\Rightarrow}
\DeclareRobustCommand\Longleftarrow{\Leftarrow\joinrel\NewRelbar}

\makeatletter
\DeclareRobustCommand\NewRelbar{%
  \mathrel{%
    \mathpalette\@NewRelbar{}%
  }%
}
\newcommand*\@NewRelbar[2]{%
  % #1: math style
  % #2: unused
  \sbox0{$#1=$}%
  \sbox2{$#1\Rightarrow\m@th$}%
  \sbox4{$#1\Leftarrow\m@th$}%
  \clipbox{0pt 0pt \dimexpr(\wd2-.6\wd0) 0pt}{\copy2}%
  \kern-.2\wd0 %
  \clipbox{\dimexpr(\wd4-.6\wd0) 0pt 0pt 0pt}{\copy4}%
}
\makeatother

% Testing
% -------
\usepackage{booktabs}
\usepackage{color}
\begin{document}
  \Huge
  \newcommand*{\Test}[1]{%
    \color{red}%
    $#1\OriginalLongrightarrow\OriginalLongleftarrow$&%
    \color{blue}%
    $#1\Longrightarrow\Longleftarrow$%
  }
  \begin{tabular}{cc}
    \toprule
    Original & New \\
    \midrule
    \Test{}\\
    \Test\scriptstyle\\
    \Test\scriptscriptstyle\\
    \bottomrule
  \end{tabular}
\end{document}

Result