我试图在 TIKZ 中创建图像。我的代码如下:
\documentclass[10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric, shadows, fit, arrows, positioning}
\begin{document}
\begin{center}
\tikzset{
neuron/.style={shape=circle,draw,inner sep= 0pt,minimum size = 2.5 em, node
distance = 10ex and 1 em
},
every loop/.style={min distance=10mm,looseness=5},
dot/.style={shape=circle,minimum size=1mm, inner sep=0pt, fill=black, node
distance= 1ex and 2 em
},
group/.style={rectangle,draw, inner sep=1pt,rounded corners,minimum height=
3.5em,minimum width=15.5 em, node distance= 1ex and 1em},
conn/.style={draw,-latex'}
}
\begin{tikzpicture}
\node[neuron](x1){$x_1$};
\node[neuron,right=of x1](x2){$x_2$};
\node[dot,right=of x2](dot_1){};
\node[dot,right=of dot_1](dot_2){};
\node[neuron,right=of dot_2](xN){$x_N$};
\node[group,fit={(x1)(x2)(dot_1)(dot_2)(xN)}](grp1){};
\end{tikzpicture}
\end{center}
\end{document}
我怎样才能用除圆圈和点之外的任何颜色填充框?还有什么方法可以导出 tikz 图像(我想在 word 文档中使用 tikz 生成的图像)?
答案1
一种解决方案是将圆形节点填充为白色,并在背景层上绘制容器。
\documentclass[10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric, shadows, fit, arrows, positioning,backgrounds}
\begin{document}
\begin{center}
\tikzset{
neuron/.style={shape=circle,draw,inner sep= 0pt,minimum size = 2.5 em, node
distance = 10ex and 1 em,fill=white},
every loop/.style={min distance=10mm,looseness=5},
dot/.style={shape=circle,minimum size=1mm, inner sep=0pt, fill=black, node
distance= 1ex and 2 em
},
group/.style={rectangle,draw, inner sep=1pt,rounded corners,minimum height=
3.5em,minimum width=15.5 em, node distance= 1ex and 1em},
conn/.style={draw,-latex'}
}
\begin{tikzpicture}
\node[neuron](x1){$x_1$};
\node[neuron,right=of x1](x2){$x_2$};
\node[dot,right=of x2](dot_1){};
\node[dot,right=of dot_1](dot_2){};
\node[neuron,right=of dot_2](xN){$x_N$};
\begin{scope}[on background layer]
\node[group,fit={(x1)(x2)(dot_1)(dot_2)(xN)},fill=blue!20](grp1){};
\end{scope}
\end{tikzpicture}
\end{center}
\end{document}
另一种可能性是使用even odd rule
,在这种情况下有点麻烦,但优点是,如果您有背景图片,它就不会被过度绘制fill=white
。
\documentclass[10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric, shadows, fit, arrows, positioning}
\makeatletter % https://tex.stackexchange.com/a/38995/121799
\tikzset{
use path/.code={\pgfsyssoftpath@setcurrentpath{#1}}
}
\makeatother
\begin{document}
\begin{center}
\tikzset{
neuron/.style={shape=circle,draw,inner sep= 0pt,minimum size = 2.5 em, node
distance = 10ex and 1 em,fill=white},
every loop/.style={min distance=10mm,looseness=5},
dot/.style={shape=circle,minimum size=1mm, inner sep=0pt, fill=black, node
distance= 1ex and 2 em
},
group/.style={rectangle,draw, inner sep=1pt,rounded corners,minimum height=
3.5em,minimum width=15.5 em, node distance= 1ex and 1em},
conn/.style={draw,-latex'}
}
\begin{tikzpicture}
\node[neuron](x1){$x_1$};
\node[neuron,right=of x1](x2){$x_2$};
\node[dot,right=of x2](dot_1){};
\node[dot,right=of dot_1](dot_2){};
\node[neuron,right=of dot_2](xN){$x_N$};
\node[group,fit={(x1)(x2)(dot_1)(dot_2)(xN)},save path=\pathF](grp1){};
\fill[blue!20,even odd rule] [use path=\pathF]
(x1.center) circle (1.25em+\pgflinewidth/2)
(x2.center) circle (1.25em+\pgflinewidth/2) (xN.center) circle (1.25em+\pgflinewidth/2)
(dot_1.center) circle(0.5mm) (dot_2.center) circle(0.5mm);
\end{tikzpicture}
\end{center}
\end{document}
还有一种可能性是使用reverseclip
。
\documentclass[10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric, shadows, fit, arrows, positioning}
\makeatletter % https://tex.stackexchange.com/a/38995/121799
\tikzset{
use path/.code={\pgfsyssoftpath@setcurrentpath{#1}}
}
\makeatother
% https://tex.stackexchange.com/a/12033/121799
\tikzset{reverseclip/.style={insert path={(current bounding box.north
east) rectangle (current bounding box.south west)}}}
\begin{document}
\begin{center}
\tikzset{
neuron/.style={shape=circle,draw,inner sep= 0pt,minimum size = 2.5 em, node
distance = 10ex and 1 em,fill=white},
every loop/.style={min distance=10mm,looseness=5},
dot/.style={shape=circle,minimum size=1mm, inner sep=0pt, fill=black, node
distance= 1ex and 2 em
},
group/.style={rectangle,draw, inner sep=1pt,rounded corners,minimum height=
3.5em,minimum width=15.5 em, node distance= 1ex and 1em},
conn/.style={draw,-latex'}
}
\begin{tikzpicture}
\node[neuron,save path=\pathA](x1){$x_1$};
\node[neuron,right=of x1,save path=\pathB](x2){$x_2$};
\node[dot,right=of x2,save path=\pathC](dot_1){};
\node[dot,right=of dot_1,save path=\pathD](dot_2){};
\node[neuron,right=of dot_2,save path=\pathE](xN){$x_N$};
\node[group,fit={(x1)(x2)(dot_1)(dot_2)(xN)},save path=\pathF](grp1){};
\begin{scope}
\clip [use path=\pathA,reverseclip];
\clip [use path=\pathB,reverseclip];
\clip [use path=\pathC,reverseclip];
\clip [use path=\pathD,reverseclip];
\clip [use path=\pathE,reverseclip];
\fill[blue!20] [use path=\pathF];
\end{scope}
\end{tikzpicture}
\end{center}
\end{document}
所有选项都导致相同的输出。
答案2
如何\tcbox
从tcolorbox
包中使用?唯一需要做的更改是添加 fill=white
到神经元样式,然后使用它\tcbox
而不是封闭节点。请注意,我注释掉了组样式。
\documentclass[10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric, shadows, fit, arrows, positioning}
\usepackage{tcolorbox}
\begin{document}
\begin{center}
\tikzset{
neuron/.style={fill=white,shape=circle,draw,inner sep= 0pt,minimum size = 2.5 em, node
distance = 10ex and 1 em
},
every loop/.style={min distance=10mm,looseness=5},
dot/.style={shape=circle,minimum size=1mm, inner sep=0pt, fill=black, node
distance= 1ex and 2 em
},
% group/.style={rectangle,draw, inner sep=1pt,rounded corners,minimum height=
% 3.5em,minimum width=15.5 em, node distance= 1ex and 1em},
% conn/.style={draw,-latex'}
}
\tcbox{
\begin{tikzpicture}
\node[neuron](x1){$x_1$};
\node[neuron,right=of x1](x2){$x_2$};
\node[dot,right=of x2](dot_1){};
\node[dot,right=of dot_1](dot_2){};
\node[neuron,right=of dot_2](xN){$x_N$};
\end{tikzpicture}
}
\end{center}
\end{document}