“新定义”的路径和使用预定义节点的路径之间有什么区别?

“新定义”的路径和使用预定义节点的路径之间有什么区别?

我不确定我该如何表述我的问题。

考虑以下例子

\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}

相关内容