考虑以下代码:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shadows.blur}
\pgfdeclarelayer{bg}
\pgfsetlayers{bg,main}
\begin{document}
\begin{tikzpicture}
\tikzstyle{MyNode}=[%
minimum height=8mm, minimum width=10mm,
blur shadow={shadow blur steps=5},
fill=gray]
\begin{scope}
\node[MyNode]{A};
\begin{pgfonlayer}{bg}
\node at (1,0){A-bg};
\end{pgfonlayer}
\end{scope}
\begin{scope}[xshift=55mm]
\node[MyNode]{A};
\begin{pgfonlayer}{bg}
\node at (1,0){A-bg};
\end{pgfonlayer}
\end{scope}
\end{tikzpicture}
\end{document}
当该行blur shadow={shadow blur steps=5}
存在时, 的内容\begin{pgfonlayer}{bg}
不会出现在 PDF 中(或者至少我看不到它)。当我注释该行时,我可以看到它。我遗漏了什么?(我在 overleaf 和我的计算机上尝试了此代码pdflatex
。行为相同。)下面的图片是注释或未注释该行时的屏幕截图。
编辑:我更新了代码来显示为什么切换范围的顺序没有帮助(无论你按什么顺序放置它们,首先出现的那个都会缺少其内容\begin{pgfonlayer}{bg}
)。
答案1
这只是(并且最多)一种解决方法。您可以将背景节点后带有阴影的节点。(将其放置在前面有点违背了将其放置在较低层的目的,但我明白这只是一个最小的工作示例,在某些情况下这样做确实有意义。)
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shadows.blur}
\pgfdeclarelayer{bg}
\begin{document}
\begin{tikzpicture}[MyNode/.style={minimum height=8mm, minimum width=15mm,
blur shadow={shadow blur steps=5},
fill=gray
}]
\pgfsetlayers{bg,main}
\begin{scope}
\node{A};
\end{scope}
\begin{scope}[xshift=55mm]
\node[MyNode]{A};
\end{scope}
\begin{pgfonlayer}{bg}
\node{A-bg};
\end{pgfonlayer}
\end{tikzpicture}
\end{document}
至于为什么会发生这种情况,我并不完全清楚。图层和shadows.blur
创建了一些框,它们会移动。出于某种原因,创建框shadows.blur
似乎会破坏背景层上的框。(但是,添加\node[MyNode]{A};
图层bg
也可以解决问题。
如果有真正的答案,我会很乐意删除这个解决方法。