我是 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
一些评论:
您不需要嵌套
tikzpicture
;您可以在单个环境中完成所有六个“子图”,而无需嵌套。使用该
fit
库,您可以为每个子图生成矩形框架:它们只是\node
s,因此您可以命名它们并使用标签来放置所需的字符串。您可以
\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}