3

I am trying to create a double-lined arrow pointing to both sides like \Leftrightarrow with a squiggly line. The Comprehensive LaTeX Symbol List did not seem to contain any such symbol, nor did other (seemingly less comprehensive) lists of LaTeX symbols.

I thought I could adapt the solution from this answer to a similar question (about a double-lined squiggly arrow pointing into one direction. I tried using the information provided in this answer on how to obtain an arrow pointing to both directions.

As I did not want any text above the arrow, in my first attempt I made the text invisible and just used it to give the arrow its length:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{calc,decorations.pathmorphing,shapes,arrows}

\newcommand\xlrsquigarrow{%
\mathrel{%
\begin{tikzpicture}[baseline= {( $ (current bounding box.south) + (0,-0.5ex) $ )}]
  \node[inner sep=.5ex] (a) {\textcolor{white}{m}};
  \path[draw,implies-implies,double distance between line centers=1.5pt,decorate,
    decoration={zigzag,amplitude=0.7pt,segment length=1.2mm,pre=lineto,
    pre   length=4pt}] 
    (a.south east) -- (a.south west);
\end{tikzpicture}}%
}

\begin{document}

a $\xlrsquigarrow$ b

\end{document}

Unfortunately, this looks like this:

failed attempt #1: left arrowhead rotated

For some reason, the left arrowhead is rotated by 90° and pointing upward.

Therefore, I decided to remove the obsolte remainder of the original solution (i.e. the node with the text I didn't need) and use absolute coordinates:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{calc,decorations.pathmorphing,shapes,arrows}

\newcommand\xlrsquigarrow{%
\mathrel{%
\begin{tikzpicture}[baseline= {( $ (current bounding box.south) + (0,-0.5ex) $ )}]
  \path[draw,implies-implies,double distance between line centers=1.5pt,decorate,
    decoration={zigzag,amplitude=0.7pt,segment length=1.2mm,pre=lineto,
    pre   length=4pt}] 
    (0,0) -- (0.5,0);
\end{tikzpicture}}%
}

\begin{document}

a $\xlrsquigarrow$ b

\end{document}

I would have expected that at worst, nothing would be changed (I've just exchanged two coordinates, right?), and at best, that it works now. However:

failed attempt #2: right arrowhead rotated

Now, the right arrowhead is rotated by 90° and pointing upward!

Why are those arrowheads rotated and how do I achieve the desired result?

(Non-Tikz solutions, if any, are welcome, too - I just chose Tikz because I couldn't find a ready-made symbol and this seemed like the most straightforward way. That notwithstanding, I would like to understand why the attempted Tikz solutions shown above behave the way they do.)

4

pre length is already added, therefore the left arrow looks fine, post length fixes the right arrow head. The following example also centers the arrow around the math axis:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{
  calc,
  decorations.pathmorphing,
  shapes,
  arrows.meta
}

\newcommand\xlrsquigarrow{%
  \mathrel{%
    \vcenter{%
      \hbox{%
        \begin{tikzpicture}
          \path[
            draw,
            >={Implies[]},
            <->,
            double distance between line centers=1.5pt,
            decorate,
            decoration={
              zigzag,
              amplitude=0.7pt,
              segment length=3pt,
              pre length=4pt,
              post length=4pt,
            },
          ]   
            (0,0) -- (14pt,0);
        \end{tikzpicture}%
      }%
    }%  
  }%
}

\begin{document}
  \[a \xlrsquigarrow b\]
\end{document}

Result

  • Excellent, this works. However, why did the issue change the side depending on whether or not I used the implicit coordinates based on the node? – O. R. Mapper May 18 '15 at 13:04
  • @O.R.Mapper pre means, where the line starts, and post, where the line ends. In case of your implicit coordinates goes from right to left, in the other case from left to right. – Heiko Oberdiek May 18 '15 at 13:25
  • D'oh ... of course. West is left and East is right, geometrically. Thanks. – O. R. Mapper May 18 '15 at 13:36
1

Here is a way, though it has drawbacks. It does not support over- or under-text, since the OP indicated no need. But more importantly, it uses the \uwave macro from the ulem package, which is only output in periodic intervals. If the space allowed (optional argument) is not just the precise amount, the spacing on the left side of the arrow (between the \prec and the squiggles) will leave a gap.

\documentclass{article}
\usepackage{ulem,graphicx}
\usepackage{stackengine}
\newcommand\dsar[1][1.95ex]{%
  \mathbin{\scalebox{.7}[1.1]{$\prec$}%
  \scalebox{-1}[-1]{\stackon[-3.7pt]{\buwave{\hspace{#1}}}%
  {\buwave{\hspace{#1}}}}\mkern-2.6mu\scalebox{.7}[1.1]{$\succ$}}
}
\newcommand\buwave[1]{\raisebox{-1.6pt}{\uwave{\raisebox{2pt}{#1}}}}
\begin{document}
$w\dsar x \dsar[3.1ex] y \dsar[4.25ex] z$
\end{document}

enter image description here

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.