矩形内的圆圈

矩形内的圆圈

我需要创建一个这样的图形:

在此处输入图片描述

我的糟糕代码如下。

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[rounded corners=15pt]
(10,0) rectangle ++(15,3);
\begin{tikzpicture}
\draw (5,1) circle (1cm);
\end{tikzpicture}
\end{tikzpicture}
\end{document}

但是这段代码不起作用,因为圆圈会超出矩形的范围,而这并不是我想要的。

我的问题是:

为什么这段代码不起作用?在其他程序中,当你将循环放在循环内时,它会按预期工作,但在这里将 a 放在tikzpicturea 内却不能像我预期的那样工作。也就是说,嵌套的s 在 TikZ 中通常tikzpicture是如何工作的?tikzpicture

答案1

完全可以嵌套循环。然而,嵌套tikzpicture环境是危险的。虽然有时可以,但应该避免。基本上,它预计会破裂。

我要做的是画圆圈第一的以及fit它们周围的外框。例如:

\documentclass[border=5pt,tikz,multi]{standalone}
\usetikzlibrary{fit,positioning}
\begin{document}
\begin{tikzpicture}[ultra thick]
  \coordinate (c0) at (0,0);
  \foreach \i [count=\j, evaluate=\j as \k using \j-1, evaluate=\j as \m using { int(mod(\j,5))==0 ? "" : "draw" }, evaluate=\j as \n using { \j>10 ? "20mm" : "10mm" }] in {1,...,11}
  \node (c\j) [right=7.5pt of c\k |- c0, circle, anchor=north west, minimum size=\n, \m] {};
  \node [fit=(c1) (c11), draw, rounded corners=15pt, inner xsep=5mm, minimum height=30mm] {};
\end{tikzpicture}
\end{document}

收音机

如果你愿意,你可以简单地逐个绘制圆圈,然后以同样的方式绘制方框。只需命名最左边和最右边,这样你就可以说出fit=(<name 1>) (<name 2>)一切就好了。

在这个特殊情况下,如果您真的想要,您可以嵌套 s tikzpicture。但是,(5,1)位于x=5cm,正好位于 框最左边界的左侧x=10cm。因此,要将其放入框中,您需要将其放入框中。

您还需要将其放入tikzpicture节点中。例如:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{fit,positioning}
\begin{document}
\begin{tikzpicture}
  \draw [rounded corners=15pt] (10,0) rectangle ++(15,3);
  \node at (12.5,1.5) {% BREAKAGE EXPECTED !!
    \begin{tikzpicture}% DON"T TRY THIS AT HOME !!
      \draw circle (1cm);
    \end{tikzpicture}
  };
\end{tikzpicture}
\end{document}

盒子里的圆圈

但当写

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{fit,positioning}
\begin{document}
\begin{tikzpicture}
  \draw [rounded corners=15pt] (10,0) rectangle ++(15,3);
  \draw (12.5,1.5) circle (1cm);
\end{tikzpicture}
\end{document}

它可以更轻松地产生相同的结果,而没有伴随的风险。

答案2

许多可能的解决方案之一(考虑到第一个@cfr 评论):

\documentclass[border=11mm,
               tikz]{standalone}
\usetikzlibrary{calc}

    \begin{document}
\begin{tikzpicture}[
box/.style = {draw, rounded corners=15pt,
              minimum width=150mm, minimum height=30mm}
                    ]
\node (a)   [box] {};
\foreach \i in {1,...,4}
    \draw ($(a.west)+(1.1*\i,0.5)$) circle (5mm);
\foreach \i in {1,...,4}
    \draw ($(a.west)+(5+1.1*\i,0.5)$) circle (5mm);
\draw ($(a.east)-(2,0)$) circle (10mm);
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容