2

It is well-known that \(\rightarrow\) gives a single right arrow and that \(\Rightarrow\) gives a double right arrow. Using the amssymb package you can even make triple arrows with \(\Rrightarrow\). But if one needs a quadruple or even quintuple or higher-order arrows, a question arises: How does one make higher-order arrows? I would love to see a command like \arroworder{} where the number you enter becomes the order of the arrow eg, \arroworder{1} is basically a \(\rightarrow\), \arroworder{2} gives something like \(\Rightarrow\), and \arroworder{3} is like the amssymb command \(\Rrightarrow\). Who knows, maybe it's possible to have \arroworder{0} give off a plain arrowhead.

Note: I'm open to suggestions that involve the TikZ package, but it is preferred to have a minimally confusing solution.

As a note, there is no command for a triple left-right arrow. Is there a way of doing that as well, preferably in the same style to the first question?

3

This is mainly a technical comment that the Implies arrow of arrows.meta claims to have a length parameter, but it does not really in the sense that changing the length does not have an impact. Can one rectify this? Yes. But let me warn you, at least this "fix" isn't pretty.

\documentclass{article}
\usepackage{amssymb}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\makeatletter
\pgfkeys{
  /pgf/arrow keys/.cd,
  xstretch/.store in=\pgfarrowxstretch,
  xstretch=1,
  ystretch/.store in=\pgfarrowystretch,
  ystretch=1,
  }
