我使用scope环境 和 foreach 语法输出了下图:
我的代码是
\begin{tikzpicture}
\begin{scope}
\foreach \x/\y in {1/A,2/B,3/C,4/D}
{\node[inner sep=0pt](a\x)at(\x,0){$\y$};}
\foreach \x/\y in {a1/a2,a2/a3,a3/a4}
{\draw(\x)--(\y);}
\end{scope}
\begin{scope}[shift={(-1,-.8)}]
\foreach \x/\y in {1/E,2/F,3/G,4/H}
{\node[inner sep=0pt](a\x)at(\x,0){$\y$};}
\foreach \x/\y in {a1/a2,a2/a3,a3/a4}
{\draw(\x)--(\y);}
\end{scope}
\end{tikzpicture}
现在的问题是:我想连接 A 点和 E 点,D 点和 H 点,但现在A 点和 E 点的坐标相同,D 点和 H 点坐标也相同,直接使用draw 命令不行,必须修改第二个 scope 里面的a1,a4名称,变成其他名称。我想问能否不这样操作, 使用什么方法对以上两个 scope 加以区分,然后使得那两对点的坐标不同,可以正常使用draw命令和 foreach 语法。请问该怎么操作?
在 scope
上添加一个 name prefix
属性就可以区别了
\begin{tikzpicture}
\begin{scope}[name prefix = l1-]
\foreach \x/\y in {1/A,2/B,3/C,4/D}
{\node[inner sep=0pt](a\x)at(\x,0){$\y$};}
\foreach \x/\y in {a1/a2,a2/a3,a3/a4}
{\draw(\x)--(\y);}
\end{scope}
\begin{scope}[name prefix = l2-, shift={(-1,-.8)}]
\foreach \x/\y in {1/E,2/F,3/G,4/H}
{\node[inner sep=0pt](a\x)at(\x,0){$\y$};}
\foreach \x/\y in {a1/a2,a2/a3,a3/a4}
{\draw(\x)--(\y);}
\end{scope}
\foreach \x in {1,4}{
\draw [red] (l1-a\x) -- (l2-a\x);
}
\end{tikzpicture}
同理,还有 name suffix
厉害,非常感谢!