防止 tikz 节点交叉

防止 tikz 节点交叉

我正在制作一个宏,根据tikzpicture传入宏的参数生成一个。我希望能够\node仅当一个不与指定的 x 坐标相交时才绘制一个。

假设我的黑名单 x 坐标是 1,我想将节点放置在 处(0.8, 0)。节点的宽度取决于我放入其中的文本,因此它有可能与我的 x 坐标 1 相交(该文本来自宏的参数,因此我不会每次都使用一个静态宽度)。我希望能够控制节点是否放置,具体取决于其宽度是否会超过 x=1(如果超过,我不希望放置它)。

我的想法是放置一个不可见版本的节点,获取它的 x 坐标,如果不超过 1,则放置可见版本。我只是不知道如何实际做到这一点:获取 x 坐标(节点的左侧和右侧),并将其用作是否放置第二个节点的条件。

这可能吗?也许是某种我不知道的库?提前致谢。

答案1

这是你想看到的吗?

在此处输入图片描述

我过去opacity=0.25常常显示节点的初始大小。如果将其更改为0,它们将不可见(但它们将被视为在边界框中)。如果将节点anchor=east恰好放置在 处x=1cm,则不会绘制该节点。如果您也希望绘制这些节点,可以将其更改\ifdim\tempx<1cm\ifdim\tempx>1cm\else

\documentclass{article}

\usepackage{tikz}

\newdimen\tempx

\tikzset{
    my limited node/.style={
        draw, % Only for debugging. When opacity=0, this can be removed.
        opacity=0.25, % Change this to 0 to maken the nodes invisible.
        node contents={#1}, % This is a different way to set the contents of a node.
        % It is needed here because we want the contents used twice.
        % By using the argument of the style, we can use it as often as we wish.
        append after command={ % This key allows us to execute some additional code.
            \pgfextra{ % This command halts the current path construction to execute some more code
                \pgfextractx\tempx{\pgfpointanchor{\tikzlastnode}{east}} % With \pgfextractx{<dimension>}{<point>} the absolute x coordinate of a point can be saved in the <dimension>.
                % With \pgfpointanchor{<coordinate>}{<anchor>} we return the anchorpoint of a certain node or coordinate.
                \ifdim\tempx<1cm % Here we check if the x coordinate of the east anchor is smaller than 1cm 
                    \node at (\tikzlastnode) [draw] {#1}; % If so, draw the node again
                \fi
            }
        }
    }
}

\begin{document}
    \begin{tikzpicture}
        \draw[red] (1,0) -- (1,-3);
        \node at (0,-0.5) [my limited node={test}];
        \node at (0,-1.5) [my limited node={a longer test that protrudes the forbidden line}];
        \node at (1,-2.5) [my limited node={another test},anchor=east];
    \end{tikzpicture}
\end{document}

相关内容