如何为已经包含带有节点的 tikzpicture 的节点赋予标签。

如何为已经包含带有节点的 tikzpicture 的节点赋予标签。

我是 TikZ 和 LaTeX 的初学者。这是我目前拥有的: 在此处输入图片描述

我想用一个字母标记每个矩形(即图形),即 G。

这是该图片中单个图形的代码:

  \node[outer] (L) {
  \begin{tikzpicture}
    \node [inner,label=below:1] (a) at (0,0) {1};
    \node [inner] (ai) at (1,0) {1};
    \node [inner,label=below:2] (aii) at (2,0) {1};
    \draw[->] (a) edge (ai);
    \draw[->] (ai) edge (aii);
  \end{tikzpicture}
  };

具体来说,这是最左上角图表的代码。

我想给它一个标签 L。我在网上看到,要给 tikzpicture 加标题(标签),你必须把它放在 tikz 图形里面。我已经为大图做了这件事,因此你可以在整张图片下面看到“图 3:双推出”。

但是当我把这个节点 L 的内容放在 tikzfigure 里面时,即

  \node[outer] (L) {
\begin{figure}
\begin{tikzpicture}
  \node [inner,label=below:1] (a) at (0,0) {1};
  \node [inner] (ai) at (1,0) {1};
  \node [inner,label=below:2] (aii) at (2,0) {1};
  \draw[->] (a) edge (ai);
  \draw[->] (ai) edge (aii);
\end{tikzpicture}
\end{figure}
   };

它会引发一个错误。

! LaTeX Error: Not in outer par mode.

此外,确实有很多“数字”,对我来说似乎没有必要?

我也尝试了这个解决方案(适用于小节点),所以

  \node[outer] (L) {

我写

  \node[outer, label=above:L] (L) {

但它会引发这个错误:

! Undefined control sequence.
<argument> pgf@sh@ns@\tikzlastnode 
l.15 \draw[->] (a) edge (ai)

专家们,我的代码可能对您来说很愚蠢。所以请随时指出任何错误!我感觉对于我想要实现的目标来说我太“啰嗦”了。

为了完整起见,我会说大 tikzpicture 具有以下设置:

\begin{figure}[htb!]
\centering
\begin{tikzpicture}[remember picture,
inner/.style={circle,draw,inner sep=4},
outer/.style={draw,inner sep=4, outer sep=2} % deleted thick here after draw

谢谢大家的帮助!

答案1

另一种选择是,将其draw移出{外部标签}。

在此处输入图片描述

代码

\documentclass[border=10pt]{standalone}

\usepackage[demo]{graphicx}
\usepackage{tikz}
\usetikzlibrary{arrows,positioning}

\begin{document}
%
\begin{tikzpicture}[remember picture,
inner/.style={circle,draw,inner sep=4},
outer/.style={draw,inner sep=4, outer sep=2}]

 \node[outer,label=above:L]  (L) {
  \begin{tikzpicture}
    \node [inner,label=below:1] (a) at (0,0) {1};
    \node [inner] (ai) at (1,0) {1};
    \node [inner,label=below:2] (aii) at (2,0) {1};
  \end{tikzpicture}
  };
  \draw[->] (a) edge (ai)  (ai) edge (aii);


\begin{scope}[xshift=4cm]
 \node[outer,label=above:M]  (M) {
  \begin{tikzpicture}
    \node [inner,label=below:1] (a) at (0,0) {1};
%    \node [inner] (ai) at (1,0) {1};
    \node [inner,label=below:2] (aii) at (2,0) {1};
  \end{tikzpicture}
  };
  \draw[->] (a) edge  (aii);
\end{scope}

\draw[->] (L) -- (M);

\end{tikzpicture}
\end{document}

答案2

一些评论:

  1. 您不需要嵌套tikzpicture;您可以在单个环境中完成所有六个“子图”,而无需嵌套。

  2. 使用该fit库,您可以为每个子图生成矩形框架:它们只是\nodes,因此您可以命名它们并使用标签来放置所需的字符串。

  3. 您可以\node使用定位库和=of语法更轻松地放置您的 s。

代码:

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

\begin{document}

\begin{figure}
\begin{tikzpicture}[
  remember picture,
  inner/.style={circle,draw,inner sep=4,minimum size=20pt},
  outer/.style={draw,inner sep=4, outer sep=2},
  node distance=0.5cm
]
% top left
\node [inner,label=below:1] (a) {1};
\node [inner,right=of a] (ai) {1};
\node [inner,label=below:2,right=of ai] (aii) {1};
\draw[->] (a) edge (ai);
\draw[->] (ai) edge (aii);
\coordinate[below=0.5cm of a] (aux1);
\node[draw,fit={(a) (aux1) (aii)},inner ysep=10pt,label={above:L}] (boxtl) {};

% top middle
\begin{scope}[xshift=4.5cm]
\node [inner,label=below:1] (b) {};
\node [inner,right=of b,draw=none] (bi) {};
\node [inner,label=below:2,right=of bi] (bii) {};
\coordinate[below=0.5cm of b] (aux2);
\node[draw,fit={(b) (aux2) (bii)},inner ysep=10pt,label={above:M}] (boxtm) {};
\end{scope}

% top middle
\begin{scope}[xshift=9cm]
\node [inner,label=below:1] (c) {2};
\node [inner,right=of c,draw=none] (ci) {};
\node [inner,label=below:2,right=of ci] (cii) {3};
\coordinate[below=0.5cm of c] (aux3);
\node[draw,fit={(c) (aux3) (cii)},inner ysep=10pt,label={above:N}] (boxtr) {};
\end{scope}

% the arrows
\draw[->] (boxtr) -- (boxtm);
\draw[->] (boxtm) -- (boxtl);
\end{tikzpicture}
\caption{a figure with six subfigures}
\end{figure}

\end{document}

在此处输入图片描述

相关内容