我想添加circles
路径。除了一个圆之外的所有圆我都希望它们被填充,因此我设置了every circle node/.style={fill}
。但是有一个圆我不想被填充,但是fill=none
却没有给出期望的结果。
\documentclass{article}
\usepackage[english]{babel}
\usepackage[utf8x]{inputenc}
\usepackage{tikz}
\usepackage{bm}
\usepackage[T1]{fontenc}
\usetikzlibrary{scopes}
\begin{document}
\begin{tikzpicture}
{ [every circle node/.style={minimum width=.5ex, fill=black}]
\draw (0,0) node[fill=none, circle]{a}; %this should not be filled, but all other circles in the scope should.
}
\draw (0,1) node[circle, draw]{a};
\end{tikzpicture}
\end{document}
答案1
这里的问题是 TikZ 应用了every <shape> node
样式后它已经处理了明确提供给节点的选项。片刻的思考表明,它必须这样做:TikZ 在处理了提供给节点的选项之前不知道节点的形状,并且由于形状可能深埋在其他样式中,因此它基本上必须完全处理所有内容。因此,fill=none
在之前应用,every circle style
因此被fill=black
其中的覆盖。
要解决这个问题,您需要在 上找到一个钩子。一种方法是简单地从节点选项内部every circle style
添加到本身。由于这些是首先处理的,因此它们会对键产生影响。完整地说,这有点冗长,但您始终可以定义快捷方式。every circle style
every circle style
\documentclass{article}
%\url{http://tex.stackexchange.com/q/119942/86}
\usepackage{tikz}
\usetikzlibrary{scopes}
\begin{document}
\begin{tikzpicture}
{ [every circle node/.style={minimum width=.5ex, fill=black}]
\draw (0,0) node[circle,every circle node/.append
style={fill=none}]{a}; %this should not be filled, but all other
circles in the scope should.
\draw (1,0) node[circle]{a};
}
\draw (0,1) node[circle, draw]{a};
\end{tikzpicture}
\end{document}
答案2
您可以定义两种不同的样式:
\documentclass{article}
\usepackage{tikz}
\tikzset{%
mynode/.style={circle,minimum width=.5ex, fill=none,draw}, % no filling
myfillnode/.style={circle,minimum width=.5ex, fill=black,draw}, % fill with black
}
\begin{document}
\begin{tikzpicture}[every node/.style ={myfillnode}]
\draw (0,0) node[mynode]{a}; %this should not be filled, but all other circles in the scope should.
\draw (0,1) node{a};
\end{tikzpicture}
\end{document}
這裡mynode
沒有填满。