Filling a box excluding circles inside it
I was trying to create an image in TIKZ. My code is as below:
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}
and the result is this

How can I fill the box with any color only excluding the circles and the dots?
Also is there any way to export tikz image(I want to use tikz produced image in a word document)?
tikz-pgf
add a comment |
I was trying to create an image in TIKZ. My code is as below:
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}
and the result is this

How can I fill the box with any color only excluding the circles and the dots?
Also is there any way to export tikz image(I want to use tikz produced image in a word document)?
tikz-pgf
You could just draw the big box first and then draw the other stuff over top of it.
– JPi
Dec 30 '18 at 4:00
When you compile a document, you get a pdf. If you use the standalone class, it will have the right size. And pdf files can be included into word documents, I think.
– marmot
Dec 30 '18 at 4:34
add a comment |
I was trying to create an image in TIKZ. My code is as below:
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}
and the result is this

How can I fill the box with any color only excluding the circles and the dots?
Also is there any way to export tikz image(I want to use tikz produced image in a word document)?
tikz-pgf
I was trying to create an image in TIKZ. My code is as below:
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}
and the result is this

How can I fill the box with any color only excluding the circles and the dots?
Also is there any way to export tikz image(I want to use tikz produced image in a word document)?
tikz-pgf
tikz-pgf
asked Dec 30 '18 at 3:48
Bloodstone ProgrammerBloodstone Programmer
723
723
You could just draw the big box first and then draw the other stuff over top of it.
– JPi
Dec 30 '18 at 4:00
When you compile a document, you get a pdf. If you use the standalone class, it will have the right size. And pdf files can be included into word documents, I think.
– marmot
Dec 30 '18 at 4:34
add a comment |
You could just draw the big box first and then draw the other stuff over top of it.
– JPi
Dec 30 '18 at 4:00
When you compile a document, you get a pdf. If you use the standalone class, it will have the right size. And pdf files can be included into word documents, I think.
– marmot
Dec 30 '18 at 4:34
You could just draw the big box first and then draw the other stuff over top of it.
– JPi
Dec 30 '18 at 4:00
You could just draw the big box first and then draw the other stuff over top of it.
– JPi
Dec 30 '18 at 4:00
When you compile a document, you get a pdf. If you use the standalone class, it will have the right size. And pdf files can be included into word documents, I think.
– marmot
Dec 30 '18 at 4:34
When you compile a document, you get a pdf. If you use the standalone class, it will have the right size. And pdf files can be included into word documents, I think.
– marmot
Dec 30 '18 at 4:34
add a comment |
2 Answers
2
active
oldest
votes
One solution is to fill the circle nodes white and draw the container on the background layer.
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}

Another possibility is to use even odd rule, which is in this case a bit more cumbersome but has the advantage that, if you have a background picture, it won't get overdrawn by 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}
Yet another possibility is to use 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}
All options lead to the same output.
1
Thereverseclipsolution trims the border of circular nodes (as in Is there a way to draw TikZ lines on the “inside” or “outside” of a path?).
– Paul Gaborit
Dec 30 '18 at 8:09
@PaulGaborit That's correct. One might increase the line width or redraw the circles, as you do in your answer there (+1). In theeven odd rulepart of my answer I have taken care of this.
– marmot
Dec 30 '18 at 14:41
add a comment |
How about using tcbox from the tcolorbox package? The only change needed is adding fill=white to the neuron style, and then use tcbox instead of the enclosing node. Note that I commented out the group style.
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}

add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "85"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f467876%2ffilling-a-box-excluding-circles-inside-it%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
One solution is to fill the circle nodes white and draw the container on the background layer.
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}

Another possibility is to use even odd rule, which is in this case a bit more cumbersome but has the advantage that, if you have a background picture, it won't get overdrawn by 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}
Yet another possibility is to use 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}
All options lead to the same output.
1
Thereverseclipsolution trims the border of circular nodes (as in Is there a way to draw TikZ lines on the “inside” or “outside” of a path?).
– Paul Gaborit
Dec 30 '18 at 8:09
@PaulGaborit That's correct. One might increase the line width or redraw the circles, as you do in your answer there (+1). In theeven odd rulepart of my answer I have taken care of this.
– marmot
Dec 30 '18 at 14:41
add a comment |
One solution is to fill the circle nodes white and draw the container on the background layer.
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}

