使用 tikz:两个盒子,两个平行的连接边

使用 tikz:两个盒子,两个平行的连接边

我希望有两个框,每个框内都包含文本,中间留有一些垂直空间,并由两个平行的垂直边连接它们。只需一个这样的连接边,tikz 就可以很容易地实现:(\draw (node1) -- (node2);其中 node1 和 node2 指定两个带有文本的框)。它们之间必须有一点分离;但是,我尝试过使用类似的东西(node1) +(5pt,0) -- (node2) +(5pt,0),但坦率地说,它不起作用。我尝试过使用 shift={(5pt,0),transform shape} 进行范围界定,但移位被忽略了。那么,我该怎么做呢?(仅供参考:边缘上还有其他选项,用于指定标签和箭头,但我认为它们与此无关)。

单个链接示例:

\documentclass[12pt]{article}
\usepackage{tikz}
\begin{document}
  \begin{tikzpicture}[yscale=-1]
    \node at (0,0) (node1) [shape=rectangle,fill=green] {box1};
    \node at (0,1) (node2) [shape=rectangle,fill=green] {box2};
    \draw (node1) -- (node2);
  \end{tikzpicture}
\end{document}

一个 ascii 版本...

.  +----+
.  |box1|
.  +----+
.   |  |
. 1 v  ^ 3
.   |  |
.  +----+
.  |box2|
.  +----+

(请忽略“。”,我需要它们才能使代码输入正常工作)

谢谢你的解决方案!我一定会尝试的。

答案1

如果我正确理解了这个问题,您可能需要使用doubledouble distance键。

如文档第 15.3.5 节所述tikzdouble\draw命令中使用 键可产生双线。您还可以使用 键微调两条线之间的距离double distance;使用后者会自动启用double,如Claudio 的评论。 见下文。

在此处输入图片描述

\documentclass[12pt,a4paper]{article}
\usepackage{tikz}

\begin{document}

 \begin{tikzpicture}[yscale=-1]
    \node at (0,0) (node1) [shape=rectangle,fill=green] {box1};
    \node at (0,1) (node2) [shape=rectangle,fill=green] {box2};
    \draw[double distance=5pt] (node1) -- (node2);
    \node at (0,2) (node3) [shape=rectangle,fill=green] {box1};
    \node at (0,3) (node4) [shape=rectangle,fill=green] {box2};
    \draw[double distance=10pt] (node3) -- (node4);
  \end{tikzpicture}

\end{document}

编辑:如果您需要为两条线添加不同的装饰、标签等,则需要构建两条不同的路径;见下文。要在路径中间绘制箭头,我建议您Alain Matthes 的回答Tikz:箭头位于中心

在此处输入图片描述

\documentclass[12pt,a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{decorations.markings}

\tikzset{
    ->-/.style={decoration={
        markings,
        mark=at position .5 with {\arrow{>}}},postaction={decorate}},
    -<-/.style={decoration={
        markings,
        mark=at position .5 with {\arrow{<}}},postaction={decorate}},
}

\begin{document}

\def\mydbldist{5pt}
 \begin{tikzpicture}[yscale=-1]
    \node at (0,0) (node1) [shape=rectangle,fill=green] {box1};
    \node at (0,1) (node2) [shape=rectangle,fill=green] {box2};
    \draw[->-] ([xshift=-.5*\mydbldist]node1.south) -- ([xshift=-.5*\mydbldist]node2.north)
        node[pos=.5,anchor=east] {$1$};
    \draw[-<-] ([xshift=.5*\mydbldist]node1.south) -- ([xshift=.5*\mydbldist]node2.north)
        node[pos=.5,anchor=west] {$3$};
  \end{tikzpicture}

\end{document}

答案2

只是为了展示另一个选项。您可以使用calc库并通过以下方式计算边缘上的点:

($(node1.south west)!0.33!(node1.south east)$)

距离 西南方向 0.33(总底边长度)node1。这样您的点会更准确。

\documentclass[12pt,a4paper]{article}

\usepackage{tikz}
\usetikzlibrary{decorations.markings,calc}

\tikzset{
    ->-/.style={decoration={
        markings,
        mark=at position .5 with {\arrow{>}}},postaction={decorate}},
    -<-/.style={decoration={
        markings,
        mark=at position .5 with {\arrow{<}}},postaction={decorate}},
}

\begin{document}

\def\mydbldist{5pt}
 \begin{tikzpicture}[yscale=-1]
    \node at (0,0) (node1) [shape=rectangle,fill=green] {box1};
    \node at (0,1) (node2) [shape=rectangle,fill=green] {box2};
    \draw[->-] ($(node1.south west)!0.33!(node1.south east)$) -- ($(node2.north west)!.33!(node2.north east)$)
        node[pos=.5,anchor=east] {$1$};
    \draw[-<-] ($(node1.south west)!0.66!(node1.south east)$) -- ($(node2.north west)!.66!(node2.north east)$)
        node[pos=.5,anchor=west] {$3$};
  \end{tikzpicture}

\end{document}

在此处输入图片描述

答案3

我的例子(不是那么简单)有点黑客化:你手动绘制两条线,利用绘制矩形节点时自动创建的节点(参见PGF 手册)。您可以使用 将您的位置从这些“辅助”节点转移[xhift=...,yshift=...]

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{positioning}

\begin{document}
\begin{figure}[h]
\centering
\begin{tikzpicture}[block/.style={rectangle,draw,minimum height=1cm,text width=5cm,align=center}]
\node (b1) [block] {box1};
\node (b2) [block,below=of b1] {box2};
  \begin{scope}
    \draw [->] ([xshift=-.5cm]b1.south) -- ([xshift=-.5cm]b2.north);
    \draw [->] ([xshift=.5cm]b1.south) -- ([xshift=.5cm]b2.north);
  \end{scope}
\end{tikzpicture}
\caption{caption}
\label{fig:boxes}
\end{figure}
\end{document}

该解决方案可让您在线条上添加箭头。 在此处输入图片描述

答案4

使用 PSTricks。无需指定绝对坐标!

\documentclass[preview,border=12pt,12pt]{standalone}
\usepackage{pstricks-add}

\begin{document}
\nointerlineskip
\begin{psmatrix}[rowsep=1cm,fillstyle=solid,fillcolor=green]
    \psframebox*{Box 1}\\
    \psframebox*{Box 2}
\end{psmatrix}
\psset{offset=6pt,ArrowInside=->}
\ncline{1,1}{2,1}\naput{3}
\ncline{2,1}{1,1}\naput{1}
\end{document}

在此处输入图片描述

相关内容