我正在制作一个宏,根据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}