TikZ 是否有与 PSTricks \ncdiag 命令等效的命令?

TikZ 是否有与 PSTricks \ncdiag 命令等效的命令?

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:

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延长或缩短手臂。

干杯,

答案3

(相当老的话题)TikZ 中的一个简单解决方案如下。请注意,我们可以用一个坐标加上一个节点(以及加上 2 个节点或 2 个坐标)。

在此处输入图片描述

\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\path
(0,0) node (Foo) {Foo}
(2,-3) node (Bar) {Bar};

\draw (Foo)--++(-90:.5)--($(Bar)+(90:.5)$)--(Bar);
\end{tikzpicture}
\end{document}

相关内容