如何在本地覆盖/取消阴影?

如何在本地覆盖/取消阴影?

在下面的示例中,我定义的样式every node使用了阴影。我的a节点使用该默认样式,无需修改。但是,我想为节点覆盖该样式b,该节点应该完全没有阴影。

我尝试过

  • 传递fill opacity=0drop shadow本地,或
  • 不向选项 ( drop shadow=,) 传递任何内容,

但节点b仍然有阴影。

我已阅读 TikZ/PGF (v3.0) 手册中有关该shadows库的第 66 节,但尚未找到覆盖drop shadow样式的方法。有什么帮助吗?

在此处输入图片描述

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{positioning,shadows}

\tikzset{
  every node/.style={
    draw,
    drop shadow = {opacity=0.5,fill=red},
    fill        = white,
  },
}

\begin{document}
\begin{tikzpicture}
\node (a) {a};
\node[
  right=of a,
  drop shadow={opacity=0}, % the shadow is still there
% drop shadow=,            % also no effet
] (b) {b};
\end{tikzpicture}
\end{document}

答案1

阴影会添加preaction。TikZ 不提供删除预操作的方法。在序言中,您可以定义自己的reset preactions键 :

\makeatletter
\tikzset{reset preactions/.code={\def\tikz@preactions{}}}
\makeatother

这是一个完整的例子:

在此处输入图片描述

\documentclass[margin=2mm]{standalone}

\usepackage{tikz}
\usetikzlibrary{positioning,shadows}

\makeatletter
\tikzset{reset preactions/.code={\def\tikz@preactions{}}}
\makeatother

\tikzset{
  every node/.style={
    draw,
    drop shadow = {opacity=0.5,fill=red},
    fill        = white,
  },
}

\begin{document}
\begin{tikzpicture}
\node (a) {a};
\node[right=of a,reset preactions] (b) {b};
\end{tikzpicture}
\end{document}

正如 Claudio Fiandrino 在其评论中所建议的,要将此新键应用于范围内的所有节点,您可以将其附加到every node样式:

\documentclass[margin=2mm]{standalone}

\usepackage{tikz}
\usetikzlibrary{positioning,shadows}

\makeatletter
\tikzset{reset preactions/.code={\def\tikz@preactions{}}}
\makeatother

\tikzset{
  every node/.style={
    draw,
    drop shadow = {opacity=0.5,fill=red},
    fill        = white,
  },
}

\begin{document}
\begin{tikzpicture}
\node (a) {a};
\begin{scope}[every node/.append style={reset preactions}]
  \node[right=of a] (b) {b}; 
  \node[right=of b] (c) {c};
\end{scope}
\end{tikzpicture}
\end{document}

答案2

如果我们把节点(或者节点我们不想遮蔽)并scope使用选项general shadow/.style={}

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{positioning,shadows}

\tikzset{
  every node/.style={
    draw,
    drop shadow = {opacity=0.5,fill=red},
    fill        = white,
  },
}

\begin{document}
\begin{tikzpicture}
\node (a) {a};
\begin{scope}[general shadow/.style={}]
\node[right=of a] (b) {b};
\end{scope}
\end{tikzpicture}
\end{document}

在此处输入图片描述

随着更多节点我们可以更好的观察效果。

\begin{tikzpicture}
\node (a) {a};
\begin{scope}[general shadow/.style={}]
\node[right=of a] (b) {b};
\node[right=of b] (c) {c};
\end{scope}
\node[right=of c] (d) {d};
\end{tikzpicture}

在此处输入图片描述

相关内容