我知道如何在水平或垂直对齐的两个节点之间画平行线。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[myn/.style={circle,draw,inner sep=0.25cm,outer sep=3pt}]
\node[myn] (A) at (0,0) {A};
\node[myn] (B) at (5,0) {B};
\node[myn] (C) at (5,3) {C};
\node[myn] (Z) at (10,-5) {Z};
\draw[->] (A.10) -- (B.170);
\draw[<-] (A.-10) -- (B.190);
\draw[->] (B.80) -- (C.-80);
\draw[<-] (B.100) -- (C.-100);
\end{tikzpicture}
\end{document}
我想知道的是如何在那些不太对齐的节点之间做类似的事情,比如A
在Z
上图中,我不一定事先知道确切的位置Z
。
我可以得到类似
\path let \p1=($(Z)-(A)$),
\n1={atan(\y1/\x1)},
\n2={\n1+180},
\n3={\n1+90},
\n4={1ex*cos(\n3)},
\n5={1ex*sin(\n3)}
in
[draw,blue] ([yshift=\n5,xshift=\n4]A.\n1) -- ([yshift=\n5,xshift=\n4]Z.\n2);
可以工作,但这似乎比必要的要复杂得多(或者,是吗?)。
顺便说一句,尽管这可能开始看起来像一个交换图,但它不应该是那样的。
答案1
以下是使用部分修饰符的建议:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
% Syntax:
% \DoublLine[half of the double line distance]{first node}{second node}{options line 1}{options line 2}
\newcommand\DoubleLine[5][3pt]{%
\path(#2)--(#3)coordinate[at start](h1)coordinate[at end](h2);
\draw[#4]($(h1)!#1!90:(h2)$)--($(h2)!#1!-90:(h1)$);
\draw[#5]($(h1)!#1!-90:(h2)$)--($(h2)!#1!90:(h1)$);
}
\begin{document}
\begin{tikzpicture}[myn/.style={circle,draw,inner sep=0.25cm,outer sep=3pt}]
\node[myn] (A) at (0,0) {A};
\node[myn] (B) at (5,0) {B};
\node[myn] (C) at (5,3) {C};
\node[myn] (Z) at (10,-5) {Z};
% double lines:
\foreach \p in {A,C,Z}{
\DoubleLine{B}{\p}{<-,red}{->,blue}
}
\end{tikzpicture}
\end{document}
答案2
只是为了和 PSTricks 一起玩。
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-node}
\begin{document}
\begin{pspicture}[radius=15pt,nodesep=5pt,showgrid](8,8)
\rput(2,6){\Circlenode{a}{A}}
\rput(6,2){\Circlenode{b}{B}}
\ncline[linecolor=red]{a}{b}
\ncline[offset=6pt,linecolor=green]{a}{b}
\ncline[offset=-6pt,linecolor=blue]{a}{b}
\end{pspicture}
\end{document}