[Tex/LaTex] Squiggly Double-Lined Left-Right-Arrow (i.e. “approximate equivalence”)

arrowstikz-arrowstikz-pgf

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.)

Best Answer

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