5

I am looking for a variant of \Rightarrow with two arrowheads like \RightArrow, call it \RightArrow. Need a similar symbol for \LeftArrow as well. Thanks in advance.

My first attempt is:

\def\RightArrow{\Rightarrow\makebox{\hspace*{-13pt}$\Rightarrow$}}

EDIT:

In the best case, I would like the new symbol \RightArrow to be as pretty and as well proportioned as \Rightarrow. If this is not feasible then I will settle for a solution that is better than my first attempt. Thanks.

userOne
  • 147

4 Answers4

5

Here are two solutions, based partly or fully on glyphs in mathabx:

\documentclass{article}
 \usepackage{amssymb, mathtools}
\usepackage{graphicx} 
\DeclareFontFamily{U}{matha}{\hyphenchar\font45}
\DeclareFontShape{U}{matha}{m}{n}{ <-6> matha5 <6-7> matha6 <7-8>
matha7 <8-9> matha8 <9-10> matha9 <10-12> matha10 <12-> matha12 }{}
\DeclareSymbolFont{matha}{U}{matha}{m}{n}

\DeclareFontFamily{U}{mathb}{\hyphenchar\font45}
\DeclareFontShape{U}{mathb}{m}{n}{ <-6> matha5 <6-7> matha6 <7-8>
mathb7 <8-9> mathb8 <9-10> mathb9 <10-12> mathb10 <12-> mathba12 }{}
\DeclareSymbolFont{mathb}{U}{mathb}{m}{n}
%
\DeclareMathSymbol{\ggcurly}{\mathrel}{mathb}{"CF}
\DeclareMathSymbol{\gcurly}{\mathrel}{mathb}{"A1}
\DeclareMathSymbol{\varRightarrow}{\mathrel}{matha}{"F1}
\DeclareMathSymbol{\varRelbar}{\mathrel}{matha}{"F9}

\newcommand\RightArrow{\mathrel{\Relbar\mkern-10.5mu\raisebox{0.05ex}{\scalebox{0.9}{$ \ggcurly $}}}}
\newcommand\varRightArrow{\mathrel{\varRightarrow\mkern-11mu\raisebox{0.06ex}{\scalebox{0.8}[0.89]{$ \gcurly $}}}}

\newcommand\LongRightArrow{\mathrel{\Relbar\mkern-2.8mu\Relbar\mkern-10.5mu\raisebox{0.05ex}{\scalebox{0.9}{$ \ggcurly $}}}}
\newcommand\varLongRightArrow{\mathrel{\varRelbar\mkern-2.8mu\varRightarrow\mkern-11mu\raisebox{0.06ex}{\scalebox{0.8}[0.89]{$ \gcurly $}}}}


\begin{document}

\begin{alignat*}{2}%
A & \RightArrow B &\qquad A & \LongRightArrow B\\
 A & ⇒ B & A & \Longrightarrow B\\%
A & \varRightArrow B & A & \varLongRightArrow B\\
 \end{alignat*}

 \end{document} 

enter image description here

Manuel
  • 27,118
Bernard
  • 271,350
  • In your solution, instead of using \ggcurly as the outer arrow tip, is it possible to make a copy of the inner arrow tip (one from \implies or \Rightarrow) and use that as the outer arrow tip? This will make the new symbol \RightArrow very much similar to \Rightarrow or \implies in its look-and-feel. Thanks – userOne Nov 08 '16 at 18:58
  • Unfortunately, I don't know of any glyph which would be only the arrow tip. Maybe looking at the metafont code, and using metapost to change it to a postscript file, some specialist could do that. But is it worth the effort? – Bernard Nov 08 '16 at 19:08
4

Here is a solution based on TikZ, and inspired by the solution of Heiko Oberdiek. I have defined \Implies and \Impliedby for ease of use with correct spacing. This solution adapts to the smaller fonts used in super-/subscripts.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{graphs}
\usetikzlibrary{arrows.meta}
\usepackage{amsmath}
\begin{document}

\makeatletter

\newcommand*{\RightArrow}{\mathrel{\mathpalette{\@RightArrow}{}}}
\newcommand*{\LeftArrow}{\mathrel{\mathpalette{\@LeftArrow}{}}}

\newcommand*{\@RightArrow}[1]{%
    % Get the line width for this math style
    \edef\@LineWidth{%
        \the\fontdimen8
        \ifx#1\displaystyle\textfont
        \else\ifx#1\textstyle\textfont
        \else\ifx#1\scriptstyle\scriptfont
        \else\scriptscriptfont
        \fi\fi\fi
        3}
    \edef\@ScaleWidth{%
        \ifx#1\displaystyle0.39
        \else\ifx#1\textstyle0.39
        \else\ifx#1\scriptstyle0.35
        \else0.31
        \fi\fi\fi}
    \text{$\tikz
    \draw[double equal sign distance, line width=\@LineWidth,
    -{Implies[sep=-0.5ex] . Computer Modern Rightarrow[scale width=\@ScaleWidth, scale length=0.8]}]
    (0,0) -- (1.5em,0);$}}

\newcommand*{\@LeftArrow}[1]{%
    % Get the line width for this math style
    \edef\@LineWidth{%
        \the\fontdimen8
        \ifx#1\displaystyle\textfont
        \else\ifx#1\textstyle\textfont
        \else\ifx#1\scriptstyle\scriptfont
        \else\scriptscriptfont
        \fi\fi\fi
        3}
    \edef\@ScaleWidth{%
        \ifx#1\displaystyle0.39
        \else\ifx#1\textstyle0.39
        \else\ifx#1\scriptstyle0.35
        \else0.31
        \fi\fi\fi}
    \text{$\tikz
    \draw[double equal sign distance, line width=\@LineWidth,
    -{Implies[sep=-0.5ex] . Computer Modern Rightarrow[scale width=\@ScaleWidth, scale length=0.8]}]
    (1.5em,0) -- (0,0);$}}

\makeatother

\newcommand*{\Implies}{\DOTSB\;\RightArrow\;}
\newcommand*{\Impliedby}{\DOTSB\;\LeftArrow\;}
\[
    a \implies b \qquad a \Implies b \qquad a \Impliedby b
\]
\[
    x^{a \implies b} \qquad x^{a \Implies b} \qquad x^{a \Impliedby b}
\]
\[
    x^{x^{a \implies b}} \qquad x^{x^{a \Implies b}} \qquad x^{x^{a \Impliedby b}}
\]
\end{document}

Result

It should be possible to simplify this code, avoiding the redundant code, but I am not skilled enough with TeX programming to do so.


Alternative solution

This solution uses equal arrowheads, as requested by the original poster.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{graphs}
\usetikzlibrary{arrows.meta}
\usepackage{amsmath}
\begin{document}

\makeatletter

\newcommand*{\RightArrow}{\mathrel{\mathpalette{\@RightArrow}{}}}
\newcommand*{\LeftArrow}{\mathrel{\mathpalette{\@LeftArrow}{}}}

\newcommand*{\@RightArrow}[1]{%
    % Get the line width for this math style
    \edef\@LineWidth{%
        \the\fontdimen8
        \ifx#1\displaystyle\textfont
        \else\ifx#1\textstyle\textfont
        \else\ifx#1\scriptstyle\scriptfont
        \else\scriptscriptfont
        \fi\fi\fi
        3}
    \text{$\tikz
    \draw[double equal sign distance, line width=\@LineWidth,
    -{Implies[sep=-0.35ex] . Implies}]
    (0,0) -- (1.5em,0);$}}

\newcommand*{\@LeftArrow}[1]{%
    % Get the line width for this math style
    \edef\@LineWidth{%
        \the\fontdimen8
        \ifx#1\displaystyle\textfont
        \else\ifx#1\textstyle\textfont
        \else\ifx#1\scriptstyle\scriptfont
        \else\scriptscriptfont
        \fi\fi\fi
        3}
    \text{$\tikz
    \draw[double equal sign distance, line width=\@LineWidth,
    -{Implies[sep=-0.35ex] . Implies}]
    (1.5em,0) -- (0,0);$}}

\makeatother

\newcommand*{\Implies}{\DOTSB\;\RightArrow\;}
\newcommand*{\Impliedby}{\DOTSB\;\LeftArrow\;}
\[
    a \implies b \qquad a \Implies b \qquad a \Impliedby b
\]
\[
    x^{a \implies b} \qquad x^{a \Implies b} \qquad x^{a \Impliedby b}
\]
\[
    x^{x^{a \implies b}} \qquad x^{x^{a \Implies b}} \qquad x^{x^{a \Impliedby b}}
\]

\end{document}

Result of alternative solution

  • In this solution, is it possible to make the outer arrow tip an exact replica of the inner arrow tip? so that the new symbol has the same look-and-feel as \Rightarrow or \implies. Thanks – userOne Nov 08 '16 at 19:01
  • 1
    @userOne: Yes, that is possible, but are you sure you want that? I think the spacing between the two arrowheads looks better if they are not exact replicas. I'll update the solution with your alternative. – Håkon Marthinsen Nov 09 '16 at 09:24
  • I am going with this solution, works fine in the display-math mode, but there is an extra space when used in inline-math mode like $\RightArrow$, whereas $\Rightarrow$ does not have extra space. Can you help? – userOne Nov 10 '16 at 14:14
  • 1
    You're right, spacing was wrong in inline mode. I've moved the \mathrel command, which should improve the spacing. – Håkon Marthinsen Nov 12 '16 at 23:46
3

Overlapping arrows:

\documentclass{article}
\usepackage{amsmath}

\newcommand{\joinarrows}{\mathrel{\mspace{-14mu}}}

\newcommand{\Tworightarrow}{\Rightarrow\joinarrows\Rightarrow}
\newcommand{\Twoleftarrow}{\Leftarrow\joinarrows\Leftarrow}
\newcommand{\Twoleftrightarrow}{%
  \Leftarrow\joinarrows\Leftarrow
  \joinarrows
  \Rightarrow\joinarrows\Rightarrow
}
\newcommand{\Twolongrightarrow}{\Longrightarrow\joinarrows\Rightarrow}
\newcommand{\Twolongleftarrow}{\Leftarrow\joinarrows\Longleftarrow}
\newcommand{\Twolongleftrightarrow}{%
  \Leftarrow\joinarrows\Longleftarrow
  \joinarrows
  \Rightarrow\joinarrows\Rightarrow
}

\begin{document}

\begin{gather*}
\Tworightarrow \quad \Twoleftarrow \quad \Twoleftrightarrow \\
\Twolongrightarrow \quad \Twolongleftarrow \quad \Twolongleftrightarrow
\end{gather*}

\end{document}

enter image description here

egreg
  • 1,121,712
  • Just to check if I understand it: The neg space is defined as relation because there is no space between relations, right? – campa Nov 08 '16 at 11:53
  • In this solution, if the horizontal lines that appear between the two arrow tips can be erased then this will be the golden solution for my problem. See the image in the question. I used gimp to erase the lines between the arrow tips. Thanks in advance. – userOne Nov 08 '16 at 19:08
  • @userOne No, for that you need something like TikZ – egreg Nov 08 '16 at 20:36
2

Will this do:

\documentclass{article}

\usepackage{amsmath}
\newcommand{\LeftArrow}{\ensuremath{\ll\!\!\!=\!\!=}}
\newcommand{\RightArrow}{\ensuremath{=\!\!=\!\!\!\gg }}
\begin{document}

\[ A\RightArrow B\]
\[ C\LeftArrow D\]

\end{document}

Output:

enter image description here

  • This is better than my first attempt, but there is a spacing issue between = and \gg or \ll. Is there a way to precisely fit these symbols together? Thanks. – userOne Nov 08 '16 at 10:50