节点间连线的起始位置和终止位置的统一选择

节点间连线的起始位置和终止位置的统一选择

我正在绘制一个图形,它有许多节点和连接节点的许多线。我希望连接两个节点的每条线都从“北”开始,到“南”结束。所以,本质上,我的代码是这样的

\begin{tikzpicture}
 \node (a) at (0,0) {};
 \node (b) at (0,1) {};
 \draw (a.north) -- (b.south);
\end{tikzpicture}

有许多节点定义和许多绘制。我想一劳永逸地定义所有线应该从“北”开始并结束于“南”,所以我尝试了类似

 every path/.style={parent anchor=north, child anchor=south}

但它不起作用。问题是:有没有办法在模板中指定任何线都应从“北”开始并结束于“南”,从而避免在每次绘制时都写入这一点?

答案1

您可以使用自定义to path

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[ns/.style={
    to path={(\tikztostart.north) -- (\tikztotarget.south)\tikztonodes (\tikztotarget)}
}]
 \node[draw] (a) at (0,0) {};
 \node[draw] (b) at (1,1) {};
 \node[draw] (c) at (2,-1){};
 \draw (a) to [ns] (b) to[ns] (c) to[ns] (a);
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

您可以使用宏。我应该补充一点,使用一个字母的宏名不是一个好主意。另外,我很惊讶我不必使用\pgfextra

\documentclass{standalone}
\usepackage{tikz}

\newcommand{\n}[1]{(#1.north)}
\newcommand{\s}[1]{(#1.south)}

\begin{document}

\begin{tikzpicture}
 \node (a) at (0,0) {};
 \node (b) at (0,1) {};
 \draw \n{a} -- \s{b};
\end{tikzpicture}

\end{document}

答案3

您可以使用循环来绘制线条。要为线条指定不同的颜色,您可以设置第三个循环变量,并将您想要的默认颜色(黑色,除非您另有说明)留空。

代码输出

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
 \node (a) at (0,0) {};
 \node (b) at (0,1) {};
 \node (c) at (0.2,0) {};
 \node (d) at (0.2,1) {};
 \node (e) at (0.4,0) {};
 \node (f) at (0.4,1) {};

\foreach \i/\j/\clr in {
   a/b/,
   c/d/red,
   e/f/}
  \draw [\clr] (\i.north) -- (\j.south);
\end{tikzpicture}
\end{document}

相关内容