我想放置具有给定相对距离的节点。为了与其他图纸保持一致,这些距离必须非常准确。节点边界锚点位于节点的外边界(请参阅 pgfmanual 3.0.0,第 702 页)。因此,实际上pgflinewidth
(或根据节点形状的分数/倍数)添加到给定距离(MWE 中的红色节点)。
抵消此问题的一种方法是减去(pgflinewidth
MWE 中的蓝色节点的分数/倍数)。另一种选择是将节点放置在它们的中心。在这种情况下,需要事先知道节点的宽度,这对于任意节点形状来说可能并不容易。
我的问题:有没有一种简单的方法可以让节点边界锚点位于边界的中心?
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[ultra thick, MyNode/.style={draw, minimum height=1cm}]
\draw[step=1cm,gray,ultra thin] (-1cm,-3cm) grid (5cm,2cm);
% default case
\begin{scope}[red]
\path (0,0) node[MyNode, anchor=south west, minimum width=1cm] (n1) {};
\path (n1.east) ++(1cm,0) node[MyNode, anchor=west, minimum width=2cm] {};
\end{scope}
% supstract line width
\begin{scope}[blue, shift={(0,-2)}]
\path (0,0) ++(-0.5\pgflinewidth,-0.5\pgflinewidth) node[MyNode, anchor=south west, minimum width=1cm] (n1) {};
\path (n1.east) ++(1cm,0) ++(-\pgflinewidth,0) node[MyNode, anchor=west, minimum width=2cm] {};
\end{scope}
\end{tikzpicture}
\end{document}
答案1
最简单的做法是指定outer sep=0
:
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[ultra thick, MyNode/.style={draw, minimum height=1cm}]
\draw[step=1cm,gray,ultra thin] (-1cm,-3cm) grid (5cm,2cm);
% default case
\begin{scope}[red]
\path (0,0) node[MyNode, anchor=south west, minimum
width=1cm,outer sep=0] (n1) {};
\path (n1.east) ++(1cm,0) node[MyNode, anchor=west, minimum
width=2cm,outer sep=0] {};
\end{scope}
\begin{scope}[blue, shift={(0,-2)}]
\path (0,0) ++(-0.5\pgflinewidth,-0.5\pgflinewidth)
node[MyNode, anchor=south west, minimum width=1cm] (n1) {};
\path (n1.east) ++(1cm,0) ++(-\pgflinewidth,0)
node[MyNode, anchor=west, minimum width=2cm] {};
\end{scope}
\end{tikzpicture}
\end{document}
但是,如果通过线或箭头连接这些节点,则需要缩短它们以避免边界重叠。
答案2
与安德鲁的方法相比,可能更无用的方法是绘制没有线宽的节点并用粗边框装饰它。
更改一行:
\begin{tikzpicture}[MyNode/.style={draw, minimum height=1cm, line width=0pt, postaction={ultra thick, draw}}]