仅在 TikZ 中的任意边界框内绘制对象?

仅在 TikZ 中的任意边界框内绘制对象?

是否可以为 TikZ 图片定义一个边界框,即使该边界框外可能定义了一些东西,但边界框外什么也不会绘制?

在我的特殊情况下,我想绘制所有P可以写成P = a*B_1 + b*B_2两个基向量B_1B_2整数的点ab这些点位于某个指定的框内(例如(-10, -10) rectangle (10, 10))。

答案1

要排除绘图的某些部分,clip可以使用命令/选项。让我们在 4cm x 4cm 的框内绘制随机黑点:

\documentclass[tikz]{standalone}

\begin{document}
  \begin{tikzpicture}[point/.style={fill,inner sep=0pt, minimum size=2pt, circle}]
    \node[draw,minimum size=4cm+2pt,inner sep=0pt](bounding box) at (2,2) {};
    \foreach \i in {1,...,100}{\node[point] (p\i) at ({4*rnd},{4*rnd}) {};};
  \end{tikzpicture}
\end{document}

如果我们现在使用该\clip命令,则该命令之后的所有内容都将被从绘图中剪掉。除非 ping\clip是在scope,则只有范围内的内容才会被剪裁。为了展示这些效果,让我们继续绘图,在之前定义的黑点上方添加红点,并在中间添加一个正方形(请注意,红点在范围内,正方形在范围之外)。

\documentclass[tikz, border=2mm]{standalone}

\begin{document}
  \begin{tikzpicture}[point/.style={fill,inner sep=0pt, minimum size=2pt, circle}]
    %\clip (2,0) rectangle (4,4); %Clips everything including the graph bounding box
    \node[draw,minimum size=4cm+2pt,inner sep=0pt](bounding box) at (2,2) {};
    %\clip (bounding box.north) rectangle (bounding box.south east); %Clips everything after it
    \foreach \i in {1,...,100}{\node[point] (p\i) at ({4*rnd},{4*rnd}) {};};
    \begin{scope}
      %\clip (bounding box.north) rectangle (bounding box.south east); %Clips only the scope
      \foreach \i in {1,...,100} \node[point,red] at (p\i) {};
    \end{scope}
    \node[draw,fill=white] at (bounding box.center){};
  \end{tikzpicture}
\end{document}

第一个\clip,剪切所有内容,包括边界框,留下一半的绘图尺寸(2cm x 2cm):

剪辑为第一件事

第二个\clip,剪辑一切在它之前定义的节点bounding box,使图形大小为 4cm x 4cm,但只有一半填充了内容:

剪辑在图纸的中间

最后,第三部分\clip只剪辑了scope(红点),使正方形保持完整(即使它是在之后定义的\clip)并且一半的黑点隐藏在红点下面:

在范围内剪辑

所有这些意味着,如果你想要剪裁整个绘图,\clip那么首先要做的就是在绘图中处理。如果你想要剪裁某个点之后的所有\clip内容。如果你只想剪裁绘图中间的某些内容,那么请将这些东西放在scope

相关内容