\ifcsname pgfutil@tempdimc\endcsname
\else
\newlength\pgfutil@tempdimc
\fi 
\ifcsname pgfutil@tempdimd\endcsname
\else
\newlength\pgfutil@tempdimd
\fi 
\pgfdeclarearrow{
  name = varImplies,
  setup code = {
    \pgf@xa\pgfinnerlinewidth
    \pgfutil@tempdima.25\pgflinewidth
    \pgfutil@tempdimc\pgfarrowxstretch\pgfutil@tempdima
    \pgfutil@tempdimd\pgfarrowystretch\pgfutil@tempdima
    \advance\pgfutil@tempdima by.25\pgf@xa%
    \pgfutil@tempdimb.5\pgflinewidth
    \advance\pgfutil@tempdimb by-.5\pgf@xa%
    \pgfutil@tempdimb\pgfutil@tempdimb
    \pgfarrowssettipend{2.06\pgfutil@tempdimc\advance\pgf@x by.5\pgfutil@tempdimb}
    \pgfarrowssetbackend{-1.36\pgfutil@tempdimc\advance\pgf@x by.5\pgfutil@tempdimb}
    \pgfarrowsupperhullpoint{-1.4\pgfutil@tempdimc}{2.8\pgfutil@tempdimd}
    \pgfarrowsupperhullpoint{2\pgfutil@tempdimc}{.5\pgfutil@tempdimd}
    \pgfarrowssavethe\pgfutil@tempdima
    \pgfarrowssavethe\pgfutil@tempdimb
    \pgfarrowssavethe\pgfutil@tempdimc
    \pgfarrowssavethe\pgfutil@tempdimd
  },
  drawing code = {
    \pgfmathsetmacro{\pft}{0.1/(\pgfutil@tempdimc/\pgfutil@tempdimd)}%
    \pgftransformxshift{\pft\pgfutil@tempdima}
    \pgfsetlinewidth{\pgfutil@tempdimb}
    \pgfsetdash{}{+0pt}
    \pgfsetroundcap
    \pgfsetroundjoin
    \pgfpathmoveto{\pgfpoint{-1.4\pgfutil@tempdimc}{2.65\pgfutil@tempdimd}}
    \pgfpathcurveto
    {\pgfpoint{-0.75\pgfutil@tempdimc}{1.25\pgfutil@tempdimd}}
    {\pgfpoint{1\pgfutil@tempdimc}{0.05\pgfutil@tempdimd}}
    {\pgfpoint{2\pgfutil@tempdimc}{0pt}}
    \pgfpathcurveto
    {\pgfpoint{1\pgfutil@tempdimc}{-0.05\pgfutil@tempdimd}}
    {\pgfpoint{-.75\pgfutil@tempdimc}{-1.25\pgfutil@tempdimd}}
    {\pgfpoint{-1.4\pgfutil@tempdimc}{-2.65\pgfutil@tempdimd}}
    \pgfusepathqstroke
  },
 parameters = {}
}%
\makeatother
\newif\ifarrowordervar
\tikzset{arrow var/.is if=arrowordervar}
\arrowordervarfalse
\newcommand\arroworder[2][]{\begin{tikzpicture}[Rightarrow/.style={double equal sign distance,>={Implies},->},
triple/.style={-,preaction={draw,Rightarrow}},
Triple/.style={-,preaction={draw,double distance=0.75ex,
>={varImplies[xstretch=1,ystretch=1.4]},->}},
quadruple/.style={preaction={draw,Rightarrow,shorten >=0pt},shorten >=1.2pt,-,double,double
distance=0.2pt},
Quadruple/.style={draw,double distance=0.75ex,
>={varImplies[xstretch=1,ystretch=1.4]},->,
postaction={draw,line width=0.4pt,shorten >=1.4pt,-,double,double
distance=0.18ex}},#1]
\path[use as bounding box] (0,-0.6ex) rectangle
({width("$\Rightarrow$")*1pt},0.6ex);
\draw \ifcase#2
\or [->]
\or [Rightarrow]
\or \ifarrowordervar [Triple] \else [triple] \fi
\or \ifarrowordervar [Quadruple] \else [quadruple] \fi
\fi
(0.2pt,0) -- ({width("$\Rightarrow$")*1pt-0.8pt},0);
\end{tikzpicture}}
\begin{document}
$\to$ $\arroworder{1}$\par
$\Rightarrow$ $\arroworder{2}$\par
$\Rrightarrow$ $\arroworder[arrow var]{3}$ $\arroworder{3}$\par
$\Rrightarrow$ $\arroworder[arrow var]{4}$ $\arroworder{4}$\par
\end{document}

enter image description here

So this has some option arrow var that switches to a mode in which the arrows look similar to their AMS counterparts. One could go on, make these scalable and so and so forth but I think that the first thing to do is to come up with a clear prescription of how these arrows are to be constructed and so on.

Please note that in a TikZy environment like tikz-cd such arrows have, in my humble opinion, a much better motivation because there you can bend them and so on and so forth. I am posting this mainly as a reference for future attempts to mess around with the Implies arrow head.

| improve this answer | |
  • I have finished my votes now. :-) I see, sorry, that the lines across the tips with the last two examples. – Sebastiano Apr 8 at 22:15
  • 1
    @Sebastiano Grazie, good catch! Tried to improve it. – user194703 Apr 8 at 22:23
  • Is the one on the bottom left supposed to have four shafts? (The result would probably look preposterous. I'm just nit-picking.) – barbara beeton Apr 8 at 22:37
  • @barbarabeeton AFAIK AMS does not have such an arrow so I put one with three shafts to guide the eye (compare dimensions, vertical alignment etc.) – user194703 Apr 8 at 22:39
  • I'm pretty sure that amsfonts doesn't have it. To my surprise, it is in Unicode, at 0x2B46, so it'll be in STIX. (But I don't know its TeX name; look in unicode-math.) – barbara beeton Apr 8 at 22:46
0

You can check this discussion Triple arrows in tikz and tikz-cd, where a solution for a "triple" and even a "quadruple" arrow style is provided using \usepackage{tikz} and \rightarrow\

Otherwise, with \usepackge{witharrows} it's possibile to make multiple nested arrows and change the level number. But WithArrows does not draw straight arrows.

For "WithArrows" package, please go to The Package WithArrows documentation edited by F. Pantigny (last. rev. March, 30th, 2020)

I hope it helps.

| improve this answer | |
  • I read the documentation and found a way to draw straight down arrows, but what about right ones? – Someone Apr 9 at 14:51

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.