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