Another possibility is to use even odd rule, which is in this case a bit more cumbersome but has the advantage that, if you have a background picture, it won't get overdrawn by 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}
Yet another possibility is to use 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}
All options lead to the same output.
1
Thereverseclipsolution trims the border of circular nodes (as in Is there a way to draw TikZ lines on the “inside” or “outside” of a path?).
– Paul Gaborit
Dec 30 '18 at 8:09
@PaulGaborit That's correct. One might increase the line width or redraw the circles, as you do in your answer there (+1). In theeven odd rulepart of my answer I have taken care of this.
– marmot
Dec 30 '18 at 14:41
add a comment |
One solution is to fill the circle nodes white and draw the container on the background layer.
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}

Another possibility is to use even odd rule, which is in this case a bit more cumbersome but has the advantage that, if you have a background picture, it won't get overdrawn by 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}
Yet another possibility is to use 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}
All options lead to the same output.
One solution is to fill the circle nodes white and draw the container on the background layer.
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}

Another possibility is to use even odd rule, which is in this case a bit more cumbersome but has the advantage that, if you have a background picture, it won't get overdrawn by 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}
Yet another possibility is to use 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}
All options lead to the same output.
edited Dec 30 '18 at 4:09
answered Dec 30 '18 at 3:53
marmotmarmot
111k5137257
111k5137257
1
Thereverseclipsolution trims the border of circular nodes (as in Is there a way to draw TikZ lines on the “inside” or “outside” of a path?).
– Paul Gaborit
Dec 30 '18 at 8:09
@PaulGaborit That's correct. One might increase the line width or redraw the circles, as you do in your answer there (+1). In theeven odd rulepart of my answer I have taken care of this.
– marmot
Dec 30 '18 at 14:41
add a comment |
1
Thereverseclipsolution trims the border of circular nodes (as in Is there a way to draw TikZ lines on the “inside” or “outside” of a path?).
– Paul Gaborit
Dec 30 '18 at 8:09
@PaulGaborit That's correct. One might increase the line width or redraw the circles, as you do in your answer there (+1). In theeven odd rulepart of my answer I have taken care of this.
– marmot
Dec 30 '18 at 14:41
1
1
The
reverseclip solution trims the border of circular nodes (as in Is there a way to draw TikZ lines on the “inside” or “outside” of a path?).– Paul Gaborit
Dec 30 '18 at 8:09
The
reverseclip solution trims the border of circular nodes (as in Is there a way to draw TikZ lines on the “inside” or “outside” of a path?).– Paul Gaborit
Dec 30 '18 at 8:09
@PaulGaborit That's correct. One might increase the line width or redraw the circles, as you do in your answer there (+1). In the
even odd rule part of my answer I have taken care of this.– marmot
Dec 30 '18 at 14:41
@PaulGaborit That's correct. One might increase the line width or redraw the circles, as you do in your answer there (+1). In the
even odd rule part of my answer I have taken care of this.– marmot
Dec 30 '18 at 14:41
add a comment |
How about using tcbox from the tcolorbox package? The only change needed is adding fill=white to the neuron style, and then use tcbox instead of the enclosing node. Note that I commented out the group style.
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}

add a comment |
How about using tcbox from the tcolorbox package? The only change needed is adding fill=white to the neuron style, and then use tcbox instead of the enclosing node. Note that I commented out the group style.
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}

add a comment |
How about using tcbox from the tcolorbox package? The only change needed is adding fill=white to the neuron style, and then use tcbox instead of the enclosing node. Note that I commented out the group style.
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}

How about using tcbox from the tcolorbox package? The only change needed is adding fill=white to the neuron style, and then use tcbox instead of the enclosing node. Note that I commented out the group style.
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}

edited Jan 1 at 18:38
answered Jan 1 at 18:30
Máté WierdlMáté Wierdl
51629
51629
add a comment |
add a comment |
Thanks for contributing an answer to TeX - LaTeX Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f467876%2ffilling-a-box-excluding-circles-inside-it%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
You could just draw the big box first and then draw the other stuff over top of it.
– JPi
Dec 30 '18 at 4:00
When you compile a document, you get a pdf. If you use the standalone class, it will have the right size. And pdf files can be included into word documents, I think.
– marmot
Dec 30 '18 at 4:34