关于“tikzpicture”的问题

关于“tikzpicture”的问题

我对使用“tikzpicture”有疑问。我打算画一个图形,其中包括一个顶部矩形、中间圆形和底部矩形。我尝试绘制我想要的图形,同时考虑每个形状的协调性。但我想根据上部形状的位置来考虑每个形状的位置。我编写了我想要的代码,但我的形状之间有交集。

这是我的代码:

\documentclass{article}
 \usepackage{tikz}
 \usepackage{pgfplots}
\begin{document}
\tikzstyle{cir}=[circle,draw=blue!50,fill=blue!20,thick,
inner sep=0pt,minimum size=3cm]
\tikzstyle{rec}=[rectangle,draw=black!50,fill=black!20,thick,
    inner sep=0pt,minimum size=3cm]
\begin{figure}
   \centering
   \begin{tikzpicture}
     \node[rec] (top_rec)                            {};
     \node[cir] (middle_cir) [below of=top_rec]      {};
     \node[rec] (down_rec)   [below of=middle_cir]   {};
     \end{tikzpicture}   
  \caption{Caption}
  \label{fig:my_label}
\end{figure}
\end{document}

这也是我得到的在此处输入图片描述

答案1

这是你想要的吗?

在此处输入图片描述

请注意,我改变了节点样式中的锚点,并明确地使用at和传递锚点来改变它们的位置。

\documentclass{article}
 \usepackage{tikz}
 \usepackage{pgfplots}
\begin{document}
\tikzstyle{cir}=[circle,draw=blue!50,fill=blue!20,thick,
inner sep=0pt,minimum size=3cm,anchor=north] % added anchor
\tikzstyle{rec}=[rectangle,draw=black!50,fill=black!20,thick,
    inner sep=0pt,minimum size=3cm,anchor=north] % added anchor
\begin{figure}
   \centering
   \begin{tikzpicture}[]
     \node[rec] (top_rec)                            {A};
     \node[cir] (middle_cir) at (top_rec.south)      {B}; % changed
     \node[rec] (down_rec)   at (middle_cir.south)   {C}; % changed
   \end{tikzpicture}
   \caption{Caption}
   \label{fig:my_label}
\end{figure}
\end{document}

答案2

使用chainspositioning库,并将节点样式定义为`tikzpicture 的选项:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{chains,
                positioning}


\begin{document}
    \begin{figure}
   \centering
   \begin{tikzpicture}[
node distance = 0pt,
  start chain = going below,
     C/.style = {circle, draw=blue!50,thick, fill=blue!20,
                 inner sep=0pt, minimum size=3cm,
                 on chain},
     R/.style = {draw=black!50, thick, fill=black!20,
                 inner sep=0pt, minimum size=3cm,
                 on chain}
                        ]
\node[R] (n1)   {};
\node[C] (n2)   {};
\node[R] (n3)   {};
     \end{tikzpicture}
\caption{Caption}
\label{fig:my_label}
    \end{figure}
\end{document}

编译结果为:

在此处输入图片描述

附录: 关于您对新请求的评论:

  • 请不要在我的答案中添加一些代码来改变它。如果您有新问题,请提出新问题,如果您想澄清您的问题,请编辑您的问题并在那里描述它,以便网站的其他成员可以看到它。
  • 您可以将图像中矩形之间的带标签箭头绘制为带引号的边。请参阅下面的 MWE。
  • 在下面的 MWE 中,节点样式声明也发生了变化。我这样做是为了展示如何定义它的更多可能性,以及它们支持您在评论中的新请求。
  • 您可以根据需要更改引文的样式和文本。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,
                chains,
                positioning,
                quotes}


\begin{document}
    \begin{figure}
   \centering
   \begin{tikzpicture}[
node distance = 0pt,
  start chain = going below,
  base/.style = {draw=#1!50, thick, fill=#1!20,
                 inner sep=0pt, outer sep=0pt, minimum size=3cm,
                 on chain}, % <--- new 
     C/.style = {circle, base=blue},    % <--- changed
     R/.style = {base=black},           % <--- changed
       every edge/.style = {draw, -Straight Barb, semithick, bend angle=45},    % <---  for edges
every edge quotes/.style = {auto=right, font=\small\bfseries}   % <--- for quotes on edges
                        ]
\node[R] (n1)   {};
\node[C] (n2)   {};
\node[R] (n3)   {};
% edges
\draw   (n1.west)  edge [bend right, "A"] (n3.west)
        (n3.east)  edge [bend right, "B"] (n1.east);
     \end{tikzpicture}
\caption{Caption}
\label{fig:my_label}
    \end{figure}
\end{document}

在此处输入图片描述

相关内容