该pst-node
包提供了\ncdiag
命令,允许您用对角线连接两个节点,但带有一个额外的arm
参数,该参数会使线弯曲并允许两端的连接垂直于节点。有没有简单的方法可以在 TikZ 中获得这种效果?
这是一个例子(用 latex 或 xelatex 编译)。
\documentclass{article}
\usepackage{tikz}
\usepackage{pst-node}
\begin{document}
\rput(0,3){\rnode{A}{Foo}}
\rput(2,0){\rnode{B}{Bar}}
\ncdiag[angleA=-90,angleB=90,arm=5mm]{A}{B}
\hspace{2in}
\begin{tikzpicture}
\node at (0,0) (A) {Bar};
\node at (-2,3) (B) {Foo};
\draw[thick] (A) -- (B);
\end{tikzpicture}
\end{document}
答案1
这是我的第一张照片。我用路径来做to
,这样我就可以用其他东西来代替路径。手臂的第一部分很容易,但第二部分需要calc
。此外,当应用于节点时,手臂长度与中心节点的长度,而不是实际绘制的路径的长度。
代码:
\documentclass{article}
%\url{http://tex.stackexchange.com/q/25474/86}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{pst-node}
\tikzset{
arm angleA/.initial={0},
arm angleB/.initial={0},
arm length/.initial={0mm},
arm/.style={
to path={%
(\tikztostart) -- ++(\pgfkeysvalueof{/tikz/arm
angleA}:\pgfkeysvalueof{/tikz/arm length}) -- ($(\tikztotarget)+
(\pgfkeysvalueof{/tikz/arm angleB}:\pgfkeysvalueof{/tikz/arm length})$)
-- (\tikztotarget)
}
},
}
\begin{document}
\rput(0,3){\rnode{A}{Foo}}
\rput(2,0){\rnode{B}{Bar}}
\ncdiag[angleA=-90,angleB=90,arm=5mm]{A}{B}
\hspace{2in}
\begin{tikzpicture}
\node at (0,3) (A) {Foo};
\node at (2,0) (B) {Bar};
\draw[thick] (A) to[arm, arm angleA=-90,arm angleB=90,arm length=5mm] (B);
\end{tikzpicture}
\end{document}
(注意:我改变了 TikZ 中的节点位置以匹配 PSTricks 规范。)
图片,左边是 PSTricks,右边是 TikZ:
答案2
虽然需要进一步调整,但我认为这也是一个有效但快速而粗糙的解决方案。它可以嵌入到一个简短的函数中。
另外关于节点定位的一个小细节:您可能需要锚定矩阵,因为文本的绝对定位与我声明的坐标并不完全对齐。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix[matrix of nodes,row sep = 2mm] (B) at (2,0)
{
\node[inner sep=1mm] {}; \\
\node {Bar}; \\
};
\matrix[matrix of nodes,row sep = 2mm] (F) at (0,3)
{
\node {Foo}; \\
\node[inner sep=1mm] {}; \\
};
\draw (B-2-1) -- (B-1-1.north) -- (F-2-1.south) -- (F-1-1.south);
\end{tikzpicture}
\end{document}
您可以使用来row sep
延长或缩短手臂。
干杯,