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.

  • 1
    Welcome to TeX.SX! Would TikZ commands be acceptable for you? – ebosi Nov 8 '16 at 10:24
  • I am working in math mode, I am also using TikZ for drawing pictures. If the TikZ solution works in math mode, then it must be ok. – userOne Nov 8 '16 at 10:47
  • 1
    Related: tex.stackexchange.com/q/324471/34551 This question could expand that collection of arrows! – Clément Nov 8 '16 at 18:05
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 8 '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 9 '16 at 9: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
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

  • 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 8 '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 8 '16 at 19:08
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

  • Just to check if I understand it: The neg space is defined as relation because there is no space between relations, right? – campa Nov 8 '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 8 '16 at 19:08
  • @userOne No, for that you need something like TikZ – egreg Nov 8 '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 8 '16 at 10:50

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.