以任意角度沿同一方向绘制多个箭头并重叠

以任意角度沿同一方向绘制多个箭头并重叠

我正在尝试绘制一个图表,tikz其中节点之间有多个箭头(这里我有 4 个),节点在图表中任意放置。我最好的(即最短和最容易理解的)解决方案是使用选项drawdouble但这会产生不必要的箭头重叠,因为我看不到其他箭头下方的箭头,而我想看到所有箭头。

我目前的情况有以下代码:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{calc}
\tikzset{state/.style={circle,draw=black, very thick,minimum size=8ex,fill=white}}

\begin{document}

\begin{tikzpicture}

\node (x) at (0,0) {};
\coordinate (1) at ($(x) + (125:2)$) ;
\coordinate (2) at ($(x) + (55:2)$) ;
\coordinate (3) at ($(x) + (350:2)$);
\coordinate (t1) at ($(x) + (190:2)$);
\foreach \i\j in {1/2,2/3,1/t1,2/t1,1/3,3/t1} {
    \draw[draw=black,double distance=15pt] (\i) to (\j);
    \draw[draw=black,double distance=5pt] (\i) to (\j);}
\node[state] (1a) at (1) {1};
\node[state] (2a) at (2) {2};
\node[state] (3a) at (3) {3};
\node[state] (t1a) at (t1) {3};
\draw[loosely dotted,ultra thick] ($(x)+(290:1.8)$) to [bend left=30] ($(x)+(250:1.8)$);

\end{tikzpicture}

\end{document}

产生以下结果:

在此处输入图片描述

我想看到所有的箭头线,而不仅仅是最后画的那些。

发生这种情况的原因是,使用此double选项实际上会绘制两条线,一条比另一条细,内侧的一条为白色。查看此处的一些类似问题,解决方案要么是针对具体情况的,要么是使用nodename.west类似的方向以及\foreach循环和一些\yshift命令。但是,由于我的箭头并非全部水平或垂直,并且我希望两个相邻箭头之间的正常距离始终相同,而且由于我不是专家tikz,我无法根据自己的需要调整这些解决方案。

非常感谢您对这个问题提供的任何帮助。

答案1

进一步与 Jake 的 PSTricksncbar同等风格(来自TikZ 是否有与 PSTricks \ncbar 命令等效的命令?),可以画2n线而不是n双线。

\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\tikzset{
    ncbar angle/.initial=90,
    ncbar/.style={
        to path=(\tikztostart)
        -- ($(\tikztostart)!#1!\pgfkeysvalueof{/tikz/ncbar angle}:(\tikztotarget)$)
        -- ($(\tikztotarget)!($(\tikztostart)!#1!
        \pgfkeysvalueof{/tikz/ncbar angle}:(\tikztotarget)$)!
        \pgfkeysvalueof{/tikz/ncbar angle}:(\tikztostart)$)
        -- (\tikztotarget)
    },
    ncbar/.default=0.5cm,
}
\begin{document}
\begin{tikzpicture}[
    mystate/.style={circle,draw=black, very thick,minimum size=8ex,fill=white}
    ]
\def\mylabellist{{1,2,3,"$t-1$"}}
\foreach \x[count=\y] in{125,55,350,190}{\coordinate (n\y) at (\x:2);}

\foreach \x in {1,...,3}{
    \foreach \y in {\x,...,4}{
        \foreach \zz in {90,-90}{
            \draw (n\x) to[ncbar=0.1cm,ncbar angle=\zz] (n\y);
            \draw (n\x) to[ncbar=0.3cm,ncbar angle=\zz] (n\y);
        }
    }
}
\foreach \y in{1,...,4}{\node[mystate] (n\y a) at (n\y)
{\pgfmathparse{\mylabellist[\number\numexpr\y-1\relax]}\pgfmathresult};}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容