我不确定我该如何表述我的问题。
考虑以下例子
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node[inner sep=0] at (0,0) (a) {};
\node[inner sep=0] at (3,0) (b) {};
\node[inner sep=0] at (3,3) (c) {};
\node[inner sep=0] at (0,3) (d) {};
\draw[fill=black!10] (a) -- (b) -- (c) -- (d) -- cycle;
\draw[fill=black!30] (b) -- (6,0) -- (6,3) -- (c) -- cycle;
\end{tikzpicture}
\end{document}
只有第二个 \draw 命令被填充。在第一种情况下,甚至循环操作都不起作用。
据我检查,当您在路径中使用连续(预定义)节点(例如(a) -- (b)
)时,填充操作无法正常工作。如果您在路径中定义新坐标(例如(6,0) -- (6,3)
),则不会出现问题。
这种行为正常吗?
答案1
发生这种情况的原因是,当你仅指定节点名称而没有锚点时,边界节点的 用于绘制线。即使使用inner sep=0pt
,此点也会根据要绘制的线的方向而有所不同。为了实现所需的结果,您应该明确使用锚点(如center
),或者coordinate
改为定义节点:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node[inner sep=0] at (0,0) (a) {};
\node[inner sep=0] at (3,0) (b) {};
\node[inner sep=0] at (3,3) (c) {};
\node[inner sep=0] at (0,3) (d) {};
\coordinate (A) at (7,0);
\coordinate (B) at (10,0);
\coordinate (C) at (10,3);
\coordinate (D) at (7,3);
\draw[fill=black!10] (a.center) -- (b.center) -- (c.center) -- (d.center) -- cycle;
\draw[fill=black!10] (A) -- (B) -- (C) -- (D) -- cycle;
\draw[fill=black!30] (b.center) -- (6,0) -- (6,3) -- (c.center) -- cycle;
\end{tikzpicture}
\end{document}
答案2
阅读完杰克的回答后,我在 tikz 手册中找到了相关部分(v 2.10 第 16.2.1 节“预定义形状”)
另一种语法是使用节点形状coordinate
:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node[coordinate] at (0,0) (a) {};
\node[coordinate] at (3,0) (b) {};
\node[coordinate] at (3,3) (c) {};
\node[coordinate] at (0,3) (d) {};
\draw[fill=black!10] (a) -- (b) -- (c) -- (d) -- cycle;
\draw[fill=black!30] (b) -- (6,0) -- (6,3) -- (c) -- cycle;
\end{tikzpicture}
\end{document}