tikz 圆形操作及填充

tikz 圆形操作及填充

我想添加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 styleevery 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沒有填满。

在此处输入图片描述

相关内容