我正在尝试创建一个双线箭头,像\Leftrightarrow
波浪线一样指向两侧。全面的 LaTeX 符号列表似乎不包含任何这样的符号,其他(看似不太全面的) LaTeX 符号列表也没有包含这样的符号。
我认为我可以采用以下解决方案这个答案类似的问题(关于双线波浪箭头指向一方向。我尝试使用这个答案如何获得指向两个方向的箭头。
因为我不想在箭头上方出现任何文字,所以在第一次尝试中,我将文字设为不可见,并仅用它来指定箭头的长度:
\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}
不幸的是,它看起来像这样:
由于某种原因,左箭头旋转了 90° 并指向上方。
因此,我决定删除原始解决方案的剩余部分(即带有我不需要的文本的节点)并使用绝对坐标:
\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}
我原本以为,最坏的情况下,什么都不会改变(我只是交换了两个坐标,对吧?),最好的情况是,它现在可以正常工作。然而:
现在,右箭头旋转了 90° 并指向上方!
为什么这些箭头会旋转?我该如何获得想要的结果?
(如果有的话,非 Tikz 解决方案也受到欢迎 - 我选择 Tikz 只是因为我找不到现成的符号,而且这似乎是最直接的方法。尽管如此,我还是想了解为什么上面显示的尝试过的 Tikz 解决方案会如此表现。)
答案1
pre length
已添加,因此左箭头看起来不错,post length
修复了右箭头。以下示例还将箭头置于数学轴的中心:
\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}
答案2
这是一种方法,尽管它有缺点。它不支持文本过多或过少,因为 OP 表示不需要。但更重要的是,它使用包\uwave
中的宏ulem
,该宏仅以周期性间隔输出。如果允许的空间(可选参数)不仅仅是精确的数量,箭头左侧的间距(\prec
和波浪线之间)将留下间隙。
\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}