有没有简单的方法可以让节点边界锚点位于边界的中心?

有没有简单的方法可以让节点边界锚点位于边界的中心?

我想放置具有给定相对距离的节点。为了与其他图纸保持一致,这些距离必须非常准确。节点边界锚点位于节点的外边界(请参阅 pgfmanual 3.0.0,第 702 页)。因此,实际上pgflinewidth(或根据节点形状的分数/倍数)添加到给定距离(MWE 中的红色节点)。

抵消此问题的一种方法是减去(pgflinewidthMWE 中的蓝色节点的分数/倍数)。另一种选择是将节点放置在它们的中心。在这种情况下,需要事先知道节点的宽度,这对于任意节点形状来说可能并不容易。

我的问题:有没有一种简单的方法可以让节点边界锚点位于边界的中心?

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

相关内容