我正在尝试绘制一个图表,tikz
其中节点之间有多个箭头(这里我有 4 个),节点在图表中任意放置。我最好的(即最短和最容易理解的)解决方案是使用选项draw
,double
但这会产生不必要的箭头重叠,因为我看不到其他箭头下方的箭头,而我想看到所有箭头。
我目前的情况有以下代码:
\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}